TI中文支持网
TI专业的中文技术问题搜集分享网站

定义大数组程序无法运行

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超时了。

赞(0)
未经允许不得转载:TI中文支持网 » 定义大数组程序无法运行
分享到: 更多 (0)