上一篇博客F280049C_FlashAPI-ecc功能实现——完成内存映射-优快云博客记录了为使用ccs提供的ecc options功能需要对cmd文件进行的操作。今天继续对TMS320C28X_Assembly_Tools_userguide中8.4.12关于配置linker中指令的内容进行学习和使用。首先给出TI提供的文档中的内容:
右键project,选择Properties——>C2000 Linker——>Advanced Options——>Linker Output,确保ecc打开(红框),然后点开绿色框内的图标添加修改的地址,以及希望翻转的位数。
点开绿色位置后会出现下面的界面:
开始我输入的是:
--ecc:data_error=0x86000, 0x01
编译后报错:error #10404-D: bit error should be two or three comma-separated integers with an optional base symbol: [symbol+]address,[page,]error_mask。我在TI论坛上也查到有人问过类似的问题,但没有解决方案。感谢gpt给了我一个思路,让我打开ccs的verbose_diagnostics来提供更加详细的问题信息。为了显示更加详细的项目信息,需要在properties选择C2000Linker——>Advanced Options——>Diagnostic,然后勾选最下面的一项Verbose diagnostics(--verbose_diagnostics)。
根据报错的内容发现显示--ecc:data_error的错误为:--ecc:data_error=--eccdata_error=0x086000,0,0x01,也就是说直接在里面键入两个数字(0x86000,0x001)就可以了。因为最开始写了指令data_error指令,导致程序读到两个data_error发生报错。并且要注意,两个参数之间使用逗号分隔后不需要再空格,否则也会出现这个报错。
修改正确后,又出现了error #10413: error specified at 0x86000 does not lie within an initialized section的问题。这里是说我们要修改的地址没有初始化。其实是因为我们再程序中没有使用这段地址,因此使用ecc option无法对这个地址进行操作。这是出现该报错时程序的内存分配状态:
0x86000对应的是FLASH_BANK0_SEC6的地址,但FLASH_BANK0_SEC6并没有被程序使用,因此会出现这个报错。
在cmd中修改test字段的存储区域:
.text : >>FLASH_BANK0_SEC1 | FLASH_BANK0_SEC2 | FLASH_BANK0_SEC4 | FLASH_BANK0_SEC6, PAGE = 0, ALIGN(4)
修改后,编译通过,可以看到SECTOR6被分配了内存:
以上就可以通过ecc option来对ecc进行检验了。这个上午就做了这些工作,后面具体的验证放到下一篇再说。
研究生快放假了!开心!
争取放假前把这块干完