Project

General

Profile

Actions

TroubleShooting » History » Revision 3

« Previous | Revision 3/7 (diff) | Next »
mole lord, 09/17/2020 03:07 PM


TroubleShooting

WWDGを使っていないのにWWDG_IRQHandlerが呼ばれる

Windowed WatchDog timerを全く使っていないのに、デバッガでBreakしたら「WWDG_IRQHandler」で停止していることがあります。
そのような場合、何らかの「ハンドラを明示的に実装していない割り込み」が発生してDefault_Handlerが呼ばれた可能性が高いです。

対処
Core/Src/stm32f4xx_it.c に、startup_stm32f4??xx.s に書いてある何々Handlerを全部書きます。
そうすれば、どんな割り込みが発生したかがすぐわかります。

void RCC_IRQHandler(void) { for(;;); }
void EXTI0_IRQHandler(void) { for(;;); }
...

リンカがduplicatedなどと文句を言うときは、そのHandlerは定義済みなので、自分で追加したほうをコメントアウトしてください。
デメリットはROM消費が増えることですが、 for(;;); だけなら1ハンドラあたり2バイトなので影響は少ないでしょう。

Makefileに書いたのと違うパスのhoge.cがコンパイル+リンクされる

STM32CubeMXが自動生成するMakefileの問題で、同じファイル名の.cが2つ以上のフォルダに含まれていると、依存関係を書いたファイル.dが誤ったものになります。
vpath %.c $(sort $(dir $(C_SOURCES)))
の文が怪しいです。

対処
解決策をまだ見つけられていません。

.ld(リンカスクリプト)を書き換てBuildしても何も起きない

STM32CubeMXが自動生成するMakefileの問題で、.elfの依存ファイルにリンカスクリプトが入っていません。

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile $(LDSCRIPT) に修正すれば治ります。


累計表示回数:140

Updated by mole lord 7 months ago · 3 revisions