程式本身很簡單,就一行
printf("%d\n", __LINE__);
就這樣,跑進去 printf 後就會跑出 Usage fault。從出問題的地方看,是 PC 跑到奇怪的地方了,讀回來的值也很怪。
想了好久,後來覺得就算真找出流程了,也很難改,況且只會在某個 task 中出錯,其他都沒有,這也太奇怪了。想來想去,只能懷疑是不是 toolchain library 用錯了?剛好就Google 到這篇,可以嘗試一下。
https://stackoverflow.com/questions/26332119/stm32-hard-faults-when-trying-to-printf-numbers-10
檢查 toolchain 後,發現目前用的 toolchain 把 v7-M 相關的東西都拿掉了,可能是之前沒用到吧。ARM v7-M 就是 CM4 使用的架構。換了另一個有 v7-M 的 toolchain 再重新編一次,跑起來就沒問題了。
有問題的:
修正後: