树莓派出现Bus Error,定位在MAVLINK协议,通过修改mavlink.h配置解决问题Q&A

问题描述

近日(20240828)由于昨日(20240827)修复上一篇博客出现问题过程中,不小心运行了rm -r /*指令,导致需要重装系统,但临时更换了另一块树莓派,但由于该树莓派架构为aarch64,与原先架构armv7不一致,导致相同代码运行过程中出现bus Error,程序无法正常运行。

报错内容:
在这里插入图片描述
正常运行的树莓派架构:
在这里插入图片描述

问题成因

Bus Error(总线错误)

事实上,总线错误几乎都是由于未对齐的读或写引起的。它之所以称为总线错误,是因为出现未对齐的内存访问请求时,被阻塞(block)的组件就是地址总线。对齐(alignment)的意思就是数据项只能存储在地址是数据项大小的整数倍的内存上。在现代的计算机架构中,尤其是RISC架构,都需要数据对齐,因为与任意的对齐有关的有关的额外逻辑会使整个内存系统更大且更慢。通过迫使每个内存访问局限在一个cache行或一个单独的页面内,可以极大地简化并加速如cache控制器和内存管理单元(MMU)这样的硬件。
我们用地址对齐这个术语来陈述这个问题,而不是直截了当地说是禁止内存跨页访问,但它们说的是同一回事。例如,**访问一个8字节的double数据时,地址只允许是8的整数倍。**所以一个double数据可以存储于地址24,地址8008或32768,但不能存储于地址1006(因为它无法被8整除)。

页和cache的大小都是经过精心设计的,这样只要遵守对齐规则就可以保证一个原子数据项不会跨过一个页或cache块的边界。

MAVLINK协议

根据试验现象(通过MAVLINK协议下达任务过程中,仅下达航点时,出现bus error问题)和调试步骤定位到问题为下述代码中的mavlink_msg_gcs_set_waypoints_get_waypoint_l

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值