发新帖我要提问
12
返回列表
打印
[STM32F1]

STM32要求双字节变量必须偶数地址?

[复制链接]
楼主: kangzj
手机看帖
扫描二维码
随时随地手机跟帖
21
wyjie| | 2022-4-10 23:59 | 只看该作者 回帖奖励 |倒序浏览
楼上意见都试试

使用特权

评论回复
22
sonicll| | 2022-4-11 08:57 | 只看该作者
M0,M0+,M23内核不允许非对齐访问,M3,M4,M7,M33是可以的

使用特权

评论回复
23
英雄本色2022| | 2022-4-11 16:25 | 只看该作者
M3内核不需要对齐访问内存,没想到M0内核还需要,一直以为M0内核和M3内核一样,只是指令少些

使用特权

评论回复
24
stly| | 2022-4-11 21:55 | 只看该作者
没错,必须得双字节对齐,如果是u32则必须4字节对齐,你可以用 align宏来指定数组对齐。

使用特权

评论回复
25
jiajs| | 2022-4-11 21:58 | 只看该作者

(uint16_t * )tmpBuf;
这个操作后,我想tmpBuf是不会改变的吧,只是新建了一个缓存。。

使用特权

评论回复
26
jiajs| | 2022-4-11 21:59 | 只看该作者

__packed uint16_t *tmpPoint = (__packed uint16_t * )tmpBuf;
X86指令集比较强大,可以多次从内存取数据对齐,精简指令集的CPU都不支持这种不对齐的访问。具体看keil帮助里面的arm指令集的LDR指令的说明。

使用特权

评论回复
27
heweibig| | 2022-4-11 22:02 | 只看该作者
用联合形式试试。

使用特权

评论回复
28
chuxh| | 2022-4-11 22:03 | 只看该作者
感觉你的程序 还是溢出问题 而非 强制转换问题,最多是个诱因.

使用特权

评论回复
29
kangzj|  楼主 | 2022-4-11 22:05 | 只看该作者
你可以试试,肯定不是溢出的问题,别人已经说出了原因

使用特权

评论回复
30
kangzj|  楼主 | 2022-4-11 22:07 | 只看该作者
赞同align,   __align(8) char buffer[10];

使用特权

评论回复
31
renyaq| | 2022-4-11 22:10 | 只看该作者
指针操作不仔细

使用特权

评论回复
32
huangchui| | 2022-4-11 22:13 | 只看该作者
地址溢出了?

使用特权

评论回复
33
zhenykun| | 2022-4-11 22:15 | 只看该作者
不用指针的话 能用什么呢

使用特权

评论回复
34
dingy| | 2022-4-11 22:22 | 只看该作者
即使是x86系列CPU,数据非字对齐存储,可以按字访问,其内部实现时,也是由多条微指令实现的,速度也比字对齐访问慢。

使用特权

评论回复
35
huangchui| | 2022-4-11 22:24 | 只看该作者
编译器优化的时候,会按字对齐编译的。

使用特权

评论回复
36
kangzj|  楼主 | 2022-4-11 22:27 | 只看该作者

哦,那我就知道怎么回事了,多谢大家

使用特权

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

本版积分规则