This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SimpleLink and TI-RTOS/FreeRTOS

Other Parts Discussed in Thread: CC3200

Hello all,


The purpose of this thread is to start a discussion about how to approach development on the new CC3200 platform.


I am the proud new owner of a CC3200 launchpad.  So far, developing for this board has been a pleasure.  I acquired an LCD boosterpack, wrote a GrLib driver, and I printed some pretty things on the screen.  Working with the PinMux utility seems pretty straight forward too.  Did a bit more development to get some timer interrupts and GPIO interrupts working as well.  This was also an easy task.


Then I started trying to take advantage of the simplelink capability.  At this point, the whole process fell apart and I am quite frustrated.  The entire toolchain seems brittle to the point of being unusable.  The examples compile, link, and execute, but there is a lot going on behind the scenes.  Let me explain my experience and others can tell me where I blew it or if the capability is really this immature.


1.  *ALL* of the CC3200 simplelink examples require FreeRTOS.  It seems that the simplelink capability cannot be used in the absence of an RTOS.  Is it really true that we must use an RTOS to take advantage of simplelink capablities?

2.  Documentation and other posts here seem to indicate that the examples can be changed from FreeRTOS to TI-RTOS without much pain.  The has not been true in my experience.

a.  There are quite a few examples of TI-RTOS projects that are available from Resource Explorer.  However, not *one* of these examples uses simplelink capabilites

b.  After a bit of studying, it became clear to me how to configure the TI-RTOS kernel to do what I needed, (this experience was positive).  However, pulling the code from an existing simplelink application into the 'typical' project imported from Resource Explorer was a mess -- I gave up after concluding I could rewrite everything quicker than move the code.

3.  Therefore I started  with an existing simplelink example, (get time via NTP) and tried to get it working with TI-RTOS and I failed miserably.

a.  This project is set up to only use FreeRTOS.  However, things like System_printf sounded helpful to me; I had a conflict between the LCD and UART, so I had no typical standard out.  Sending things back to the debug console would be nice.

b.  I noticed that this project, (get time), imports and links against FreeRTOS and it has no build configurations to do anything but link against FreeRTOS.    The fact that the startup guide even asks us to configure the ti_rtos_config project is nonsensical.  To build the get_time project, it merely links against the existing FreeRTOS libraries...  Am I missing something?

c.  I changed the build configuration on oslib to build TI-RTOS wrappers rather than FreeRTOS wrappers.  I also changed the get time project to link against these newly generated wrappers.  At this point nothing will even build.

d.  It is unclear to me how the get_time, oslib, and ti_rtos_config all relate.  When I build the TI-RTOS example from Resource Explorer, I could call the System_printf function and it did the right thing.  I tried to add calls to this function in the get_time project, and encountered link errors, (the project couldn't find the library which contained the function)  It was clear to me that the example from Resource Explorer somehow had the smarts to both include headers and link libraries from somewhere in the guts of the TI-RTOS install directory.  Furthermore, it is looks as if the configuration settings in the example project assist in creating these libraries. 

e.  It isn't clear to me how to configure the existing ti_rtos_config project in a way that System_printf will be available, and it was even less clear to me what include and link dirs I should add to the get_time project in order to build and link with that functionality included.

4.  The way project imports and dependencies work seem a bit convoluted.

a.  Projects that I don't manipulate and only link to should be in the SDK.

b.  Projects that are 'mine' and I develop should be in my workspace.

c.  The ability to 'copy' the project into my workspace on import seem horribly broken.  I can understand that paths to link dirs may be screwed up, but the project can't even compile themselves after you try and copy them into your workspace.  I wanted to copy get_time into my workspace where it would become my production project.  However, even compiling existing .c files to object was broke.  It kept looking for them in the root of the workspace rather than where they got copied to


At this point, I'm starting to think that the path of least resistance to get a clean TI-RTOS project with simplelink capability is to go back to the Resource Explorer example.  From there I need to pull in / recode the functionality that I need.  My assertion is that getting TI-RTOS to work with the existing simplelink examples is a lost cause.  Is this congruent with other developers experiences? 

I remain excited about this new silicon -- I think the silicon is good and I think it will open doors for me and my organization.  However, the toolchains and development tools really seem to be standing in the way of making the new silicon perform.  Please tell me where I'm wrong and how I can improve my process.

V/R

Nate

  • Nathan Jensen said:

    My assertion is that getting TI-RTOS to work with the existing simplelink examples is a lost cause.  Is this congruent with other developers experiences? 

    I have tried several CC3200 examples programs that uses TI-RTOS without problems. So, maybe there is some procedure that you are doing wrong or possibly you need to update to CCS project settings to make it work.

    My advice to you is follow the CC3200 Getting Started Guide, to get familiarity how to set-up TI-RTOS with CC3200 example programs.

    Nathan Jensen said:
    I wanted to copy get_time into my workspace where it would become my production project.  However, even compiling existing .c files to object was broke.  It kept looking for them in the root of the workspace rather than where they got copied to

    You need to import the get_time example program into your new CCS workspace. What exact errors are you seeing. Post a picture here of the errors you are getting.

    - kel

  • Kel,

    Thanks for the prompt response!

    However, I think you may misunderstand me just a bit.  If I follow the getting started precisely, then the project will compile and build then execute.  However, the getting started document describes how to get the project working with *FreeRTOS*...  In fact, I would assert that the getting started guide is a bit misleading.  It is stating that we should configure TI-RTOS, but if you follow the directions precisely, then we are linking to FreeRTOS, not TI-RTOS.

    To see this, simply follow the getting started guide and then look at the gettings started station project and examine what is being linked by the linker...  It ain't TI-RTOS...  And making that change to get it working with TI-RTOS isn't a trivial endeavor.

    V/R

    Nate

  • Hi Nate,

    Let me try to clarify couple of points here:

    1. References to work with TI-RTOS

    The 2 different approaches/references to work with TI-RTOS are the following:

    a) CC3200 SDK release examples

    The link http://processors.wiki.ti.com/index.php/CC32xx_SDK_Sample_Applications state the examples in the CC3200 SDK release that may be used to work with TI-RTOS. All the applications use the TI-RTOS library when using the CCS IDE and FreeRTOS library when using the IAR IDE (the only exception being get_time application that uses TIRTOS library when using IAR IDE).

    Please share the IDE that you are using.

    b) TIRTOS release examples

    CC3200 being one of the supported platforms, TIRTOS release also have reference examples within it. There are however no networking examples yet.

    -- Considering that you are looking for networking examples, the CC3200 SDK would be the preferred choice.

    2. Also refer to http://processors.wiki.ti.com/index.php/CC32xx_TI-RTOS that captures the steps to build projects using TI-RTOS.

    Please use the CC3200 SDK as reference and feel free to let us know if you still face any difficulty.

    Best regards,

    Naveen

     

  • Naveen,

    So it looks like I get to eat some crow, (and I'm happy to do it). 

    The links that you provided were immensely helpful, and I think I am on track to understanding how things should be architected.  Again, thanks for your help!


    Nate