【求助】【TuyaOS OS】OTA升级 Hard fault handler

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


cfwdxc
Posts: 7

1)开发包全称:PHY6222_TuyaOS-3.10.0
2)问题现象:ota升级 直接 Hard fault handler ,每次都会出现
3)复现流程:进行ota升级
4)发生时间:2025.7.25,17:00 出现1次

Attachments
屏幕截图 2025-07-25 165826.png
屏幕截图 2025-07-25 165813.png
屏幕截图 2025-07-25 165813.png
Last edited by cfwdxc on 2025年 Jul 25日 19:25, edited 1 time in total.
User avatar
逻辑的院子
Posts: 369
Contact:

Re: 【求助】【TuyaOS OS】OTA升级 Hard fault handler

请贴上完整Log。
另外,请问:

  1. 您的软件是否有修改?
  2. 您的硬件用的是什么(模组还是原厂的开发板)?
cfwdxc
Posts: 7

Re: 【求助】【TuyaOS OS】OTA升级 Hard fault handler

1.软件有修改,我通过版本回溯+注释代码定位到一处地方,只要把图片上的代码注释和就正常了,但是我不理解为什么会出现hard fault。此处的log也没有打印,把调用它的地方注释掉也是正常的
2.硬件用的是BP3L模组

Attachments
屏幕截图 2025-07-25 192925.png
User avatar
逻辑的院子
Posts: 369
Contact:

Re: 【求助】【TuyaOS OS】OTA升级 Hard fault handler

仅从您提供的截图来看,不好判断直接的原因。
有以下几点可以留意:

  1. 看截图中是串口处理相关的代码,串口处理的逻辑不建议直接在串口中断中执行,可以通过事件的方式转到其他的任务中处理;
  2. 可以检查图中的赋值操作是否存在越界行为;
  3. 可以继续缩小范围,看看具体是哪一行影响的;
  4. 如果以上都尝试过还未查出原因,则可以在不改变逻辑的情况下尝试修改这段代码的表达方式,以尝试找出问题相关的因素。
cfwdxc
Posts: 7

Re: 【求助】【TuyaOS OS】OTA升级 Hard fault handler

1.是的,我是像您这样子处理的在,先在串口接收中断接收数据,再到串口接收事件中统一处理数据然后传入到这个接口进行解析
2.我发现只要对这个结构体变量中的枚举成员赋值就会出现 hard fault,这段代码也不存在会有内存越界的行为

Attachments
屏幕截图 2025-07-26 092607.png
cfwdxc
Posts: 7

Re: 【求助】【TuyaOS OS】OTA升级 Hard fault handler

您这个结构体是怎么定义的?贴图看看
[/quote]

Attachments
屏幕截图 2025-07-28 105616.png
屏幕截图 2025-07-28 105604.png
User avatar
逻辑的院子
Posts: 369
Contact:

Re: 【求助】【TuyaOS OS】OTA升级 Hard fault handler

这个定义看起来没什么特别的,不过从您的描述中看的话,有两个点可以尝试一下用来排查问题:

  1. 尝试下不定义成枚举观察现象;
  2. 将枚举在其他位置引用观察现象;
    (提醒:枚举定义建议赋个初始值,赋值的时候也使用枚举值而不是0,会更规范一些)

另外,我看您一开始讲的问题是OTA升级,后面是怎么跟串口处理联系起来的?

cfwdxc
Posts: 7

Re: 【求助】【TuyaOS OS】OTA升级 Hard fault handler

逻辑的院子 2025年 Jul 28日 11:35

这个定义看起来没什么特别的,不过从您的描述中看的话,有两个点可以尝试一下用来排查问题:

  1. 尝试下不定义成枚举观察现象;
  2. 将枚举在其他位置引用观察现象;
    (提醒:枚举定义建议赋个初始值,赋值的时候也使用枚举值而不是0,会更规范一些)

另外,我看您一开始讲的问题是OTA升级,后面是怎么跟串口处理联系起来的?

1.我尝试将那个结构体变量中的两个相同类型的枚举变量拆开,ota就正常了,但是我不知道是什么原因,我加了volatile也不好使,不知道是不是编译器优化的问题,或者TuyaOs有编译器优化选择的命令令我可以试一下?
另外,这个是ota失败的时候我注释代码就定位到这一段了,我也不是很清楚这一段居然会影响到ota
下面的图是我修改后变正常的代码

Attachments
屏幕截图 2025-07-28 115901.png
User avatar
逻辑的院子
Posts: 369
Contact:

Re: 【求助】【TuyaOS OS】OTA升级 Hard fault handler

看起来确实挺奇怪的。
PHY6222的编译优化就是keil里面的编译优化,可以打开路径 \software\TuyaOS\.log\ 中的keil工程,修改编译优化选项:

编译优化.jpg
Post Reply