liming3267 发表于 2024-7-18 11:26:07

请教使用结构体变量作为参数时,结构体最大能定义多少变量?

如题:在使用结构体作为函数参数时,定义的结构体最大能定义多少个变量?是不是收到堆栈的限制?
使用的单片机型号为:STC32G12K128。发现在超过1K的变量就会引起通讯的故障。

DebugLab 发表于 2024-7-18 11:43:40

最大变量数量没有限制,但结构体大小有限制


使用Keil C251编译器,Memory Model推荐设置XSmall模式,默认定义变量在edata,单时钟存取访问速度快
edata建议保留1K给堆栈使用,空间不够时可将大数组、不常用变量加xdata关键字定义到xdata空间
STC32G12K128的edata最大为4K






数据成员对齐规则:结构(struct)或联合(union)的数据成员,第一个数据成员放在offset为0的地方,每个数据成员存储的起始位置要从该成员(每个成员本身)大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)
结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储
结构体的总大小:也就是sizeof的结果,必须是其内部最大成员的整数倍(结构体成员以最大成员为代表),不足的要补齐


页: [1]
查看完整版本: 请教使用结构体变量作为参数时,结构体最大能定义多少变量?