Part Number:TMS320C6748
如题,我使用RTSC新建了一个section,在配置文件中配置如下:
Program.sectMap[“.env_reg”] = new Program.SectionSpec();
Program.sectMap[“.env_reg”].loadSegment = "DDR_INIT_1";
Program.sectMap[“.env_reg”].loadAlign = 4;
Program.sectMap[“.env_reg”].fill = 0;
编译可以通过,在生成的CMD文件中也有.env_reg: load > DDR_INIT_1 align = 0x4, fill = 0x0字样。
我期望,在.env_reg段中中,未使用的段空间填充为0,但是通过仿真器加载,未使用的段空间并没有被填充成0。
Nancy Wang:
xu yang 说:在.env_reg段中中,未使用的段空间填充为0,但是通过仿真器加载,未使用的段空间并没有被填充成0。
请问是如何查看的?
我需要测试看一下再给您回复。
,
xu yang:
通过仿真器,查看段所在地址的memory
,
Nancy Wang:
看一下map文件,.env_reg段属性中fill是否生效。另外.env_reg段在代码中是如何使用的?
我试了一下通过fill给未使用的stack赋值是生效的。
,
xu yang:
.env_reg段放置于DDR_INIT_1,从map文件来看,未填充。
在自动生成的链接脚本里,fill属性已经在了。
这个段我用来实现类似linux内核注册启动函数的功能,将函数指针放入该段,以0作为遍历的结尾。目前使用注册复位函数的方式,手动清0了。
var Reset = xdc.useModule("xdc.runtime.Reset");Reset.fxns.length = 1Reset.fxns[0] = "&_user_reset";
虽然问题解决,但是我还是好奇,为什么链接脚本中已经标注fill属性,但是实际并未生效?
,
Nancy Wang:
map文件中应该会生成单独的.env_reg并标明属性,搜索看看。
,
xu yang:
是这个吗?
,
Nancy Wang:
是的。
,
xu yang:
为什么链接脚本里有fill字段,到map文件里就没有了呢?
,
Nancy Wang:
我在bios下测试看了一下,map文件中也没有生成,不清楚这是否是未使用的段空间没有被填充成0的原因,建议您可以升级到英文论坛看一下是否能解决该问题。
e2e.ti.com/…/processors-forum