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.

FreeRTOS vs Ti-RTOS?

Other Parts Discussed in Thread: CC3200, CC3200SDK, SYSBIOS, CC3100

Does anyone have any advice on the pros and cons of TI-RTOS vs FreeRTOS?  We were originally building our project on another chip and planning on going with FreeRTOS, but when we switched to the CC3200 it seemed like TI-RTOS might be the logical choice.... however, in the C3200 example projects there seem almost be more examples that use FreeRTOS than TI-RTOS.

We are new to using RTOS, so any advice is appreciated!

Thanks,

Mark

  • Hi Mark,

         One benefit of using TI-RTOS is that if you encounter any problem using it, you can ask help at E2E TI-RTOS forum. 

         Also, any CC3200 example programs made using FreeRTOS can be ported to TI-RTOS. I can't say that would be easy, as I have not done that before.

    - kel

  • Hi Mark,

    There are many TI-RTOS examples:-

    In CCS6 (Code Composure Studio v6) make sure you have installed TI-RTOS for SimpleLink, this can be done by following the below steps:-

    1. Select View Menu
    2. Select CCS App Center
    3. Check the Select box for TI-RTOS for SimpleLink under Add-Ons

    You can then access the examples by following the below steps:-

    1. Select View Menu
    2. Select Resource Explorer (Examples)
    3. Expand the TI-RTOS for SimpleLink Wireless MCUs option
    4. Expand Wireless Connectivity MCU
    5. Expand CC3200
    6. You will now have access to many examples

    I am using TI-RTOS, there are many advantages over Free-RTOS, especially in regards to instrumentation and configuring. This all helps with debugging and setting up your project and also developing.

    Glenn.

  • Hi Mark,

    On CC3200, Many SDK examples uses TI-RTOS. Infact SDK examples are OS independent. 

    To port a FreeRTOS application to a TI RTOS one User need to do following

    1.  Install and Setup TI RTOS as explained in cc3200-sdk\docs\CC3200-Getting_Started_Guide.pdf
    2. Change below Project settings in the example
      1. Remove FreeRTOS macro such as USE_FREERTOS
      2. Change the Linker Path to remove FreeRTOS.a and include ti_rtos.a

    Regards,

    Kaushal

  • Hi, Kaushal

    I change cc3200 serial_wifi example from free_rtos to ti_rtos and get linker error as follows.
    Can you advice me?

    Thanks,
    Park

    -----------------------------------------------------------------------------------------------------------------------------------------


    **** Build of configuration Release for project serial_wifi ****

    "c:\\ti\\ccsv6\\utils\\bin\\gmake" -k all
    'Building target: serial_wifi.out'
    'Invoking: ARM Linker'
    "c:/ti/ccsv6/tools/compiler/arm_5.1.5/bin/armcl" -mv7M4 --code_state=16 --float_support=vfplib --abi=eabi -me -g --gcc --define=__CCS__ --define=USE_TIRTOS --define=ccs --define=SL_PLATFORM_MULTI_THREADED --define=PLATFORM_LP --define=cc3200 --display_error_number --diag_warning=225 --diag_wrap=off -z -m"serial_wifi.map" --heap_size=0x00008000 --stack_size=0x00001000 -i"c:/ti/ccsv6/tools/compiler/arm_5.1.5/lib" -i"c:/ti/ccsv6/tools/compiler/arm_5.1.5/include" --reread_libs --priority --warn_sections --display_error_number --diag_wrap=off --xml_link_info="serial_wifi_linkInfo.xml" --rom_model -o "serial_wifi.out" "./udma_if.obj" "./uart_if.obj" "./uart_config.obj" "./startup_ccs.obj" "./serial_wifi.obj" "./pinmux.obj" "./network_if.obj" "./main.obj" "./conversions.obj" "../cc3200v1p32.cmd" -l"libc.a" -l"C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a" -l"C:/ti/CC3200SDK/cc3200-sdk/example/serial_wifi/ccs\..\..\..\simplelink\ccs\OS\simplelink.a" -l"C:/ti/CC3200SDK/cc3200-sdk/example/serial_wifi/ccs\..\..\..\driverlib\ccs\Release\driverlib.a"
    <Linking>

    undefined first referenced
    symbol in file
    --------- ----------------
    ti_sysbios_BIOS_start__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_family_arm_m3_Hwi_Params__init__S C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_family_arm_m3_Hwi_create C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_family_arm_m3_Hwi_delete C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_family_arm_m3_Hwi_disableFxn__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_family_arm_m3_Hwi_getHandle__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_family_arm_m3_Hwi_restoreFxn__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_family_arm_m3_Hwi_setPriority__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Clock_tickPeriod__C C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Mailbox_create C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Mailbox_delete C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Mailbox_pend__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Mailbox_post__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Semaphore_Params__init__S C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Semaphore_create C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Semaphore_delete C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Semaphore_pend__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Semaphore_post__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Task_Params__init__S C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Task_create C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Task_delete C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Task_disable__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>

    ti_sysbios_knl_Task_restore__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    ti_sysbios_knl_Task_sleep__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>
    xdc_runtime_Error_init__E C:\ti\CC3200SDK\cc3200-sdk\oslib\ccs\ti_rtos\ti_rtos.a<osi_tirtos.obj>

    error #10234-D: unresolved symbols remain
    >> Compilation failure
    error #10010: errors encountered during linking; "serial_wifi.out" not built
    gmake: *** [serial_wifi.out] Error 1
    gmake: Target `all' not remade because of errors.

    **** Build Finished ****

  • Hi Park,

    Did you add ti_rtos_config as dependency in your serial_wifi project as shown in the image below. Also import ti_rtos_config in your CCS workspace.

    Hope it helps

    Regards,

    Kaushal

  • so can I port a free-rtos example to to rtos (by implementing sys bios tasks etc at runtime) and then add to rtos capabilities like instrumentation? how would this be done? modifying ti_rtos_config statically? in other words, how to build tirtos instrumentation into existing examples in the cc3200 SDK? [ I know there are examples of instrumentation in the tirtos for cc3200, but these do not use the SDK os abstraction layer. ] thanks in advance
  • as far as examples goes this should work.
    I attempted to do some real work (semaphores, hardware interrupt ,real task sync and wifi handling (simplelink)

    I detected :
    1) These basic RTOS items can not be added to the extremely limited ti-RTOS implementation in the SDK.
    a modest advice is givn to download ti-RTOS and do the port yourself.
    2) As was remarked by the thread initiator. There is hardly an example that is using ti-RTOS.
    even worse the development team found it necessary to create a propriety layer, deeply intertwined in
    the simple link (wifi main goal of the chip) implementation of the SDK. This indicates to me that TI-RTOS is going to be
    abandoned in the near future. (instead of defining a cc3200 device in ti-RTOS) a new OS OSI-RTOS was created.
    3) there is a recent (march 2015) version of simplelink-ti-rtos but it's not up to standards (cc3100) with the cc3200 chip and is very aged
    comparing the recent SDK's and usage of ROM/ram....
    typically , Hardware handling, power management GPIO interrupt handling , timer, Uart .... are of a completely different design then the SDK.
    (strengthening the indication to abandon ti-RTOS.) Hereby all the TI-claimed advantages of ti-RTOS are vanishing.....

    4) as far as support  is concerned  all ti-rtos questions  are redirected, forcing you  to lose  rom and sdk facilities .....or are shortcutted "use the examples,learn by example "  This indicates there is hardly any hope  for the  TI-RTOS  support assistance.

    Maybe there  is better  hope  going for FREE-RTOS  the whole way. Where hardware and software(scheduling) is better  separated. 

  • Hi Kaushal, 

    As you mentioned, most of simplelink SDK are OS independent. As far as i know, tcp_socket demo doesnt use any TI_RTOS and FreeRTOS. 

    What i'm trying to do is simply copy the TCP_Socket demo in to my own project.

    And change the main function of TCP_socket to a new function name, like below

    void main()  ====>  void WifiConfig()

    And i there is nothing in my own Main function yet, i though this could work as it does in SDK demo.But it didnt work. the problem is that originally it doesnt use any OS. But after i migrate the program to my project, in the linker library in automatically add  free_rtos.a., like below

    $PROJ_DIR$\..\oslib\ewarm\free_rtos\Exe\free_rtos.a

    and some errors occured: 

    Error[Li005]: no definition for "vApplicationStackOverflowHook" [referenced from tasks.o(free_rtos.a)] 
    Error[Li005]: no definition for "vAssertCalled" [referenced from tasks.o(free_rtos.a)] 
    Error[Li005]: no definition for "vApplicationMallocFailedHook" [referenced from heap_3.o(free_rtos.a)]

    My questions are:

    1. Is it possible to use tcp_socket without any OS in my own project. 

    2. Is there any setting need to be configured in advance to build NON OS environment

    3. What might be the cause of above errors 

    please do help me, i dont know why my question posts often are unable to pass the censor. 

    Thanks in advance

    Regards

    Jian

  • Does this problem finish finally?