你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L0 int32_t在RAM中所占字节问题

[复制链接]
小耳朵1500922649 提问时间:2018-9-8 14:10 /
基于STM32L073的工程,申请了一个结构体:typedef struct
{

                uint16_t TUV_P_Threshold;                 //        0x2000095C
                uint16_t TUV_P_Delay;                       
                uint16_t TUV_PR_Threshold;
                uint16_t TUV_PR_Delay;               

                uint16_t DUV_P_Threshold;                //         0x20000964
                uint16_t DUV_P_Delay;                       
                uint16_t DUV_PR_Threshold;
                uint16_t DUV_PR_Delay;                //        0x2000096A

                int32_t DOC_P1_Threshold;                //          0x2000096C
                uint16_t DOC_P1_Delay;                //          0x20000970

                int32_t DOC_P2_Threshold;                //      0x20000972
                uint16_t DOC_P2_Delay;                //          0x20000978

                int32_t DOC_APR_Threshold;      //          0x2000097A
                uint16_t DOC_APR_Delay;                //      0x20000980

}
从实际内存分配上看int32_t DOC_P1_Threshold和int32_t DOC_P2_Threshold、DOC_APR_Threshold所占byte不一样,理论上int32_t 应该占4byte,但
DOC_P1_Threshold占了2byte,而DOC_P2_Threshold和DOC_APR_Threshold却占了6byte,如下图:
1111.png
收藏 评论6 发布时间:2018-9-8 14:10

举报

6个回答
七哥 回答时间:2018-9-10 12:27:30
int型需要32位对齐,也就是一条指令必须访问到。
定义时,同类型的放到一起,或者仍掉一部分。或者自己想办法凑一下,让以32位对齐。
傲游截图20180910122705.png



评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

MrJiu 回答时间:2018-9-8 14:31:12
字节对齐。。。百度一下就知道啥意思了。。。我这里可以稍微解释一丢丢。。。假如:
u8 a
u8 b
u32 c
这样组成的结构体,你觉得占多少ram?在4字节(大部分都是这个对齐,也有其他的)对齐的情况下是8个byte...因为a、b占用了两个byte后,剩下的2byte无法被c使用,只能从头开始。。。我这里呢只是列举了个大概,还有其他各种考虑,百度上面有具体解释的!!!

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

wenyangzeng 回答时间:2018-9-8 16:35:17
应该是字节对齐的问题,楼主应该把uint32_t的变量排在前面。不要与uint16_t的变量交叉排列。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

andey 回答时间:2018-9-10 09:15:34
提示: 作者被禁止或删除 内容自动屏蔽
小耳朵1500922649 回答时间:2018-9-10 19:04:19
MrJiu 发表于 2018-9-8 14:31
字节对齐。。。百度一下就知道啥意思了。。。我这里可以稍微解释一丢丢。。。假如:
u8 a
u8 b

明白了,多谢
小耳朵1500922649 回答时间:2018-9-10 19:04:48
toofree 发表于 2018-9-10 12:27
int型需要32位对齐,也就是一条指令必须访问到。
定义时,同类型的放到一起,或者仍掉一部分。或者自己想办 ...

字节对齐问题,明白了,多谢

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版