PHY6222芯片hardfault问题分析方法

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


Post Reply
User avatar
逻辑的院子
Posts: 220
Contact:

在使用 PHY6222 芯片开发的过程中,有时候会碰到类似下图所示的 Hardfault 错误:

Image

仔细观察上图可知:PC 指针的地址为 0x11030bf4,理论上通过观察 PC 指针的值就可以快速定位到引起 Hardfault 所在的代码位置。

实际上通过以下步骤进行操作就可以实现这个功能:

1)使用notepad++或其他文本编辑器打开 .\software\TuyaOS\\.log\bin\material\mk_hexf_bin.bat

如果使用 vscode 编译,上述路径为:.\software\TuyaOS\vendor\phy6222_ble\toolchain\templates\keil\bin\material\mk_hexf_bin.bat

2)在文件首行添加 C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe -c -a -d -e -v -o Demo.asm ./Objects/Demo.axf,如下图所示(注意此处 C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe 路径如果和你电脑上不一样要修改):

Image

3)重新全量编译工程

4)此时 .\software\TuyaOS\\.log 目录下会出现 Demo.asm 文件,使用notepad++或其他文本编辑器打开该文件,在该文件中搜索 PC 指针的值 - 0x11030bf4

Image

5)根据上图可以观察到:PC 指针(即发生 Hardfault)的位置位于 tuya_init_second 函数中的 tal_sw_timer_init 语句和 tal_ble_bt_init 语句之间,定位到该位置:

Image

6)根据上图可以观察到:发生 Hardfault 的位置和第5)步中预测的位置一致,是由于操作指向0xFFFFFFFF位置的指针导致的 Hardfault,这个错误是为了演示这个功能人为添加的,同样的道理,这个方法也可以用于快速定位其他原因导致的 Hardfault。

Post Reply