[C 的那些眉角]迴圈陷阱—那些讓你 debug 到懷疑人生的邊界條件

寫 application 的迴圈出包,頂多程式 crash、重開就好。但在 firmware 的世界裡,一個迴圈的邊界條件沒處理好,輕則硬體不回應,重則系統直接掛死,debug 工具接上去什麼都看不到,只能對著 oscilloscope 發呆。

這篇整理的都是我這幾年踩過的坑,有些當下真的找很久,事後回頭看都覺得自己蠢。但這就是 firmware 的日常吧。


🔥 硬體暫存器輪詢:你以為它會回來,但它不會

這大概是 firmware 新手最容易中招的地方。輪詢一個硬體暫存器,等某個 bit 被設起來:

// ❌ 經典死法
while (!(REG_STATUS & STATUS_READY));

看起來很直覺對吧?但問題是——如果硬體永遠不 ready 呢?

閱讀全文