I am having problems linking a project that was converted from CCS v3.3 to CCS v4.2
Silicon is TMS320F2812
CCS v3.3 config ...
- Code Generation Tools 4.1.4
- BIOS 5.20.04
CCS V4.2 config ...
- Code Generation Tools 5.2.10
- BIOS 5.41.10.36
The project includes a tcf file that is apparently processed behind the scenes to a cfg.cmd file
This cfg.cmd file appears to be used by the linker in addition to whichever Linker Command File is specified in the Build Properties CCS Build section.
Selecting any of the stock Linker Command Files results in memory conflicts when attempting to link.
Selecting no Linker Command file produces the fewest link errors, but apparently results in some default linker configuration that produces the following error messages...
warning #10096-D: specified address lies outside memory map
error #10264: DEFAULT memory range overlaps existing memory range H0SARAM
error #10264: DEFAULT memory range overlaps existing memory range FLASHAPI
error #10264: DEFAULT memory range overlaps existing memory range BOOTROM
error #10264: DEFAULT memory range overlaps existing memory range VIRTUAL
Any help getting past this problem would be greatly appreciated.
The contents of my tcf file are below ...
utils.loadPlatform("ti.platforms.ezdsp2812");
var codeSegment = "SRAM";
var biosSegment = "H0SARAM";
var runFromFlash = environment["runFromFlash"] == "1";
if ( runFromFlash )
{
codeSegment = "FLASH_CODE";
biosSegment = "FLASH_CODE";
}
var bootFromFlash = environment["bootFromFlash"] == "1";
if ( bootFromFlash )
{
codeSegment = "FLASH_BOOT";
biosSegment = "FLASH_BOOT";
}
var configuration = environment["configuration"];
/* The following DSP/BIOS Features are enabled. */
bios.enableMemoryHeaps(prog);
bios.enableTskManager(prog);
bios.MEM.instance("LSARAM").createHeap = 1;
bios.MEM.instance("LSARAM").enableHeapLabel = 0;
bios.MEM.instance("LSARAM").heapSize = 0x1e00;
bios.MEM.instance("SRAM").createHeap = 1;
bios.MEM.instance("SRAM").len = 0x80000;
bios.MEM.instance("SRAM").heapSize = 0x60000;
bios.MEM.instance("MSARAM").createHeap = 1;
bios.MEM.instance("MSARAM").heapSize = 0x0500;
bios.MEM.instance("H0SARAM").len = 0x1a80;
bios.MEM.instance("OTP").space = "data";
bios.MEM.create("FLASHAPI");
bios.MEM.instance("FLASHAPI").comment = "On-Chip RAM Memory for Flash API";
bios.MEM.instance("FLASHAPI").base = 0x3f9a80;
bios.MEM.instance("FLASHAPI").len = 0x0580;
bios.MEM.instance("FLASHAPI").createHeap = 0;
bios.MEM.instance("FLASHAPI").space = "code";
bios.MEM.instance("FLASH").destroy();
bios.MEM.create("FLASH_SETTINGS");
bios.MEM.instance("FLASH_SETTINGS").comment = "8K Flash memory for settings";
bios.MEM.instance("FLASH_SETTINGS").base = 0x3d8000;
bios.MEM.instance("FLASH_SETTINGS").len = 0x2000;
bios.MEM.instance("FLASH_SETTINGS").createHeap = 0;
bios.MEM.create("FLASH_CODE");
bios.MEM.instance("FLASH_CODE").comment = "104K Flash for code";
bios.MEM.instance("FLASH_CODE").base = 0x3da000;
bios.MEM.instance("FLASH_CODE").len = 0x16000;
bios.MEM.instance("FLASH_CODE").createHeap = 0;
bios.MEM.create("FLASH_BOOT");
bios.MEM.instance("FLASH_BOOT").comment = "16K Flash for bootloader";
bios.MEM.instance("FLASH_BOOT").base = 0x3f0000;
bios.MEM.instance("FLASH_BOOT").len = 0x8000;
bios.MEM.instance("FLASH_BOOT").createHeap = 0;
bios.TSK.STACKSEG = prog.get("LSARAM");
bios.MEM.STACKSIZE = 0x0200;
bios.MEM.BIOSOBJSEG = prog.get("SRAM");
bios.MEM.MALLOCSEG = prog.get("SRAM");
bios.MEM.ARGSSEG = prog.get("LSARAM");
bios.MEM.STACKSEG = prog.get("MSARAM");
bios.MEM.GBLINITSEG = prog.get(codeSegment);
bios.MEM.TRCDATASEG = prog.get("H0SARAM");
bios.MEM.SYSDATASEG = prog.get("LSARAM");
bios.MEM.OBJSEG = prog.get("SRAM");
bios.MEM.BIOSSEG = prog.get(biosSegment);
bios.MEM.SYSINITSEG = prog.get(codeSegment);
bios.MEM.HWISEG = prog.get(codeSegment);
bios.MEM.HWIVECSEG = prog.get("PIEVECT");
bios.MEM.RTDXTEXTSEG = prog.get(codeSegment);
bios.MEM.TEXTSEG = prog.get(codeSegment);
bios.MEM.SWITCHSEG = prog.get(codeSegment);
bios.MEM.BSSSEG = prog.get("SRAM");
bios.MEM.EBSSSEG = prog.get("SRAM");
bios.MEM.CINITSEG = prog.get(codeSegment);
bios.MEM.PINITSEG = prog.get(codeSegment);
bios.MEM.ECONSTSEG = prog.get(codeSegment);
bios.MEM.CONSTSEG = prog.get(codeSegment);
bios.MEM.DATASEG = prog.get(codeSegment);
bios.MEM.CIOSEG = prog.get("SRAM");
bios.MEM.ENABLELOADADDR = 1;
bios.MEM.LOADBIOSSEG = prog.get(biosSegment);
bios.MEM.LOADSYSINITSEG = prog.get(codeSegment);
bios.MEM.LOADGBLINITSEG = prog.get(codeSegment);
bios.MEM.LOADTRCDATASEG = prog.get(codeSegment);
bios.MEM.LOADTEXTSEG = prog.get(codeSegment);
bios.MEM.LOADSWITCHSEG = prog.get(codeSegment);
bios.MEM.LOADCINITSEG = prog.get(codeSegment);
bios.MEM.LOADPINITSEG = prog.get(codeSegment);
bios.MEM.LOADECONSTSEG = prog.get(codeSegment);
bios.MEM.LOADCONSTSEG = prog.get(codeSegment);
bios.MEM.LOADDATASEG = prog.get(codeSegment);
bios.MEM.LOADHWIVECSEG = prog.get(codeSegment);
bios.MEM.LOADRTDXTEXTSEG = prog.get(codeSegment);
bios.MEM.LOADHWISEG = prog.get(codeSegment);
bios.MBX.OBJMEMSEG = prog.get("SRAM");
bios.SYS.TRACESEG = prog.get("SRAM");
bios.SYS.TRACESIZE = 256;
bios.LOG.OBJMEMSEG = prog.get("SRAM");
bios.LOG.instance("LOG_system").bufSeg = prog.get("SRAM");
bios.BUF.OBJMEMSEG = prog.get("SRAM");
bios.STS.OBJMEMSEG = prog.get("SRAM");
bios.IDL.OBJMEMSEG = prog.get("SRAM");
bios.QUE.OBJMEMSEG = prog.get("SRAM");
bios.DIO.OBJMEMSEG = prog.get("SRAM");
bios.DHL.OBJMEMSEG = prog.get("SRAM");
bios.RTDX.RTDXDATASEG = prog.get("SRAM");
bios.HST.OBJMEMSEG = prog.get("SRAM");
bios.HST.instance("RTA_fromHost").bufSeg = prog.get("SRAM");
bios.HST.instance("RTA_toHost").bufSeg = prog.get("SRAM");
bios.PIP.OBJMEMSEG = prog.get("SRAM");
bios.SIO.OBJMEMSEG = prog.get("SRAM");
bios.TSK.STACKSIZE = 256;
bios.TSK.instance("TSK_idle").stackSize = 256;
bios.GBL.ENABLEINST = 1;
bios.GBL.CLKIN = 30000;
bios.TSK.PRIORITY = 8;
bios.GBL.ENABLEINST = 0;
bios.GBL.ENABLEALLTRC = 0;
bios.GBL.CALLUSERINITFXN = 1;
bios.GBL.USERINITFXN = prog.extern("BeforeMain");
// !GRAPHICAL_CONFIG_TOOL_SCRIPT_INSERT_POINT!
if ( !bootFromFlash )
{
bios.TSK.CALLSWITCHFXN = 1;
bios.TSK.SWITCHFXN = prog.extern("OnSwitch__6ThreadSFPvT1");
}
prog.gen();
// This section changes the SECTION definition for .hwi_disp_sec.
var cmdFileName = environment["config.programName"];
if ( cmdFileName == null )
cmdFileName = "UAC";
cmdFileName += "cfg.cmd";
var line;
var fileReader = new java.io.FileReader( cmdFileName );
var lineReader = new java.io.LineNumberReader( fileReader );
var output = "";
do
{
line = lineReader.readLine();
if ( line != null )
{
if ( line.indexOf( ".hwi_disp_sec:" ) >= 0 )
output += " .hwi_disp_sec: {} > H0SARAM PAGE 0\r\n";
else if ( runFromFlash && ( line.indexOf( "FLASH_CODE:" ) >= 0 ) )
output += line + ", fill=0xffff\r\n"; // fill FLASH_CODE with 0xffff
else if ( bootFromFlash && ( line.indexOf( "FLASH_BOOT:" ) >= 0 ) )
output += line + ", fill=0xffff\r\n"; // fill FLASH_BOOT with 0xffff
else
output += line + "\r\n";
}
} while( line != null );
lineReader.close();
fileReader.close();
// This section adds some additional sections to the cmd file.
var loadCoffAddress = 0x3f4000;
var flashVectorAddress = 0x3f3ffe;
output += "SECTIONS\r\n";
output += "{\r\n";
output += " .template_CLS: {} > SRAM PAGE 1\r\n";
output += " InternalRamCode:\r\n";
output += " {\r\n";
output += " } LOAD = " + codeSegment + " PAGE 1,\r\n";
output += " RUN = H0SARAM PAGE 0,\r\n";
output += " LOAD_START( _InternalRamCode_LoadStart ),\r\n";
output += " LOAD_END( _InternalRamCode_LoadEnd ),\r\n";
output += " RUN_START( _InternalRamCode_RunStart )\r\n";
output += " Flash28_API:\r\n";
output += " {\r\n";
output += " -lc:\\svn\\UAC\\Firmware\\Platform\\TI\\Flash2812_API_V210.lib(.ebss)\r\n";
output += " -lc:\\svn\\UAC\\Firmware\\Platform\\TI\\Flash2812_API_V210.lib(.econst)\r\n";
output += " -lc:\\svn\\UAC\\Firmware\\Platform\\TI\\Flash2812_API_V210.lib(.text)\r\n";
output += " } LOAD = " + codeSegment + " PAGE 1,\r\n";
output += " RUN = FLASHAPI PAGE 0,\r\n";
output += " LOAD_START( _Flash28_API_LoadStart ),\r\n";
output += " LOAD_END( _Flash28_API_LoadEnd ),\r\n";
output += " RUN_START( _Flash28_API_RunStart )\r\n";
output += " FlashData: {} > FLASH_SETTINGS PAGE 1, type = NOLOAD\r\n";
output += " RomData: {} > OTP PAGE 1, type = NOLOAD\r\n";
output += " .bootStack: LOAD = 0x700 PAGE 1, type = NOLOAD\r\n";
if ( bootFromFlash )
{
output += " .bootVector: LOAD = 0x3f7ff6 PAGE 1\r\n";
output += " .coffLoader:\r\n";
output += " {\r\n";
output += " C:\\SVN\\UAC\\Firmware\\Bootloader\\Debug\\CoffLoader.obj(.coffLoader)\r\n";
output += " C:\\SVN\\UAC\\Firmware\\Bootloader\\Debug\\CoffLoader.obj(.text)\r\n";
output += " C:\\SVN\\UAC\\Firmware\\Bootloader\\Debug\\CoffLoader.obj(.econst)\r\n";
output += " C:\\SVN\\UAC\\Firmware\\Bootloader\\Debug\\C28Flash.obj(.text)\r\n";
output += " C:\\SVN\\UAC\\Firmware\\Bootloader\\Debug\\C28Flash.obj(.econst)\r\n";
output += " } LOAD = " + utils.toHex( loadCoffAddress ) + " PAGE 1,\r\n";
output += " LOAD_START(_LoadCoff)\r\n";
}
else
{
if ( runFromFlash )
output += " .flashVector: LOAD = " + utils.toHex( flashVectorAddress ) + " PAGE 1\r\n";
else
output += " .flashVector:{} > " + codeSegment + " PAGE 1\r\n";
}
output += " .adjust: {} > " + codeSegment + " PAGE 1\r\n";
output += "}\r\n";
output += "\r\n";
output += "_runFromFlash = " + ( runFromFlash ? 1 : 0 ) + ";\r\n";
if ( bootFromFlash )
{
output += "_FlashVector = " + utils.toHex( flashVectorAddress ) + ";\r\n";
output += "_startOfFlashCode = " + utils.toHex( bios.MEM.instance("FLASH_CODE").base ) + ";\r\n";
output += "_endOfFlashCode = " + utils.toHex( bios.MEM.instance("FLASH_CODE").base + bios.MEM.instance("FLASH_CODE").len ) + ";\r\n";
}
else
{
output += "_LoadCoff = " + utils.toHex( loadCoffAddress ) + ";\r\n";
output += "_loaderVersion = " + utils.toHex( loadCoffAddress + 2 ) + ";\r\n";
}
// This section writes the modified cmd file.
var fileWriter = new java.io.FileWriter( cmdFileName );
fileWriter.write( output );
fileWriter.flush();
fileWriter.close();
