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.

Undefined SYS/BIOS symbol build errors

Other Parts Discussed in Thread: SYSBIOS

I am getting the following linking errors related to SYS/BIOS symbols:

 

 undefined                    first referenced                      
  symbol                          in file                           
 ---------                    ---------------- 

 

 

 SYS_printf                   file1.obj   
 TSK_ATTRS                    file2.obj      
 TSK_create                   file2.obj      
 ti_sysbios_BIOS_start__E     file3.obj
 ti_sysbios_knl_Task_sleep__E file4.obj

I have included the following in the project (in addition to the defaults):
Build settings >> C6000 compiler >> Include Options:
"C:\Program Files\Texas Instruments\bios_6_32_01_38\packages\ti\bios"
"C:\Program Files\Texas Instruments\bios_6_32_01_38\packages\ti\sysbios"
Build settings >> C6000 linker >> File Search Paths >> Include library file
ti.platform.evm6678l.ae66
Build settings >> C6000 linker >> File Search Paths >> Add dir to library search path
"C:\Program Files\Texas Instruments\bios_6_32_01_38\packages\ti\bios\lib\release"
"C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_12\packages\ti\platform\evmc6678l\platform_lib\lib\debug"
"C:\Program Files\Texas Instruments\bios_6_32_01_38\packages\ti\sysbios\lib\debug"

System configuration:
CCS 5.0.3.00028
mcsdk_2_00_01_12
Code Gen 7.2.4
bios_6_32_01_38
RTSC project
Target: evmc6678l
Host: Windows XP 32-bit
Attached is the screenshot of the CCS build properties.
Any idea what could be wrong? Am I missing something with the include paths or library search paths or build component settings?

 

  • Is this a project that moved from BIOS 5.x to SYSBIOS 6.x?  I ask because I see that some of the missing functions are legacy APIs.

    First, you shoudn't have to update your compiler/linker path's with bios or sysbios because this should be added to the path automatically given that you chosed a particular BIOS version for the build.  So my first recommendation is removed those additional paths that you added to the compiler/linker search paths.

    Judah

  • Thanks for the response.

    I got the same errors even if I remove those additional compiler and linker include/search paths (which is why I tried adding those paths).

    Yes, this project is being migrated from DSP/BIOS 5.x to SYS/BIOS 6.x. I presume these functions used are backward compatible and should work, correct? I'm referring to Appendix A of SPRAAS7E Migrating a DSP/BIOS 5 Application to SYS/BIOS 6 which contains list of unsupported APIs and these do not seem to appear there.

    My source files contain all the new SYS/BIOS 6.x header files followed by the old DSP/BIOs 5.x header files as suggested in section 4 of the SPRAAS7E document.

    Any other ideas what I should be looking for?

     

     

  • BRY,

    Yes, the functions are backwards compatible.

    You should only need SYSBIOS 6.x header files if you are planning on using SYSBIOS 6.x APIs, otherwise, you don't need them.

    In your source files, if you did not update the #include <> of the bios header files then you do need to add a path into your compiler settings.

    For example: The BIOS 5.x way is something like:

        #include <clk.h>

    The BIOS 6.x way is:

        #include <ti/bios/clk.h>

    If your #include looks like the BIOS 5.x way then you need to add to the compiler path.  See Section 3.3 of SPRAAS7E for more info.

    You should not need to update the linker path as this should be done for you.

    Judah

  •  

    Thanks for the suggestion. I added the compiler path, still does not work. I decided to go ahead and migrate to the SYS/BIOS 6.x APIs. I now get the following errors:
    
    
     undefined                             first referenced                      
      symbol                                   in file                           
     ---------                             ---------------- 
     ti_sysbios_BIOS_start__E              <file1.obj>
    >> Compilation failure
     ti_sysbios_knl_Task_Object__create__S <file2.obj>
    ti_sysbios_knl_Task_Params__init__S  <file2.obj>
     ti_sysbios_knl_Task_sleep__E          <file2.obj>      
    xdc_runtime_Error_init__E <file2.obj>
    xdc_runtime_System_printf__E <file3.obj>
    
    
    Previously when the required header file is not included, the warning 'function declared implicitly' was printed. Following are my header file includes:
       #include <xdc/std.h>
       #include <xdc/runtime/System.h>
       #include <xdc/runtime/Log.h>
       #include <xdc/runtime/Diags.h>
       #include <xdc/runtime/Error.h>
       #include <ti/sysbios/knl/Mailbox.h>
       #include <ti/sysbios/knl/Task.h>
       #include <ti/sysbios/BIOS.h>
       #include <ti/sysbios/knl/Swi.h>
       #include <xdc/cfg/global.h>
       #include <ti/sysbios/hal/Hwi.h>
       #include <ti/bios/include/std.h>
       #include <ti/bios/include/clk.h>
       #include <ti/bios/include/swi.h>
       #include <ti/bios/include/tsk.h>
       #include <ti/bios/include/sys.h>
       #include <ti/bios/include/log.h>
    
    
    
    

     

  • BRY,

    Is your *.cfg file still using the BIOS 5.x statements or are you now using BIOS 6.x in the .cfg file?

    Can you try adding this to your .cfg file and see if this error  "ti_sysbios_BIOS_start__E" goes away?

         xdc.useModule('ti.sysbios.BIOS');

    If it goes away it means that your .cfg file is not including the right modules.

    If you were coming from BIOS 5.x and you following the migrating doc, I wouldn't expect you to see these linking errors.

    Judah

  • Yes the problem goes away after adding that line. Thanks Judah!

    I could not migrate my tconf file using the xs command line tool (the tconf file was created for ). So the cfg file was created afresh and the platform used is the ti.platforms.evm6678.

    However, I am now having a run time problem. It looks like execution stops in the BIOS_start() specifically in the ti_sysbios_knl_Task_startup().

    Here is my code snippet:

       Error_init(&eb);

    /* Create 1 task with priority 15 */
    Task_Params_init(&taskParams);
    taskParams.stackSize = sizeof(MyApp_TaskStack);
    taskParams.priority = 14;

    tskHandle = Task_create((Task_FuncPtr)MyApp_MainTask, &taskParams, &eb);
    CSDASSERT(tskHandle != NULL);

    /* Start the BIOS */
    BIOS_start(); /** Code stops executing here **/

    The
    MyApp_MainTask does not get spawned and I am unable to read any DSP variables or core registers or memory via the emulator.
    Can someone help? Is there anything I need to look into in the cfg file?
  • I didn't get the part of your question that went off screen.

    A very useful tool for debuggin is ROV.  See Bios_Getting_Started_Guide.pdf section 1.7 Running a SYS/BIOS Project for more information.

    So you put a breakpoint in your MyApp_MainTask and you never get there?  Are there any other threads in your system or an ISR that is coming in?

    I would also check your stacks (Hwi and Task stacks) to make sure you are not blowing them.  ROV can give details on these.

    Judah