打印
[应用相关]

keil5 结构体对齐模式

[复制链接]
824|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvben5d|  楼主 | 2022-9-28 11:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lvben5d 于 2022-9-28 11:19 编辑

keil5 for arm ,对于32位机 比如AT32   结构体编译的时候是默认4字节对齐,且是小端模式~如果你自己有耐心 排好位置,则巧合到跟1字节对齐一样数值。如下图:   

当需要保存一页数据的时候 传递SystermInfo 结构体首地址进去,
EEPROM_EraseAndWriteOnePage(FACTORY_FLASH_ADDRESS, (u32*)&SysInfo, NEED_SAVE_WORDS);

但如果当中有个u32 或 float类型的变量时候
   Dev_type 和 C之间 会占2个空位,作为  xx xx Dev_type Factory_recovery 补齐4字节!
因为下面函数是4字节写入  所以浪费了2字节内存空间和FLASH空间!
最方便是        就不用担心混入u32 float后 浪费内存和flash的问题了。

使用特权

评论回复
沙发
muyichuan2012| | 2022-9-28 12:47 | 只看该作者
感谢分享使用技巧

使用特权

评论回复
板凳
dalarang| | 2022-9-28 15:02 | 只看该作者
我印象中有的CPU对32位数据的内存地址有要求,好像是要能被4还是2整除来着,所以我宁可手动排列结构体内不同数据的顺序,也不用pack(1)

使用特权

评论回复
地板
muyichuan2012| | 2022-9-28 17:35 | 只看该作者
很多场合,数组需要这样对齐方式。

使用特权

评论回复
5
sjnh| | 2022-9-28 17:53 | 只看该作者
这种对齐可是以牺牲速度作为代价

使用特权

评论回复
6
William1994| | 2022-9-29 09:07 | 只看该作者
pack成1后, ARM7下慢3倍,CortexM系列下慢1倍。X86下慢一倍。

使用特权

评论回复
7
diweo| | 2022-9-29 10:47 | 只看该作者
除非存储器资源特别紧张,同时对程序效率要求又不是太高的时候,才考虑使用。其他情况下,不推荐这种做法。

使用特权

评论回复
8
Jacquetry| | 2022-10-4 21:15 | 只看该作者
不推荐这样

使用特权

评论回复
9
asmine| | 2022-10-7 21:21 | 只看该作者
图片能换个行就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

746

帖子

12

粉丝