全域變數的誘惑 — 為什麼要克制使用
有一次接手一個前人留下來的 firmware 專案,開機卡在某個地方,重現條件很怪:只有在 UART 收到特定指令、又剛好在某個 timer 中斷觸發的時候才會掛。
追了兩天,最後發現是一個叫 g_status 的全域變數,被三個地方在改:主迴圈、UART ISR、還有一個 timer callback。三方搶著寫,沒有人管同步。
那一刻我就在想,當初寫這個的人,大概也只是想「方便」而已。
韌體開發 x 踩坑心得 x 讓錢慢慢長大
有一次接手一個前人留下來的 firmware 專案,開機卡在某個地方,重現條件很怪:只有在 UART 收到特定指令、又剛好在某個 timer 中斷觸發的時候才會掛。
追了兩天,最後發現是一個叫 g_status 的全域變數,被三個地方在改:主迴圈、UART ISR、還有一個 timer callback。三方搶著寫,沒有人管同步。
那一刻我就在想,當初寫這個的人,大概也只是想「方便」而已。