工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

SPRESENSE Arduino エラー解析 自分用メモ

概要

SPRESENSE Aruduino エラー解析をした際の自分用メモ。SPRESENSE Aruduino エラー解析をするときに、やり方をいちいち調べながらやったので、今後調べなくていいように自分用にメモする。


詳細

1. 状況

以下のように、実行中にクラッシュしエラーが吐かれた場合について

[2026-01-25 11:45:11.017] arm_hardfault: Hard Fault escalation:
[2026-01-25 11:45:11.017] arm_hardfault: PANIC!!! Hard Fault!:
[2026-01-25 11:45:11.023] arm_hardfault:    IRQ: 3 regs: 0xd0897d8
[2026-01-25 11:45:11.023] arm_hardfault:    BASEPRI: 000000e0 PRIMASK: 00000000 IPSR: 00000003 CONTROL: 00000000
[2026-01-25 11:45:11.034] arm_hardfault:    CFSR: 00008200 HFSR: 40000000 DFSR: 00000000 BFAR: efc9a82c AFSR: 00000000

:

[2026-01-25 11:45:11.711] dump_task:      29     8 100 RR       pthread --- Waiting Signal     0000000000000000 0xd098698      2040       528    25.8%    imuThread 0xd0026d9 0
[2026-01-25 11:45:11.722] dump_task:      30     8 100 RR       pthread --- Waiting Signal     0000000000000000 0xd098fa8      4088      2360    57.7%    gnssThread 0xd002d59 0

2. エラー箇所を特定する

arm-none-eabi-addr2lineというツールを使用する。通常このツールは、

C:\Users\{ユーザー}\AppData\Local\Arduino15\packages\SPRESENSE\tools\gcc-arm-none-eabi\9.2.1\windows\bin\

にある。

そして、解析対象となるファイルは、通常

C:\Users\{ユーザー}\AppData\Local\arduino\sketches\

というフォルダに、ビルドごとにフォルダが切られ出力されていて、その中の {スケッチ名}.ino.elf である。

そして、解析対象となるアドレスは、エラーダンプの中の PC および LR である。

[2026-01-25 11:45:11.080] up_dump_register: IP: 00000001 SP: 0d0898b0 LR: 0d001dad  PC: 0d001da0

なので、解析対象のファイルのあるディレクトリに移動し、arm-none-eabi-addr2lineをPC、LRに対して実行。

cd C:\Users\{ユーザー}\AppData\Local\arduino\sketches\{ID}
C:\Users\{ユーザー}\AppData\Local\Arduino15\packages\SPRESENSE\tools\gcc-arm-none-eabi\9.2.1\windows\bin\arm-none-eabi-addr2line.exe -e ./{スケッチ名}.ino.elf -f -C {アドレス}

これを実行すれば、関数名や行番号がわかる。

{関数名}
C:\Users\{ユーザー}\Documents\Arduino\SPRESENSE\{スケッチ}\{ファイル名}:{行番号}