1.問題の説明
- プログラムは元の要件に従って続行しませんでした。一時停止した後、DefaultISRにジャンプしたことがわかりました
2.問題分析
- 情報を確認した後、この種の問題は通常、割り込みがトリガーされたが、割り込み関数が定義されていないため、ここにジャンプします
3.問題の発見
- DefaultISR割り込み処理関数を定義します。この関数では、印刷割り込み制御ステータスレジスタを定義するか、直接デバッグして、アドレス0xE000ED04の値を確認します。
- レジスタの値を表示するためのデバッグ。コンパイル環境に応じて決定する必要があり、ここでは説明しません
- 関数定義の参照コードは次のとおりです。
uint8_t buf[100];
#define VECTORNUM (*(volatile uint32_t*)(0xE000ED04))
void DefaultISR(void)
{
/* 有printf可以用printf打印,结果一样 */
sprintf(buf,"\n****default_isr entered on vector %d %x *****\r\n\n", (uint8_t)VECTORNUM, (uint32_t)VECTORNUM);
Sys_SendString(buf); /* 串口数据发送 */
}
- 印刷されたデータに従って、VECTORが割り込みをトリガーした方法を判別します。ここで私の値は3です。対応するチップベクタテーブルを確認してください。これはHard_Faultが原因であることがわかります。
その他の
記述や説明に間違いがあることは避けられません。訂正してください。
侵害がある場合は、削除するために私に連絡してください、ありがとう!!!
添付の参照リンク(作成者に感謝):
[1] 。https://www.eefocus.com/constyu/blog/17-03/408750_297e4.html