打印
[STM32F0]

STM32F030F4P6奇怪的问题

[复制链接]
2558|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bqyj|  楼主 | 2021-8-14 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
keil5工具,定义一个静态或全局数组uint8_t arr[8],若以32位*((uint32_t *)arr)或64位*((uint64_t *)arr)访问将产生硬件中断,程序无法继续运行,但按16位方式访问正常,若将数组改为uint8_t arr[9]或者在这个数组的前或后面再加定义一个静态或者全局变量也正常了;再将arr改成uint16_t arr[4],以32位*((uint32_t *)arr)或64位*((uint64_t *)arr)访问也将产生硬件中断,将数组元素增加到5个,则正常;得出结论:对数组以32位*((uint32_t *)arr)或64位*((uint64_t *)arr)访问时,需要分配已32位为大小并多1字节空间才行。

使用特权

评论回复
沙发
bqyj|  楼主 | 2021-8-14 10:43 | 只看该作者
另外,把程序移到STM32F3单片机下一切正常,不会发生上面这种情况

使用特权

评论回复
板凳
dingy| | 2021-8-14 10:44 | 只看该作者
这也太高级了,我很少用指针。

使用特权

评论回复
地板
bqyj|  楼主 | 2021-8-14 10:46 | 只看该作者
我这用指针都是家常便饭,只为了节省代码空间

使用特权

评论回复
5
tian111| | 2021-8-14 10:49 | 只看该作者
去查一下 对齐访问 这个名词

是你的用法BUG。

任何变量(u8 u32 double 结构体),在链接时,都有对齐要求,
链接器会合理分配并可能重新排序。

如果是结构体,还可能会加填充。

以上是默认行为,也可以添加align和pack关键字来约束这种行为。

使用特权

评论回复
6
bqyj|  楼主 | 2021-8-14 10:50 | 只看该作者
但,为什么会产生硬件中断,在F3上正常?

使用特权

评论回复
7
bqyj|  楼主 | 2021-8-14 10:52 | 只看该作者
使用指针变量来指向数组后访问结果也是硬件中断,为什么?

使用特权

评论回复
8
songqian17| | 2021-8-14 10:54 | 只看该作者
F3 是M4内核,支持硬件非对齐访问(底层还是拆成多条操作)
内核配置有一个开关,打开后,非对齐访问也会异常。

030是M0

去了解一下CPU内部总线相关的知识就比较好理解了!

使用特权

评论回复
9
chenho| | 2021-8-14 10:56 | 只看该作者
另外,8位数据类型,链接地址只要求字节对齐就可以了,所以同个芯片同个项目上,不同的编译,链接的位置都有可能会变。

使用特权

评论回复
10
liliang9554| | 2021-8-14 10:58 | 只看该作者
所以,改几行代码再编译一下,地址就可能刚好对上了。

使用特权

评论回复
11
zwll| | 2021-8-14 11:00 | 只看该作者

cortex-m0不支持对齐访问啊
在map文件里看一下首地址就知道了

使用特权

评论回复
12
bqyj|  楼主 | 2021-8-14 11:05 | 只看该作者
确实是对齐问题,32位或64位只能按4字节对齐格式访问,16位只能地址是偶地址

使用特权

评论回复
13
chuxh| | 2021-8-14 11:08 | 只看该作者
cortex-m0权威指南,英文版,看数据对齐部分,135页

使用特权

评论回复
14
juventus9554| | 2021-8-14 11:10 | 只看该作者

8位数据类型,链接地址只要求字节对齐就可以了

使用特权

评论回复
15
stly| | 2021-8-14 11:12 | 只看该作者
同个芯片同个项目上,不同的编译,链接的位置都有可能会变

使用特权

评论回复
16
llljh| | 2021-8-14 11:14 | 只看该作者
真要省的话,可以试着用联合体

使用特权

评论回复
17
dingy| | 2021-8-14 11:16 | 只看该作者
32位或64位只能按4字节对齐格式访问,使用ST flash库函数字节读写操作同样

使用特权

评论回复
18
songqian17| | 2021-8-14 11:19 | 只看该作者
基本不用指针啊

使用特权

评论回复
19
huangchui| | 2021-8-14 11:20 | 只看该作者
有时候就是这样的

使用特权

评论回复
20
bqyj|  楼主 | 2021-8-14 11:22 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

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

本版积分规则

390

主题

4526

帖子

2

粉丝