本帖最后由 白头翁 于 2019-7-15 17:54 编辑
我在使用Arduino1.8.4环境下,编译时提示“全程变量太多,动态没存超75%,可能出现不稳定”,便终止编译。
可是让我不解的是:我用的全程变量并不多,大部分都是在函数中定义的局部变量。
这是部分代码:
#include <arduino.h>
#include <avr/pgmspace.h>
#include <SPI.h>
#include "LCDdrive.h"
#include "MainFun.h"
#include "SignalFun.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
unsigned char ControlParameter[4];
unsigned char showData[5];
unsigned long ShowTime;
void setup() {
analogReference(INTERNAL) ;
Serial.begin(9600);
while(Serial.read()>= 0){}
SetKeyROW();
SET_Pin() ;
......
}
以上红字就是我定义的全程变量,其它变量都是在其它功能函数中定义的局部变量,在此省略了...
问题来了,通过摸索试验发现:
好像编译时系统将所有分配过的变量都统计为全局变量。
例:
第一次编译提示: 项目使用了 17034 字节,占用了 (55%) 程序存储空间。最大为 30720 字节。 全局变量使用了1503字节,(73%)的动态内存,余留545字节局部变量。最大为2048字节。 然后屏蔽掉2个子函数中的串口输出语句: Serial.println("cc1101 connect success"); Serial.println("cc1101 connect failure"); 再次编译提示: 项目使用了 16968 字节,占用了 (55%) 程序存储空间。最大为 30720 字节。 全局变量使用了1457字节,(71%)的动态内存,余留591字节局部变量。最大为2048字节。
比第一次编译省下46个全局变量。显然第一次编译时把Serial.println的输出字符都统计成了全局变量。 不是说局部变量在函数退出后,分配的内存就释放了吗,实在是搞不懂了。
在此求教:哪位明白的老师帮忙,说说产生的原因和解决思路。在此感谢!
声明:本人刚刚注册,这是第一帖。如有不当之处还请原谅!
|