Part Number:TMS320F28377D
问题:TMS320F28377D,双核,程序下载到RAM中可以正常运行,下载到Flash中也在线仿真可以运行,但是断电重启后,程序没有运行。在main函数的时钟初始化后增加点灯测试,发现断电重启后灯不亮,证明程序没有进到main函数。请问各位这个是什么问题,如果是数组超限在Ram中是否还能正常运行?
过程排查:1、使用以前旧版本程序下载到flash中,断电重启程序可以运行,因此已经排除了硬件问题。
2、在上述版本程序上一点点移植增加的代码,发现增加某一条语句后程序就会出现上述的问题,比如定义了一个数组后,或者任意一个 变 量后,程序都无法运行,但是编译都没有报错,内存也没显示超。
3、在上述版本程序上一点点移植增加的代码,发现减少一个空IO口的定义后程序也会出现上述的问题。
4、不刷CPU2,只刷CPU1到flash,断电后也无法运行。
5.CMD截图如下,麻烦帮看看,有没有问题,谢谢!!!
lan jing:
追踪汇编看到在进main函数前一直复位,有知道是什么原因的吗
,
Yale Li:
您好,您在几个芯片上遇到了这个问题?
,
fei wang:
在多片F28335上发现了类似问题,增加一些无用的全局变量后,程序就可以正常独立启动,否则要么停留在_c_int00,要么一直重启。
不知道官方 是否知道这个是什么原因,不太符合逻辑,难道是编译工具的问题?
,
Yale Li:
故障率是多少?
有没有看一下memory allocation?看一下内存占用情况。
方便的话把正常运行时的和出现异常时的map文件都发上来看一下。谢谢
,
fei wang:
Bootloader_error.mapBootloader_OK.map
两个程序的map文件,请你看一下。只增加了一些全局变量。
#if 1float temp1 = 0.0;float temp2 = 0.0;float temp3 = 0.0;float temp4 = 0.0;float temp5 = 0.0;float temp6 = 0.0;float temp7 = 0.0;float temp8 = 0.0;float temp9 = 0.0;float temp10 = 0.0;#endif
,
Yale Li:
请问故障率大概是多少?
,
fei wang:
10%左右吧。
后来发现把下面几个MemCopy放在 main函数最前面可以解决这个问题,但是的确不知道什么原因。尤其Flash28_API那个影响最大,但是我都是参考网上的例程,在MemCopy之前并没有调用这几个section里面的函数。
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);MemCopy(&Flash28_API_LoadStart, &Flash28_API_LoadEnd, &Flash28_API_RunStart); MemCopy(&econst_LoadStart, &econst_LoadEnd, &econst_RunStart);
,
Yale Li:
我向资深工程师咨询后回复您。
,
Yale Li:
我们的工程师认为您将程序迁移到Flash中时的Flash配置可能存在问题,请查看以下链接:
https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/878674/faq-flash—how-to-modify-an-application-from-ram-configuration-to-flash-configuration
https://e2echina.ti.com/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/201373/faq—ram-flash
https://e2echina.ti.com/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/190031/faq-flash-ram-flash