社区
单片机/工控
帖子详情
关于单片机的内存对齐问题
zhoushunda960
2012-02-27 04:04:46
在使用C语言编写单片机程序时,是否要考虑内存对齐?如果有内存对齐,请问是几字节对齐?在哪可以调整?
...全文
1000
5
打赏
收藏
关于单片机的内存对齐问题
在使用C语言编写单片机程序时,是否要考虑内存对齐?如果有内存对齐,请问是几字节对齐?在哪可以调整?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xmxqiyan
2012-02-28
打赏
举报
回复
51是8位单片机,不用考虑字节对齐。现在单片机中要求字节对齐的主要是ARM等32位单片机,它的寻址是以字(4字节)方式,可以去网上找一下ARM字节对齐来了解一下。
Simality
2012-02-27
打赏
举报
回复
通常是以结构体中位宽最大的数据为基本步长来对齐。至于C51里面怎么搞,你可以做个实验。
首先定义一个足够大的数组
u8 Array[];
然后定义一个存储大小的变量
u8 Count;
然后定义一个混合结构体
struct
{
u8 DataByte;
u16 DataWord16;
u32 DataWord32;
}DataStruct;
想看看结构体有没有padding,用Count = sizeof(DataStruct)读一下,如果是12那就是有padding,按照u32对齐的。
想看填充在什么位置,先对结构体内的数据赋值,然后用指针把结构体内所有字节读入数组里输出看一看。如果有仿真,直接在仿真环境里查看内存地址上的数据。
zhoushunda960
2012-02-27
打赏
举报
回复
我采用的是51核的8位单片机,应该是大端的,使用的keil的编译器。
我就是用在结构体定义上。请问是几字节对齐?我记得内存字节对齐取决于cpu寄存器长度,51核的基本上是8位的寄存器,是不是不存在内存对齐问题?
Simality
2012-02-27
打赏
举报
回复
LZ说的是结构体内部的对齐吗?别的位置我没遇到过,结构体内部有。
我说的这个对齐方式取决于编译器,并非所有编译器都支持用伪指令更改对齐设置。写个验证小程序用指针读出结构体内容即可观察内嵌的对齐方式与大小端结构。如果不能修改对齐方式,记住默认的对齐方式即可,通常默认的都是效率最高的。
单片机
结构图的内存应该如何分配详细资料和程序说明.pdf
单片机
结构图的内存应该如何分配详细资料和程序说明.pdf
com.cortexm4.exception.UnalignedMemoryAccessException
开发中碰到的报错,
问题
已解决,写个文档记录一下这个
问题
及解决方案
关于MSP430字节对齐的
问题
最近在调试过程中,一直发现结构体中数据错位现象,但是仿真器查看,又都正确..无意中数了数缓存前面的变量,是奇数字节.改称偶数字节后,一切正常..
com.cortexm0.exception.UnalignedMemoryAccessException
开发中碰到的报错,
问题
已解决,写个文档记录一下这个
问题
及解决方案
com.cortexm3.exception.UnalignedMemoryAccessException(解决方案).md
开发中碰到的报错,
问题
已解决,写个文档记录一下这个
问题
及解决方案
单片机/工控
27,509
社区成员
28,797
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章