You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab2019b部署BeagleBone Blue计步例程I2C相关C代码报错如何解决

问题根因

该报错是Matlab R2019b版本BeagleBone Blue官方支持包的内置I2C驱动模板代码存在两处缺陷:

  1. 底层I2C实现文件缺失Linux标准I2C头文件引用,导致struct i2c_msg、I2C_M_RD等内核标准定义无法被识别
  2. 驱动上下层的I2C句柄类型不匹配,底层函数要求传入int类型的文件描述符,上层调用传入的是void*类型的自定义句柄,触发类型转换警告及逻辑错误

解决步骤(修改支持包模板一劳永逸)

  • 找到Matlab R2019b BeagleBone Blue支持包的I2C源码模板,Windows默认路径为C:\ProgramData\MATLAB\SupportPackages\R2019b\toolbox\target\supportpackages\beagleboneblue\src\MW_I2C.c,Linux系统对应找R2019b支持包安装目录下的beagleboneblue/src文件夹即可
  • 打开MW_I2C.c文件,在开头的头文件引用段新增一行:
#include <linux/i2c.h>
  • 找到三个上层调用底层I2C函数的位置,添加强制类型转换:
    1. 将status = EXT_I2C_readH(I2CModuleHandle, SlaveAddress, data, DataLength);修改为status = EXT_I2C_readH((int)I2CModuleHandle, SlaveAddress, data, DataLength);
    2. 将status = EXT_I2C_writeH(I2CModuleHandle, SlaveAddress, data, DataLength);修改为status = EXT_I2C_writeH((int)I2CModuleHandle, SlaveAddress, data, DataLength);
    3. 将EXT_I2C_terminateH(I2CModuleHandle);修改为EXT_I2C_terminateH((int)I2CModuleHandle);
  • 保存修改后的文件,重启Matlab,删除之前生成的编译缓存目录(即报错中提到的/home/debian/beagleboneblue_countstep_ert_rtw),重新打开Simulink模型编译烧录即可正常运行

临时替代方案

如果暂时不想修改支持包源码,可每次生成代码后手动修改烧录到BeagleBone Blue设备上的MW_I2C.c文件,执行上述相同修改后,手动进入编译目录执行make命令编译运行即可。

内容的提问来源于stack exchange,提问作者Matěj Kopecký

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:57:03