OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 600|回复: 3

关于在STM32F031上移植USMART发现的BUG

[复制链接]

10

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-3-15
在线时间
44 小时
发表于 2024-7-21 16:47:18 | 显示全部楼层 |阅读模式
本帖最后由 Taven 于 2024-7-21 16:48 编辑

      最近公司项目在用到一款STM32F031(使用的是老版本标准库非HAL库)单片机时,打算移植USMART组件使用,但是在DEBUG过程中发现,通过预设的接口API使用时,只要一涉及到传参就会使单片机进入硬件错误中断。因为此前已经在STM32F4和STM32L452上用过,起初并不认为是USMART组件出问题了一定是自己哪里移植问题。查了一圈没发现移植问题,于是仔细看了出问题的地方
捕获.PNG 捕获.PNG

     只要一运行这句话就会进入硬件错误中断, 这句话的意思其实就是吧一个值赋值到一个数组的特定位里面,于是我改了一种写法,与此同时查找其他地方类似的写法也全部按照这种方式改掉,程序就正常运行了。

捕获.PNG

    接下来就是找原因,为啥会这样,于是我就看了这些结构体成员的定义。

捕获.PNG 捕获.PNG 捕获.PNG


   可以看到这里除了用到的 res 变量是u32类型的以外,其他都是u8类型,理论上这种后期强制类型转换到u32是会有问题的,这也是这里出问题的原因。于是我又改了以下写法

捕获.PNG

   这样的写法也是没问题的,但是这样res的变量范围会被限制位u8了。回到上一个问题,这种后期强制类型转换难道是编译器会自动处理吗?也就是说这个问题的本因就是编译器太老了?,但是同样的环境编译其他单片机确实没问题。哪位大佬解释一下


屏幕截图 2024-07-21 164646.png







捕获.PNG
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2126

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4687
金钱
4687
注册时间
2015-1-10
在线时间
586 小时
发表于 2024-7-22 10:03:57 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

804

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3817
金钱
3817
注册时间
2017-3-7
在线时间
1663 小时
发表于 2024-7-22 11:22:24 | 显示全部楼层
地址偏移导致的问题,你这款芯片应该不支持不对齐访问指令,m0架构
回复 支持 反对

使用道具 举报

10

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-3-15
在线时间
44 小时
 楼主| 发表于 2024-7-22 14:05:53 | 显示全部楼层
a5820736 发表于 2024-7-22 11:22
地址偏移导致的问题,你这款芯片应该不支持不对齐访问指令,m0架构

八九不离十,就是这个原因了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-1-31 14:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表