找回密码
 立即注册
查看: 430|回复: 1

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

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2024-09-25 16:13:06

7

主题

6

回帖

149

积分

注册会员

积分
149
发表于 2024-7-18 11:26:07 | 显示全部楼层 |阅读模式
如题:在使用结构体作为函数参数时,定义的结构体最大能定义多少个变量?是不是收到堆栈的限制?
使用的单片机型号为:STC32G12K128。发现在超过1K的变量就会引起通讯的故障。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-7-18 11:43:40 | 显示全部楼层
最大变量数量没有限制,但结构体大小有限制


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

截图202407181136216360.jpg

截图202407181138075972.jpg


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


DebugLab
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:41 , Processed in 0.248334 second(s), 54 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表