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。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
一般来说这样的问题都是因为堆栈溢出造成的.建议更改下你的堆栈大小。
工程的options->General options->stack/heap 页面下更改.
定义太大的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
在程序进入main之前会有一个初始化过程,就是初始化全局变量之类的,WDT在此时大概是32ms的时间。你可以随便写一个程序看看main之前的汇编就知道了。