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