2018/6/8

CM4 usage fault when using printf

最近碰到一個狀況,當呼叫 printf 時,如果印幾個字都沒問題,但當用%d 時,就會出現 Usage fault。

程式本身很簡單,就一行

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 再重新編一次,跑起來就沒問題了。

有問題的:
/arm-none-eabi-lib/lib/thumb
/lib/gcc/arm-none-eabi/4.9.3/thumb
修正後:
/arm-none-eabi-lib/armv7-m
/lib/gcc/arm-none-eabi/4.8.4/armv7-m