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.

Problems Running LLD Async Example

Hello,

I'm trying to run the LLD Async example for the C6455 listed here: http://processors.wiki.ti.com/index.php/Programming_the_EDMA3_using_the_Low-Level_Driver_%28LLD%29

This is a simple example of an asynchronous memory transfer. I have made no changes to the example code.

I get the following warning when I build the project and have no idea how to resolve it:
#10188-D symbol "CLK_F_gethtime" from file "E:/ti/bios_5_41_13_42/packages/ti/bios/lib/biosTCI6482.a64P<clk_gethtime.o6 4P>" being redefined  

If I ignore the warning and run the project, the memory transfer starts but fails to complete (execution never returns from function edma_wait).

I am running CCS 5.2.0.00069, and am using DSP/BIOS 5.41.13.42, and LLD 01.11.03.01.

Any advice on how to resolve the warning and get this example to work?

Thanks,

Bryan Brudevold

  • Bryan,

    There must be two places that define this symbol. That could mean that you are including two different BIOS libraries or that there is a file that incorrectly defines this symbol.

    You may be able to look in the map file to find out where else the symbol is being defined. Find an address, then look for which module that address is linked to.

    Please let me know what you find.

    Regards,
    RandyP

  • Hi Randy,

    I did look at my .map file and found the the symbol CLK_F_gethtime is indeed defined twice, and two other symbols are also defined twice at the same address.

    00829540   CLK_F_gethtime

    00829540   CLK_TIMEFXN

    00829540   _CLK_gethtime

    00829540   CLK_F_gethtime

    00829540   CLK_TIMEFXN

    00829540   _CLK_gethtime

    When I look for that address in the section allocation map, I find this:

    00829540    00000020     biosTCI6482.a64P : clk_gethtime.o64P (.bios)

    I do find it curious the project is loading the library biosTCI6482.a64P, since that is not my target device (my target is the C6455). I can see there are no BIOS libraries included in the linker properties, just a library search path pointing to "E:/ti/bios_5_41_13_42/packages/ti/bios/lib". I am not sure why Code Composer is deciding to load a library for the TCI6482. Perhaps I need to specify the correct BIOS libraries to load?

    Thanks,

    Bryan

  • Bryan,

    Symbols are listed twice in the .map file: in alphabetical order and in numerical order. Are you just pulling out both listings.

    It is bad and confusing that we (TI) do not include a biosC6455.a64P library, but instead the biosTCI6482.a64P library is used for the C6455. This library is compatible for any calls that you will be making and it will not cause any problems other than being a source of confusion like this. This is the correct BIOS library to use.

    And it is the right place to be getting CLK_F_gethtime from.

    This means there is something else that is assigning a value to CLK_F_gethtime,

    Something I would try to find this is to rename this bios file, such as putting an "x" in front of the filename. Then try running the build again. You will have lots of errors, but this time there should be unresolved references for symbols like CLK_F_gethtime. But if something else is defining it, it might not show up. Look for that symbol in the .map file again and see where it might be coming from.

    Then, I would do a search of all of your source code for this symbol to see if it shows up.

    After these, if you have not been able to track down the cause, we may want to move this to the BIOS forum since it is a BIOS function that is being doubly-defined. But I think we can track it down here.

    Regards,
    RandyP

  • Randy,

    My fault--I had double-counted the symbol since I didn't know it was supposed to be listed twice. It just appears once in each list.

    I tried building after renaming the biosTCI6482.a64P library file. Then the .map file shows this:

     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .vers      0    00000000    00000040     COPY SECTION
                      00000000    00000040     lld_6455cfg.obj (.vers)

    address      name
    --------           ----

    00000000   CLK_F_gethtime

    I searched my source code for the symbol CLK_F_gethtime and found it in the lld_6455cfg.cmd file:

    CLK_F_gethtime = _CLK_gethtime;

    But then I noticed my project actually had two files called lld_6455cfg.cmd. One came with the example project I downloaded and is in the top-level project directory. The other is auto-generated at compile time and shows up in the Debug folder. The auto-generated file did not have the symbol CLK_F_gethtime. So I just removed the other lld_6455cfg.cmd file, and then miraculously the project builds with no warnings and appears to run correctly.

    Any idea why this happened? Could it be a compatibility issue, since this was a legacy project imported to CCS5.2?

    Thanks,

    Bryan



  • Bryan,

    From my side, remote debug is like playing darts blindfolded. But thanks to your good catch, I am glad you have the problem solved.

    Definitely this is an import issue with moving from a legacy project. The tools do a pretty good job, but sometimes they have a tough time figuring out what belongs and what does not. The file that gets generated listing import issues can be helpful, but it may  not have identified this as a potential problem.

    But you did it.

    Regards,
    RandyP

  • Randy,

    Thanks for your help! You got me going in the right direction.

    Bryan