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 188.8.131.52, and LLD 01.11.03.01.
Any advice on how to resolve the warning and get this example to work?
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.
Search for answers, Ask a question, click Verify when complete, Help others, Learn more.
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.
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?
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.
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-------- ----
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?
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.
Thanks for your help! You got me going in the right direction.
All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with respect to these materials. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.
TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs andembedded processors, along with software, tools and the industry’s largest sales/support staff.