1、编译器为IAR 5.20
2、MCU为430F2418
3、现象1,定义若干数组,1[1000],2[250],3[250],4[250],5[32][24],用IAR在线仿真,程序进入_data16_memzero程序循环,不能进入main()函数。LIST显示DATA使用为6632。
4、现象2,修改上述数组,1[100],2[100],3[100],4[100],5[12][24],用IAR仿真,程序正常运行。LIST显示DATA使用为6632。
Triton Zhang:
一般来说这样的问题都是因为堆栈溢出造成的.建议更改下你的堆栈大小。
工程的options->General options->stack/heap 页面下更改.
hector Wu:
回复 Triton Zhang:
将数组改小,程序可以运行,且运行时,没有提示堆栈溢出,所以不像是堆栈溢出的问题。试按上面的方法将stack/heap改为200/300,还是无果,增加到500/500还是无果。
期待更有效的方法!!!
hector Wu:
PS:
42 776 bytes of CODE memory (+ 71 998 range fill )
5 402 bytes of DATA memory (+ 95 absolute )
3 753 bytes of CONST memory (+ 1 range fill )
Errors: none Warnings: none
Peter_Zheng:
回复 hector Wu:
定义太大的RAM,那就有可能会遇到 RAM中定义的变量/数组在超过一定范围的时候,MSP程序不能正常运行的现象吧.一般初步判断,可以用I/O输出电平来确定程序进程.这样可以非常方便的知道该问题是由于WDT造成的,(RAM的初始化时间大于WDT默认的32MS时间,因此MSP复位)
下面来看下解决的办法:
1、 对数组用 __no init_定义,上电编译器不产生特殊的附加函数去初始化RAM
2 、在Project–Options–Linker–Config中选择 Override default programe,并将Entry lib 设置成 __program_start
hector Wu:
回复 Peter_Zheng:
谢楼上的,之前试过 _no init_ ,现在发现少了一横线. 明天试试.
Peter_Zheng:
回复 hector Wu:
不客气,请多多支持TI的MCU。
Young Hu:
回复 Peter_Zheng:
问题的原因就是WDT超时了?!
Peter_Zheng:
回复 Young Hu:
应该是初始化的时候WDT超时了。