本例中在完成了CLA初始化,CLA_task的中断函数配置后,点击编译CCS报43个“#17003-D” warnings,如图4: 图4 #17003-D Warning
Description Resource Path Location Type: #17003-D</a> relocation to symbol "CLAscratch_end" overflowed; the 6-bit relocated address 0xee is too large to encode in the 16-bit unsigned field (type = 'R_ABS16_OC' (107), file = "../xxxxxxx", offset = 0x00000312, section = "Cla1Prog")
警告显示CLAscratch_end内存溢出,问题定位至CMD文件,检查CMD中与scratch相关的内存分配, 如图5。 图5 CMD文件scratchpad描述 发现仅有.scrathpad分配至RAMLS1,并未找到CLAscratch_end以及对CLA_SCRATCHPAD_SIZE的定义。 于是,打开.map文件判断是否分配了__cla_scratchpad_end/start,在.map文件中搜索scratchpad,如图6所示。 图6 .map文件中cla_scratchpad_end描述
如图6,在.map中仅仅找到__cla_scratchpad_end,可以判断工程使用了scratchpad,但是并没有__cla_scratchpad_start的内存分配。 至此找到了问题原因,解决方案就是需要在CMD文件中对scratchpad进行相关配置, 如图7所示。 参考配置如下: ①在CMD文件的头部添加以下代码,如图所示 - CLA_SCRATCHPAD_SIZE = 0x100;
- --undef_sym=__cla_scratchpad_end
- --undef_sym=__cla_scratchpad_start
图7 scratchpad配置
②在CMD文件的SECTIONS{}代码部分的末尾添加以下代码 - CLAscratch :
- { *.lib(CLAscratch)
- . += CLA_SCRATCHPAD_SIZE;
- *.lib(CLAscratch_end) } > RAMLS1,
- PAGE = 1
再次编译,#17003-D警告已经消失,编译通过,结果如图8所示。 图8 修改CMD后编译结果
此时,再次查看.map文件,发现__cla_scratchpad_end/start以及CLA_SCRATCHPAD_SIZE已经成功分配,如图9所示。 图9 修改CMD文件编译生成.map文件图
以上就是关于“#17003-D warning”的解决方案,希望通过这个例子,让广大工程师在CLA开发时能够注意到CMD对CLA内存正确配置的重要性,防止在实际开发时遇到问题,难以排查。
|