|
简单地说非对齐内存访问就是被访问的地址不是4字节对齐的,非对齐内存访问的用处很多,有的时候可以精简不少程序,尤其是在帧数据处理的时候。例如有一个整形变量A存放在内存的0x0000 0000处,访问变量A的时候就是对齐访问,因为地址0x0000 0000是4字节对齐的,再比如又有一个整形变量B的存放地址为0x0000 0003,那么对B的访问就是非对齐内存访问了,因为地址0x0000 0003不是4的整数。 貌似没有什么问题,就像上面的例子中的变量B,我们读取变量B的时候不就是从地址0x0000 0003处开始读取4个字节到CPU的寄存器中去么?是这样,但是很多处理器设计的时候为了运算速度的考虑只允许对齐的内存访问方式,非对齐访问会出现异常中断,所以不能进行非对称内存访问。但是Cortex M3内核是支持非对齐内存访问的,在ARM Cortex M3权威指南(英文版)中有写到“The Cortex-M3 processor also supports unaligned data accesses, a feature previously available only in high-end processors.”,这段话说的很清楚,Cortex-M3处理器是支持非对齐内存访问的,这在之前只是在高端芯片上才支持的。那么基于CM3的STM32F1xx系列真的可以么?做个试验就行了。 简单写个程序进行测试:
在STM32F103上运行的结果是:
结果很明显,进行非对齐写入的时候,没有发生异常中断,且正确进行了非对齐写入。但是需要注意的是如果程序中有非对齐的内存访问的话,程序的可移植性可能会降低,因为不是所有处理器都可以进行非对齐内存访问,例如使用Cortex-M0内核的STM32F0系列处理器就不支持非对齐内存的访问。 ———————————————— 版权声明:哐哐哐 Quan 如有侵权请联系删除 |
STM32固件库分享,超全系列整理
【MCU实战经验】基于STM32F103的二轮平衡车(6轴上位机 源代...
10张图带你完全掌握STM32 GPIO,从入门到精通,收藏就够了!
如果你解决了这些问题,就可以直接学STM32
STM32的分类和选型
学习STM32很简单?
STM32到底由什么组成?内核和外设的关系又是怎样的?看这篇!
GD32和STM32的区别在哪里??
入门嵌入式,为什么都要先学STM32??
STM32中断响应延迟优化:从NVIC配置到DMA加速的极致性能调优
微信公众号
手机版