1. 问题描述:
DSP在仿真状态下出现: Memory map prevented reading 0xzzzzzzzz@Program
2. 问题原因:
在链接空间映射CMD文件f28003x_headers_nonBIOS.cmd中,
没有将需要观测的数据安排在 PAGE 1, 即Data Memory中。
在C2000WARE 4.0版本中的f28003x_headers_nonBIOS.cmd文件如下:
MEMORY
{
ACCESSPROTECTION : origin = 0x0005F500, length = 0x00000040
ADCA : origin = 0x00007400, length = 0x00000080
ADCB : origin = 0x00007480, length = 0x00000080
ADCC : origin = 0x00007500, length = 0x00000080
ADCARESULT : origin = 0x00000B00, length = 0x00000018
ADCBRESULT : origin = 0x00000B20, length = 0x00000018
ADCCRESULT : origin = 0x00000B40, length = 0x00000018
ANALOGSUBSYS : origin = 0x0005D700, length = 0x00000122
...
WD : origin = 0x00007000, length = 0x0000002C
XBAR : origin = 0x00007920, length = 0x00000020
XINT : origin = 0x00007070, length = 0x0000000C
}
SECTIONS
{
/*** PIE Vect Table and Boot ROM Variables Structures ***/
UNION run = PIEVECTTABLE
{
PieVectTableFile
GROUP
{
EmuKeyVar
EmuBModeVar
EmuBootPinsVar
FlashCallbackVar
FlashScalingVar
}
}
AccessProtectionRegsFile : > ACCESSPROTECTION, type=NOINIT
AdcaRegsFile : > ADCA, type=NOINIT
AdcbRegsFile : > ADCB, type=NOINIT
AdccRegsFile : > ADCC, type=NOINIT
AdcaResultRegsFile : > ADCARESULT, type=NOINIT
AdcbResultRegsFile : > ADCBRESULT, type=NOINIT
AdccResultRegsFile : > ADCCRESULT, type=NOINIT
AnalogSubsysRegsFile : > ANALOGSUBSYS, type=NOINIT
...
WdRegsFile : > WD, type=NOINIT
XbarRegsFile : > XBAR, type=NOINIT
XintRegsFile : > XINT, type=NOINIT
}
使用该文件就会导致仿真时出现:Memory map prevented reading 0xzzzzzzzz@Program
3. 问题解决:
引入PAGE1范围约束,改进的CMD文件如下:
MEMORY
{
PAGE 0: /* Program Memory */
PAGE 1: /* Data Memory */
ACCESSPROTECTION : origin = 0x0005F500, length = 0x00000040
ADCA : origin = 0x00007400, length = 0x00000080
ADCB : origin = 0x00007480, length = 0x00000080
ADCC : origin = 0x00007500, length = 0x00000080
ADCARESULT : origin = 0x00000B00, length = 0x00000018
ADCBRESULT : origin = 0x00000B20, length = 0x00000018
ADCCRESULT : origin = 0x00000B40, length = 0x00000018
ANALOGSUBSYS : origin = 0x0005D700, length = 0x00000122
...
WD : origin = 0x00007000, length = 0x0000002C
XBAR : origin = 0x00007920, length = 0x00000020
XINT : origin = 0x00007070, length = 0x0000000C
}
SECTIONS
{
/*** PIE Vect Table and Boot ROM Variables Structures ***/
UNION run = PIEVECTTABLE, PAGE = 1
{
PieVectTableFile
GROUP
{
EmuKeyVar
EmuBModeVar
EmuBootPinsVar
FlashCallbackVar
FlashScalingVar
}
}
AccessProtectionRegsFile : > ACCESSPROTECTION, PAGE = 1
AdcaRegsFile : > ADCA, PAGE = 1
AdcbRegsFile : > ADCB, PAGE = 1
AdccRegsFile : > ADCC, PAGE = 1
AdcaResultRegsFile : > ADCARESULT, PAGE = 1
AdcbResultRegsFile : > ADCBRESULT, PAGE = 1
AdccResultRegsFile : > ADCCRESULT, PAGE = 1
AnalogSubsysRegsFile : > ANALOGSUBSYS, PAGE = 1
...
WdRegsFile : > WD, PAGE = 1
XbarRegsFile : > XBAR, PAGE = 1
XintRegsFile : > XINT, PAGE = 1
}
4. 问题验证:
重新编译文件,并进行仿真,数据观测以及数据修改都可以了。
5. 问题总结:
在CMD文件里,一定要把需要观测和处理的数据安排在Data Page.
在C2000WARE 4.0版本中,这个应该是个BUG。
后续对比的C2000WARE 5.0版本中,发现已经如上升级处理。