我有一些代码使用嵌套的Structs来存储设备参数,如下所示:
这是使用Ardunio Zero(Atmel SAMD21)
声明Storeage,每个网络最多有3个网络,有64个设备。
我想使用5个网络但是当我将网络增加到4时,代码将无法编译。
我得到区域RAM溢出堆栈/ RAM溢出4432字节。
据我所知,这比我有更多的公羊?我想看看是否有一个解决方案使用不同的方法来实现相同的东西,但让它适合?
struct device {
int stat;
bool changed;
char data[51];
char state[51];
char atime[14];
char btime[14];
};
struct outputs {
device fitting[64];
};
struct storage {
int deviceid =0;
int addstore =0;
bool set;
bool run_events = false;
char authkey[10];
outputs network[3];
} ;
storage data_store;
答案 0 :(得分:0)
嗯,通常的方法是:
const
(它应该将其移动到只读内存,如果失败,你通常可以通过添加编译器强制它 - 具体的魔法)。storage
可能不需要三个唯一outputs
,但可以将指针存储到唯一配置的共享“池”中。fitting
都被使用,那么该数组也可以重构成具有非恒定长度。由于我不太了解您的数据或应用程序,因此很难更具体。
答案 1 :(得分:0)
你的结构占据了太多的位置。就这样。假设chars,int和bools每个内部都是1个字节,那么device
结构需要132个字节。然后,您的outputs
结构需要8448个字节或8.25Kb。你的单位有32Kb的RAM ......