单片机C 程序中定义的数组字节过大该怎么办

2024-12-30 20:42:44
推荐回答(3个)
回答1:

C51不允许对数组的大小作动态定义,即数组大小不依赖于程序运行。数组初始化的时候,大小必须已定义类型。这个在C++标准中有描述。const的变量不一定是已定义的,向你上面的const int m=n;需要看n时候在编译阶段是否是已定义的。数组下标最好不要用未知数据的变量。

回答2:

直接换个单片机 纠结什么呀 如果你时间充足 在考虑怎么优化程序

回答3:

变量的定义通常有可以定义在几个地方:
1、定义在普通的RAM中,这种方式是不用对变量进行额外说明的,就是普通的定义变量
2、定义在ROM中,不过通常这种变量通常以静态数据形式出现,如一张图片的数据,程序里通常不会修改这种变量中的值,只是读取值内容而已。
3、定义在扩展RAM中,但这要看你的单片机是否支持这样的扩展RAM,而且支持的大小是多少。
以STC12C5A32S2为例,常规RAM只有128个字节,但有1K的扩展RAM,32K的ROM,还有32K的EEPROM。通常在写比较大的程序时,那种需要修改的变量内容都尽可能的定义到扩展RAM中,即使这样因为一些基本的函数或变量交换,都还会浪费掉常规RAM的使用率。

定义在常规RAM变量的格式是:
数据类型或结构类型名 变量名;
如:char a;

定义在扩展RAM变量的格式是:
xdata 数据类型或结构类型名 变量名;

如:xdata char a;

定义在ROM变量的格式是:

code 数据类型或结构类型名 变量名;

如:code char a;

合理的应用常规RAM、扩展RAM和ROM是程序的关键,如果你觉得你的的程序已经算合理的安排了这些RAM和ROM之类的分配,任然不能满足你的程序需求,你就该考虑更换单片机机型或考虑用其他的东西来完成你的这种需求,如用ARM、Mips等,总之先确保软件的理念正常,然后检查实施过程无误,再考虑更换硬件方案。