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.

Error Link in ELF Format with BIOS6, CCSv5, OMAPL138

Other Parts Discussed in Thread: OMAP-L138, SYSBIOS

Hi,


I currently work with OMAP-L138, and I try to compile my project_test which it use 3 functions :

  • Void Cache_wbInvAll();
  • Void Cache_wbInv(Ptr blockPtr, SizeT byteCnt, Bits16 type, Bool wait);
  • Void Cache_inv(Ptr blockPtr, SizeT byteCnt, Bits16 type, Bool wait);

Here is my code :

/*
 * main.c
 */
#include <ti/sysbios/family/c64p/Cache.h>

int main(void)
{
	int toto = 1024;
	int *tab = &toto;

	Cache_invL1pAll();
	Cache_wbInv((void *)tab, sizeof (unsigned int), Cache_Type_ALL,TRUE);
	Cache_inv((void *)tab, sizeof (unsigned int), Cache_Type_ALL,TRUE);
	
	return 0;
}

For my Compiler include path, I set :

"C:\ti\ccsv5\tools\compiler\c6000_7.4.8\include"
"C:\ti\bios_6_40_01_15\packages"
"C:\ti\bios_6_40_01_15\packages\ti\bios\include"
"C:\ti\xdctools_3_25_03_72\packages"

For my Librairie I using :

"C:\ti\bios_6_40_01_15\packages\ti\sysbios\lib\sysbios\instrumented\sysbios.ae64P"
"libc.a"

Dor my libraire directory :

"${CG_TOOL_ROOT}/lib"
"${CG_TOOL_ROOT}/include"

I using the latest compiler c6000_7.4.8 and I wish have an ELF format at the end of compilation.

But I have this error who provide  Cache_wbInv() and Cache_Inv() :

Description    Resource    Path    Location    Type
unresolved symbol ti_sysbios_family_c64p_Cache_EMIFA_BASE__C, first referenced in C:\ti\bios_6_40_01_15\packages\ti\sysbios\lib\sysbios\instrumented\sysbios.ae64P<BIOS.obj>    test_project             C/C++ Problem
unresolved symbol ti_sysbios_family_c64p_Cache_EMIFA_CFG__C, first referenced in C:\ti\bios_6_40_01_15\packages\ti\sysbios\lib\sysbios\instrumented\sysbios.ae64P<BIOS.obj>    test_project             C/C++ Problem
unresolved symbol ti_sysbios_family_c64p_Cache_EMIFA_LENGTH__C, first referenced in C:\ti\bios_6_40_01_15\packages\ti\sysbios\lib\sysbios\instrumented\sysbios.ae64P<BIOS.obj>    test_project             C/C++ Problem
unresolved symbol ti_sysbios_family_c64p_Cache_EMIFB_BASE__C, first referenced in C:\ti\bios_6_40_01_15\packages\ti\sysbios\lib\sysbios\instrumented\sysbios.ae64P<BIOS.obj>    test_project             C/C++ Problem
unresolved symbol ti_sysbios_family_c64p_Cache_EMIFB_CFG__C, first referenced in C:\ti\bios_6_40_01_15\packages\ti\sysbios\lib\sysbios\instrumented\sysbios.ae64P<BIOS.obj>    test_project             C/C++ Problem
unresolved symbol ti_sysbios_family_c64p_Cache_EMIFB_LENGTH__C, first referenced in C:\ti\bios_6_40_01_15\packages\ti\sysbios\lib\sysbios\instrumented\sysbios.ae64P<BIOS.obj>    test_project             C/C++ Problem
unresolved symbol ti_sysbios_family_c64p_Cache_EMIFC_BASE__C, first referenced in C:\ti\bios_6_40_01_15\packages\ti\sysbios\lib\sysbios\instrumented\sysbios.ae64P<BIOS.obj>    test_project             C/C++ Problem

Where is my mistake ?

Regards,

Guillaume

  • Hi,

    I currently work with OMAP-L138, and I try to compile my project_test which it use 3 functions :

    Your project seems to be  SYSBIOS which is required proper sysbios build options settings.

    I have imported one sample"hello" SYSBIOS project from "TI project explorer" and copied your code into it and I got successful build.

    I suspect that the improper build & link options of project could be the reason for your build issue.

    Please try the same and let us know the results.

    PFA of screen shot of successful build with your code (#include <ti/sysbios/family/c64p/Cache.h>).

  • Dear

    Effectively, It work with a project example,

    I see the difference between my project and the example,

    The example include one more file (hello.cfg) but this imply that I should use RTSC.

    In my program I just want using the cache functionnality (in Cache.h, the 3 functions in my last message), and I don't want using the RTSC functionnality.

    I think it's possible because if the example works, it's means the hello.cfg called an other library than sysbios.ae64P. And that other librairy know the definition of my unresolved symbol (ti_sysbios_family_c64p_Cache_EMIFA_BASE__C for example).


    It is possible to know where is the library ?

     

    Regards and thanks for your last answer,

     

    Guillaume

     

  • Hi,

    In my program I just want using the cache functionnality (in Cache.h, the 3 functions in my last message), and I don't want using the RTSC functionnality.


    I understood your requirement but I'm not sure that whether the SYSBIOS code is possible without .cfg (RTSC)

    Please refer the following TI wikis.

    Mean while I will try to reproduce your project requirement and let me update on monday.

    http://processors.wiki.ti.com/index.php/How_is_SYS/BIOS_related_to_XDCtools_and_RTSC%3F

    http://processors.wiki.ti.com/index.php/SYS/BIOS_Getting_Started_Guide

  • Hi,

    I'm not able to build SYSBIOS app with out .cfg file.

    Do you have intend reason to use SYSBIOS project without .cfg ?

    Effectively, It work with a project example,

    I see the difference between my project and the example,

    The example include one more file (hello.cfg) but this imply that I should use RTSC.


    Then, It clears that you can't achieve successful build without .cfg.

  • Hi Titus,

    The reason is I previously realise my own OS for specificaly application,

    This OS has been implanted in ARM core and DSP core, and I just used the "cache.h" for inter-core communication (shared-data was in L3),

    I see the hello.cfg file generate an hello.c where there is a lot of definition. 

    I found the definition which I can used for just include "cache.h" and one library.

    /* EMIFA_CFG__C */
    __FAR__ const CT__ti_sysbios_family_c64p_Cache_EMIFA_CFG ti_sysbios_family_c64p_Cache_EMIFA_CFG__C = ((CT__ti_sysbios_family_c64p_Cache_EMIFA_CFG)((void*)0x68000000));
    /* EMIFA_BASE__C */
    __FAR__ const CT__ti_sysbios_family_c64p_Cache_EMIFA_BASE ti_sysbios_family_c64p_Cache_EMIFA_BASE__C = (xdc_UInt)0x40000000;
    /* EMIFA_LENGTH__C */
    __FAR__ const CT__ti_sysbios_family_c64p_Cache_EMIFA_LENGTH ti_sysbios_family_c64p_Cache_EMIFA_LENGTH__C = (xdc_UInt)0x28000000;
    /* EMIFB_CFG__C */
    __FAR__ const CT__ti_sysbios_family_c64p_Cache_EMIFB_CFG ti_sysbios_family_c64p_Cache_EMIFB_CFG__C = ((CT__ti_sysbios_family_c64p_Cache_EMIFB_CFG)((void*)0xb0000000));
    /* EMIFB_BASE__C */
    __FAR__ const CT__ti_sysbios_family_c64p_Cache_EMIFB_BASE ti_sysbios_family_c64p_Cache_EMIFB_BASE__C = (xdc_UInt)0xc0000000;
    /* EMIFB_LENGTH__C */
    __FAR__ const CT__ti_sysbios_family_c64p_Cache_EMIFB_LENGTH ti_sysbios_family_c64p_Cache_EMIFB_LENGTH__C = (xdc_UInt)0x20000000;
    /* EMIFC_CFG__C */
    __FAR__ const CT__ti_sysbios_family_c64p_Cache_EMIFC_CFG ti_sysbios_family_c64p_Cache_EMIFC_CFG__C = ((CT__ti_sysbios_family_c64p_Cache_EMIFC_CFG)0);
    /* EMIFC_BASE__C */
    __FAR__ const CT__ti_sysbios_family_c64p_Cache_EMIFC_BASE ti_sysbios_family_c64p_Cache_EMIFC_BASE__C = (xdc_UInt)0x0;
    /* EMIFC_LENGTH__C */
    __FAR__ const CT__ti_sysbios_family_c64p_Cache_EMIFC_LENGTH ti_sysbios_family_c64p_Cache_EMIFC_LENGTH__C = (xdc_UInt)0x0;
    
    /* Module_State__ */
    typedef struct ti_sysbios_family_c64p_Cache_Module_State__ {
        volatile xdc_UInt32* emifAddr;
    } ti_sysbios_family_c64p_Cache_Module_State__;
    
    /* Module__state__V */
    ti_sysbios_family_c64p_Cache_Module_State__ ti_sysbios_family_c64p_Cache_Module__state__V;

    So I just copy that in wy project and it work,

    Thank you very much for your help,

    Guillaume

  • Hi Guillaume,

    Thanks for your update.