Part Number:TMS320C6678
TI专家好:
现在有如下情况,使用section将数组分配至DDR(0xc0000000,大小640*513字节)用随机数进行初始化,通过工具链将out文件转换后烧写至Flash中。加载out文件后,发现数组在初始化完成后数据全部都是0,在memory view里直接修改相应地址可以写入成功。
1)增加标志位确定程序经过数组初始化;
2)在线使用仿真器加载程序时,数组可以初始化成功;
3)同section内的其他数据可以初始化成功。
想咨询TI专家造成这种现象的原因是什么,CMD文件分配和数组赋值方法如下图。
Nancy Wang:
自启动状态下,仿真器跟一下看看。
Duan Siyu 说: 3)同section内的其他数据可以初始化成功。
其它数据有什么不同吗?
,
Duan Siyu:
感谢回复,其他的元素都为结构体,只有gEthTestBuffer为640*513大小的数组。
如果我直接将gEthTestBuffer指向0xc0200000位置,数据是可以初始化段成功的。
自启动状态下,仿真器跟一下看看。是指加载符号表吗?
,
Nancy Wang:
Duan Siyu 说:自启动状态下,仿真器跟一下看看。是指加载符号表吗?
是的。
,
Duan Siyu:
这个在程序初始的位置,挂上仿真后已经过去了。有什么方法能让它停住吗
,
Nancy Wang:
是打断点无法停住吗?
,
Duan Siyu:
测试程序烧写到NorFlash,上电挂上仿真初始化已经过了。。。
,
Nancy Wang:
在合适的地方定义一个volatile int flag = 1;while(flag){};,然后修改再修改flag的值试一下。
,
Duan Siyu:
好的,谢谢。我试一下。
另外,想问个问题。有没有_c_int00跳转到main()函数的代码?
,
Nancy Wang:
7.8 System Initialization
https://www.ti.com.cn/cn/lit/ug/spru187u/spru187u.pdf
ti-processor-sdk-rtos-c667x-evm-06.03.00.106-Windows\openmp_dsp_c667x_2_06_03_00\packages\ti\runtime\rts6000\boot.c
,
Duan Siyu:
好的,感谢回复。
,
Nancy Wang:
不客气,我会暂时将该帖关闭。
,
Duan Siyu:
您好,我在Auto Run and Launch Options 中 Auto Run Options 设置为_c_int00,然后loacte上述提供的文件,感觉定位的过程好像有些问题,无法打断点也无法单步运行,加载后定位的位置在#pragma DATA_SECTION (_stack, ".stack"),请问这是什么情况
,
Nancy Wang:
在线仿真的时候有问题吗?或者将完整截图出来看一下。
我试了一下没有出现这种情况。
,
Duan Siyu:
这是在线跳转到_c_int00位置时没loacte和locate上方链接的boot.c文件的图片。
定位的位置#pragma DATA_SECTION (_stack, ".stack");
感觉好像不太对
,
Nancy Wang:
不太清楚,应该会直接跳到_c_int00,我测试下来也是这样的。
,
Duan Siyu:
是这个boot.c文件对应不上吗,有啥解决办法吗?
另外,关于数组话初始化失败的方法,根据您的之前提供的方法,好像是关闭DDR中的Cache使能导致初始化失败(不是该数组地址的Cache),在Cache禁能后增加1s延迟后,数据初始化正常,请问Cache禁能需要增加延迟时间吗?
,
Nancy Wang:
直接将boot.c添加到工程里。
另外打断点到main,然后在如图点击_c_int00定位到这里试试。
Duan Siyu 说:在Cache禁能后增加1s延迟后,数据初始化正常,请问Cache禁能需要增加延迟时间吗?
应该是不需要的,cache部分配置在代码中的哪个地方
,
Duan Siyu:
好的,
1.添加boot.c后需要将工程重新编译吗,我编译了一下,会报错。
2.就在数组初始化前