打印
[应用相关]

地址对齐问题,谢啦

[复制链接]
1173|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yutianxiang618|  楼主 | 2015-12-9 11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yutianxiang618 于 2015-12-9 14:03 编辑

定义一个函数,uint8_t  *buffer  是函数的形参, uint32_t  *p函数内部局部变量,传递给buffer的是uint8_t TxBuffer[]数组。
然后函数内部 p=(uint32_t *)buffer
这样操作后 p是自动就32 位对齐了,
还是要在Tx_Buffer前加上 __align(4)让Tx_Buffer4字节对齐后,p才4字节对齐,谢谢啦
沙发
zhangbolily| | 2015-12-9 12:06 | 只看该作者
内存对齐这些东东我真的不懂哦,看看论坛里其他人的建议了

使用特权

评论回复
板凳
mark0668| | 2015-12-9 12:31 | 只看该作者
指针是没有对不对齐的说法,你给的指针地址是对齐的就对齐,不是对齐的就不对齐
他只是只向哪里.

例如你给的指针是0x20000000 那就是对齐的..你给的是0x20000001 那就是不对齐,如果内核不支持不对齐的访问就会出错了.

使用特权

评论回复
地板
yutianxiang618|  楼主 | 2015-12-9 14:00 | 只看该作者
mark0668 发表于 2015-12-9 12:31
指针是没有对不对齐的说法,你给的指针地址是对齐的就对齐,不是对齐的就不对齐
他只是只向哪里.

哦哦,没说清楚不好意思,uint8_t *buffer是个形参,*p也是函数内部定义的指针,这样的话也是要传递给
uint8_t *buffer的数组是4字节对齐后  p才4字节对齐吗?

使用特权

评论回复
5
yutianxiang618|  楼主 | 2015-12-9 14:01 | 只看该作者
zhangbolily 发表于 2015-12-9 12:06
内存对齐这些东东我真的不懂哦,看看论坛里其他人的建议了

谢帮顶

使用特权

评论回复
6
diweo| | 2015-12-9 15:11 | 只看该作者
CM3支持在单一的访问中使用非(地址)对齐的传送,数据存储器的访问无需对齐。

事实上,在内部是把非对齐的访问转换成若干个对齐的访问的,这种转换动作由处理器总线单
元来完成。这个转换过程对程序员是透明的,因此写程序时不必操心。但是,因为它通过若干个对齐的访问来实现一个非对齐的访问,会需要更多的总线周期。事实上,节省内存有很多方法,但没有一个是通过压缩数据的地址,不惜破坏对齐性的这种旁门左道。因此,应养成好习惯,总是保证地址对齐,这也是让程序可以移植到其它ARM芯片上的必要条件。
为此,可以编程NVIC,使之监督地址对齐。当发现非对齐访问时触发一个fault。具体的办法是设置“配置控制寄存器”中的UNALIGN_TRP位。这样,在整个调试期间就可以保证非对齐访问能当场被发现。

使用特权

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

本版积分规则

12

主题

103

帖子

1

粉丝