在 IAR 中定义大数组变量,导致程序不能运行的解决办法

解决方法
在 IAR 中定义大数组变量,导致程序不能运行的解决办法总结
MSP430 大数组定义,不能正常运行的问题

定义太大的 RAM,那就有可能会遇到 RAM 中定义的变量/数组在超过一定范围的时候,MSP
程序不能正常运行的现象吧.一般初步判断,可以用 I/O 输出电平来确定程序进程.这样可以非常方
便的知道该问题是由于 WDT 造成的,(RAM 的初始化时间大于 WDT 默认的 32MS 时间,因此 MSP
复位)

下面来看下解决的办法:

A、 对数组用 __no_init 定义,上电编译器不产生特殊的附加函数去初始化 RAM
例:__no_init u8 GprsTXBuf[1000]; 注意关键字以两个下划线开头,尾部没有下划线,
中间一个下划线。

B 、修改 IAR 中 Cstartup.S43 文件中__program_start 子程序,增加一个关闭 WDT 的操作或者
设置 WDT 时间长度超过 32MS。(建议不到万不得已,不要改这个文件!)
文件地址:IAR Systems\Embedded Workbench 6.0 Evaluation\430\src\lib\430

C 、在 Project–Options–Linker–Config中选择 Override default programe,并将 Entry lib 设置
成 __program_start

上述是已知解决 RAM 初始化时间超 WDT 默认而复位的解决方法

一般编译器中 C 项自动开启,只要加上 A 项就可以解决问题,B 项在不清楚的情况下,不建
议做修改。

本文摘自网络。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注