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.
I recently converted an old Code Composer Project file to CCS 5 and when I go to build it, I get the following error.
error #16008-D: file ".../rts2812_ml.lib<exit.obj>" specifies ISA revision "C2700", which is not compatible with ISA revision "C2800" specified in a previous file or on the command line
The warning message that appears right before this error message (i.e. the previous line) is as follows:
warning #16002-D: build attribute vendor section TI missing in ".../rts2812_ml.lib<exit.obj>": compatibility cannot be determined
This is my first foray into embedded programming so any help here would be greatly appreciated.
To answer your questions:
We are now actively seeking a consultant with significant embedded programming, Code Composer Studio and TI 2812 chip experience in hopes that they can help us get over the current hurdle of simply being able to build our existing code and get it to run on our system. If anyone at TI or other readers of this forum know someone that has these qualifications please contact me.
Per the previous post, I am getting the build errors (shown below) which at one point I was able to eliminate by including rts2800_ml.lib in the project. I now know for sure that rts2800_ml.lib was not used in the last known good build (which we are still trying to replicate). The reason I know rts2800_ml.lib was not used in the last known good build is that I looked at the linker output .map file from that build, which I am attaching here 0804.pcmcFlash_map.txt and there are no references whatsoever to rts2800_ml.lib. Only rts2812_ml.lib (a custom version of the runtime library - not sure who created it). rts2812_ml.lib does not contain the symbols shown below. So based on the original linker output map, project file and linker input file (.lkf file), also attached below, I am still trying to figure out where these symbols come from. The only other place I have found them is in a file called "rts.src" in the folder ...\C2000\cgtools\lib (created by CCS). rts.src contains every one of these missing symbols.
-z -q -c -m"./Out/PCMC_RELEASE_NB/pcmcFlash.map" -o"./Out/PCMC_RELEASE_NB/pcmcFlash.out" -x -i"C:/ti2000/c2000/cgtools/lib" "C:\ti2000\myprojects\Current\ppcPrimary4.06\lib\rts2812_ml.lib" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\boot2812.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Adc.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_DefaultIsr.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Ev.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_GlobalVariableDefs.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Gpio.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Mcbsp.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_PieCtrl.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_PieVect.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Scia.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Scib.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Spi.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_SysCtrl.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Xintf.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_XIntrupt.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\flashstart.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_Buzzer.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_Contactor.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_DataDisplayAPI.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_DataDump.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_DPRAM.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_EEPROM.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_Faults.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_FLASH.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_Init.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_Main.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_paramTable.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_RTC.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_spiADC.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_UIB.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_UserInterface.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\cmd\PPMC.cmd"
undefined first referenced
symbol in file
--------- ----------------
FS$$TOU C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Adc.obj
FS$$MPY C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
UL$$MOD C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
FS$$ADD C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
FS$$TOUL C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
FS$$CMP C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
FS$$DIV C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
L$$TOFS C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Ev.obj
L$$DIV C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Scia.obj
L$$MOD C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Scia.obj
FS$$SUB C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_XIntrupt.obj
FS$$TOI C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
FS$$TOL C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
U$$DIV C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
U$$TOFS C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
U$$MOD C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
UL$$DIV C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
I$$TOFS C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
UL$$TOFS C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
FS$$NEG C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_DataDump.obj
>> error: symbol referencing errors - './Out/PCMC_RELEASE_NB/pcmcFlash.out'
not built
Build Complete,
1 Errors, 3 Warnings, 0 Remarks.
Please view the build output for errors and warnings for any custom steps.
Those symbols are all compiler helper functions. All of the symbols starting or ending "FS" are floating-point math routines, and the rest are integer division routines. The compiler needs these to be able to support math operations for which there is no hardware support.
Clearly, as you suggest, rts2812_ml.lib is a custom version of rts2800_ml.lib. If rts2812_ml.lib lacks these symbols, and rts2800_ml.lib was not used at all, then it must be the case that object files such as DSP28_Adc.obj were compiled in such a way that they did not have any uses of these symbols, which probably means they were compiled such that they did not use any floating-point arithmetic.
From pcmcFlash_5F00_map.txt, please take note of the following object files from rts2812_ml.lib:
003dd40b 0000004a rts2812_ml.lib : exit.obj (.text) 003dd455 0000008b : fadd.obj (.text) 003dd4e0 00000017 : fcmp.obj (.text) 003dd4f7 00000083 : fdiv.obj (.text) 003dd57a 00000024 : fftoi.obj (.text) 003dd59e 00000039 : fftol.obj (.text) 003dd5d7 0000001d : fftou.obj (.text) 003dd5f4 00000030 : fftoul.obj (.text) 003dd624 0000001a : fitof.obj (.text) 003dd63e 0000001a : fltof.obj (.text) 003dd658 0000005a : fmpy.obj (.text) 003dd6b2 00000005 : fneg.obj (.text) 003dd6b7 00000009 : fsub.obj (.text) 003dd6c0 00000013 : fultof.obj (.text) 003dd6d3 00000010 : futof.obj (.text)
In particular, fadd.obj is clearly where floating-point add should be defined.
In the present version of the C2000 compiler, the object file fs_add.obj in rts2800_ml.lib contains a definition of both FS$$ADD and FS$$SUB.
Ok. So are you thinking then that the object files (such as DSP28_Adc.obj) used for the last known good build were not created using the compiler settings specified in the project file I attached? Since you are thinking that the object files "were compiled in such a way that they did not have any uses of these symbols", clearly the settings I am using, which are from the original project file, are not working (i.e. producing these build errors). Would it make any sense to compare the .obj files from the last known good build to my build? And if so, what is the best way to do that? Basically, if there is a way to tell for sure that the object files were indeed compiled in such a way that they did not have any uses of these symbols, I love to know.
Actually, between the 3.x and 4.x series, it seems that the names of the compiler helper functions for floating-point math were changed, which means that a 3.x-compatible library will not be compatible with any compiler version 4.x or higher.
The old names of some of these functions:
F$$ADD F$$DIV I$$DIV I$$UDIV I$$DIVS L$$DIVU L$$DIVS
Please check that these symbols are in rts2812_ml.lib
I think the bottom line here is that there was a Great Helper Function Rename between 3.x and 4.x, and these changes need to be reflected in rts2812_ml.lib in order to be able to use C2000 compiler version 4.x or greater. Thus, the problem becomes "how do I build rts2812_ml.lib from source," which we haven't explored here.
Try adding a file which defines F$$ADD, etc. and routes them through FS$$ADD, etc, as follows:
.global F$$ADD, FS$$ADD F$$ADD: B FS$$ADD,UNC
This file would then be a facade which would let new object files (which call new helper function names) actually call old object files (using old helper function names). I'll try to find the complete mapping
Actually, you want it the other way around: you want to compile Adc.obj, etc with the new compiler. Those files will call the new helper function names, so you need to map the new names to the old names which exist in rts2812_ml.lib:
; The following functions no longer exist (they are handled with ; hardware instructions rather than a function call) ; L$$MPY L$$SL L$$SRS L$$SRU ; The following functions' names did not change ; I$$DIV I$$MOD .global FS$$ADD, F$$ADD .global FS$$CMP, F$$CMP .global FS$$DIV, F$$DIV .global FS$$MPY, F$$MPY .global FS$$NEG, F$$NEG .global FS$$SUB, F$$SUB .global FS$$TOI, F$$FTOI .global FS$$TOL, F$$FTOL .global FS$$TOU, F$$FTOU .global FS$$TOUL, F$$FTOUL .global I$$TOFS, F$$ITOF .global L$$TOFS, F$$LTOF .global U$$TOFS, F$$UTOF .global UL$$TOFS, F$$ULTOF .global L$$DIV, L$$DIVS .global L$$MOD, L$$MODS .global U$$DIV, I$$UDIV .global U$$MOD, I$$UMOD .global UL$$DIV, L$$DIVU .global UL$$MOD, L$$MODU FS$$ADD: B F$$ADD, UNC FS$$CMP: B F$$CMP, UNC FS$$DIV: B F$$DIV, UNC FS$$MPY: B F$$MPY, UNC FS$$NEG: B F$$NEG, UNC FS$$SUB: B F$$SUB, UNC FS$$TOI: B F$$FTOI, UNC FS$$TOL: B F$$FTOL, UNC FS$$TOU: B F$$FTOU, UNC FS$$TOUL: B F$$FTOUL, UNC I$$TOFS: B F$$ITOF, UNC L$$TOFS: B F$$LTOF, UNC U$$TOFS: B F$$UTOF, UNC UL$$TOFS: B F$$ULTOF, UNC L$$DIV: B L$$DIVS, UNC L$$MOD: B L$$MODS, UNC U$$DIV: B I$$UDIV, UNC U$$MOD: B I$$UMOD, UNC UL$$DIV: B L$$DIVU, UNC UL$$MOD: B L$$MODU, UNC
I ran ofd2000 on rts2812_ml.lib (output text file included below) and I checked for the 7 different symbols you referenced above. With the exception of "I$$DIVS", all others appear in the file. Relative to your comment about helper function name changes between 3.x and 4.x but since I am using CCS v2.12 (although I have also tried v3.3) I would think this would not be a problem unless I'm not fully understanding this.
Forgive me, I am still a little fuzzy on exactly what I need to do. So even though I am using CCS v2.12, you want me to recompile "DSP28_Adc.c" using a newer version of CCS? If so, which one? CCS v3, v4, v5? Also, the mapping you show in your post above, am I suppose to do something with that mapping? Put it in some file somewhere? Sorry for these questions but I am very much a novice on this. You're going to have to be very explicit.
It's not clear to me what you are currently attempting. Are you attempting to use only CCS2 + compiler version 3.x to be able to reproduce the old build? If so, you need to delete all of those object files and rebuild. By looking at the undefined symbols in the below quoted post, I know that those mentioned object files were compiled with compiler version 4.x or greater. If this is not what you are trying to do, please tell me explicitly what you are trying to do right now and I'll provide explicit advice.
David Burke1 said:Per the previous post, I am getting the build errors (shown below) which at one point I was able to eliminate by including rts2800_ml.lib in the project. I now know for sure that rts2800_ml.lib was not used in the last known good build (which we are still trying to replicate). The reason I know rts2800_ml.lib was not used in the last known good build is that I looked at the linker output .map file from that build, which I am attaching here 0804.pcmcFlash_map.txt and there are no references whatsoever to rts2800_ml.lib. Only rts2812_ml.lib (a custom version of the runtime library - not sure who created it). rts2812_ml.lib does not contain the symbols shown below. So based on the original linker output map, project file and linker input file (.lkf file), also attached below, I am still trying to figure out where these symbols come from. The only other place I have found them is in a file called "rts.src" in the folder ...\C2000\cgtools\lib (created by CCS). rts.src contains every one of these missing symbols.
7506.ppcPrimary_pjt_lkf.txtFullscreen12345678910111213141516171819-z -q -c -m"./Out/PCMC_RELEASE_NB/pcmcFlash.map" -o"./Out/PCMC_RELEASE_NB/pcmcFlash.out" -x -i"C:/ti2000/c2000/cgtools/lib""C:\ti2000\myprojects\Current\ppcPrimary4.06\lib\rts2812_ml.lib""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\boot2812.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Adc.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_DefaultIsr.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Ev.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_GlobalVariableDefs.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Gpio.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Mcbsp.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_PieCtrl.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_PieVect.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Scia.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Scib.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Spi.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_SysCtrl.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Xintf.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_XIntrupt.obj""C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\flashstart.obj"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-z -q -c -m"./Out/PCMC_RELEASE_NB/pcmcFlash.map" -o"./Out/PCMC_RELEASE_NB/pcmcFlash.out" -x -i"C:/ti2000/c2000/cgtools/lib" "C:\ti2000\myprojects\Current\ppcPrimary4.06\lib\rts2812_ml.lib" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\boot2812.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Adc.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_DefaultIsr.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Ev.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_GlobalVariableDefs.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Gpio.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Mcbsp.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_PieCtrl.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_PieVect.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Scia.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Scib.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Spi.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_SysCtrl.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Xintf.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_XIntrupt.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\flashstart.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_Buzzer.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_Contactor.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_DataDisplayAPI.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_DataDump.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_DPRAM.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_EEPROM.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_Faults.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_FLASH.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_Init.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_Main.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_paramTable.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_RTC.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_spiADC.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_UIB.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_UserInterface.obj" "C:\ti2000\myprojects\Current\ppcPrimary4.06\cmd\PPMC.cmd"
undefined first referenced
symbol in file
--------- ----------------
FS$$TOU C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Adc.obj
FS$$MPY C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
UL$$MOD C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
FS$$ADD C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
FS$$TOUL C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
FS$$CMP C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
FS$$DIV C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_CpuTimers.obj
L$$TOFS C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Ev.obj
L$$DIV C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Scia.obj
L$$MOD C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_Scia.obj
FS$$SUB C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\DSP28_XIntrupt.obj
FS$$TOI C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
FS$$TOL C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
U$$DIV C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
U$$TOFS C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
U$$MOD C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
UL$$DIV C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
I$$TOFS C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
UL$$TOFS C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_CommandTerminal.obj
FS$$NEG C:\ti2000\myprojects\Current\ppcPrimary4.06\Out\PCMC_RELEASE_NB\Obj\PPMC_DataDump.obj
>> error: symbol referencing errors - './Out/PCMC_RELEASE_NB/pcmcFlash.out'
not built
Build Complete,
1 Errors, 3 Warnings, 0 Remarks.
Please view the build output for errors and warnings for any custom steps.
Yes I am "attempting to use only CCS2 + compiler "that was installed with CCS v2.12" to be able to reproduce the old build". Keep in mind, as I have said numerous times, I have no idea how to tell what version of the compiler I am using and no one from TI has been able to tell me how to determine this. I can only tell you that the computer I am using only has CCS v2.12 and no other versions of CCS. So whatever version of the compiler was installed with CCS v2.12 is what is being used. It appears that the linker is version 3.03 based solely on the linker output map file.
Every time I build the project, I perform a clean and verify that all .obj files have been deleted prior to rebuilding. So all .obj files are getting rebuilt each time I try to build the project with CCS v2.12. If what you are saying is true (i.e. "by looking at the undefined symbols in the below quoted post, I know that those mentioned object files were compiled with compiler version 4.x or greater"), then CCS v2.12 must have installed and be using a 4.x version of the compiler, although it would be really nice not have to speculate on this and somehow be able to verify the compiler version.
Please let me know if I need to provide more detail.
I'm not familiar with CCS2; I am a compiler expert. Normally it should be sufficient to look at the linker version and assume the compiler version is the same, but I'm just now questioning that assumption because the list of undefined symbols doesn't make sense if that were the case.
Something doesn't add up, and so we must eliminate the impossible.
Run ofd2000 on DSP28_Adc.obj. You should see something like "Assembler Version: 6.2.0", but with your assembler version.
ofd2000 is not available in the compiler version 3.x series, which is probably what you have in CCS2; you will probably need to copy DSP28_Adc.obj to a machine with the newer compiler version on it in order to be able to run ofd2000.
I ran ofd2000 without any command line switches and sent the output to a text file which is attached. I've also attached the actual object file (renamed as .txt). I don't see any "Assembler Version" fields in the ofd2000 output. The only thing I see is "TI-COFF Version 2" as you can see in the text file.
I looked at that object file, but I can't determine exactly what version of the compiler created it. I'm still confident it must have been from 4.x or later
Please add the compiler option -k to keep the compiler's assembly code output (in newer compilers, --keep_asm does the same thing). Look at the top of this file; it should tell you explicitly what the compiler version was.
Ok. That compiler option was already checked. I looked at the dsp28_adc.asm file (also attached for reference) and it says "TMS320C2000 C/C++ Codegen PC Version 3.03".
I also went back and looked at the dsp28_adc.asm file from the last known good build from back in 2010 and it says: "TMS320C2000 ANSI C Codegen Version 3.01"
Here's the thing: based on what I know, that assembly file is impossible. Clearly something I think I know is wrong. I'm going to have to ponder this for a bit.
Here's where I was wrong: the Great Helper Function Rename actually occurred between 3.01 and 3.02.
In the "known good" installation, I'll bet all of the object files and also rts2812_ml.lib were compiled with version 3.01, and that rts2812_ml.lib provides the old names.
In the other cases, the object files being compiled with 3.02 or higher refer to the new names, and the rts2812_ml.lib (which was copied from the old installation) still provides the old names. The symptom would be that the new names would show up as undefined symbols.
These names would normally be resolved by rts2800_ml.lib, and in fact adding this library to the project will resolve those undefined symbol errors, but would either not pick up the customized routines in rts2812_ml.lib, or give duplicate symbol errors.
To test this theory, I have attached a hand-coded assembly file which provides the new names expected by the new object files, and maps them to the old names actually provided by rts2812_ml.lib. Drop this assembly file into the project on the machine with CCS 2.12 and compiler version 3.03 and see if the build is successful, and produces an output file which works properly.
As there have been no replies for a while, I assume that either the problem is resolved or has been set aside. I want to record my remaining thoughts on this issue in case it is not resolved.
Cloning the compiler-provided standard C (RTS) library is a risky venture. The library changes over time, and rules for applications which use the library are 1) the version of the RTS library and the version of the linker must be the same, and 2) the version of the linker must be at least as great as any input object file. Using a clone of the RTS library locks you into that version of the compiler, unless the clone is kept up-to-date as the linker version advances. It is likely that the library rts2812_ml.lib changes only a few functions in the library; most likely it replaces a few of the functions. With more recent tools, this is better done by making a separate library with only the new changes, and using the --reread_libs and --priority linker options.
It shouldn't be too hard to use objdiff from http://processors.wiki.ti.com/index.php/Code_Generation_Tools_XML_Processing_Scripts to find the differences between rts2821_ml.lib and the 3.0.1 version of rts2800_ml.lib, which will be the customizations. I would bet there will be only a few. From there, it shouldn't be too hard to reproduce those customizations in the source code for the latest library, and build a new custom library compatible with the new function names.
Sorry for the delay on my reply. The file you sent to me (0118_bridge.asm) that maps the old symbol names to the new ones worked like a charm. We finally have built the project, loaded on our system and it seems to run the same as the last known good build.
I greatly appreciate your inputs on the RTS library and will look into doing the process you recommended starting with using objdiff. At some point it would be nice to migrate the entire project forward to CCS v5. The RTS library migration would have to be part of that effort.
I think we can mark this thread as closed for now.