看板 Soft_Job 關於我們 聯絡資訊
我剛好也是搞 Embedded Systems 的, 8 bit MCU ,不過我比較好運, 現在只要搞消費級的就行了,不像 kerickuo 要搞醫療級的 ^___^ 手邊有款產品,只有 8K 的 SRAM ,卻要在其中塞進所有的 code 及 data 變數,雖然有外掛一顆 SPI 介面的 NOR flash,但很明顯的,不能直接在 它上面跑程式。 首先,我寫程式不但會設法避免用 else ,連 if 我都用得不大情願。 那要如何確保程式正確? 我覺得最重要的當然是作完善的思考及邏輯分析,當然,就如 luciferii 所說的,人都會難免有恍神的時候,要避免恍神時犯的錯,我採用以下幾 個方法: 1. 即使程式簡單到睡夢中都能寫出來,寫的時候也盡量不要睡覺 :) 2. 盡量簡化邏輯,少用 if 及特例 3. 對重要的部份作完善的單元測試 4. 複雜的數值運算先用 compiler 廠提供的 simulator 驗證過 5. 重要的邏輯區塊先在 PC 上用其他 C compiler 驗證過 6. 盡量不用 global 變數 7. 以 assert 防呆 8. 瞭解 compiler 的記憶體配置方式,適時檢查 map 檔 9. 其他防呆技巧... 最後,我很好奇 kerickuo 的開發平台是什麼? 怎麼有提供 stack overflow 的檢查機制? 如果有這個機制可用,我也會把它用在可疑的地方,用來 debug ※ 引述《kerickuo (紅框獨居帥老人傳說)》之銘言: : : 例如在下搞一個很冷門的 Embedded System (為了省空間幾乎只有基本的簡單kernel.. ), : 而搞 Embedded System ,其實常常發生 overflow 的問題, : 畢竟常常有東西是 8 bits 或 16 bits 的, : 於是我就漸漸養成一定會去檢查溢位的習慣。 : 常常被溢位搞到於是自然很重視這個檢查, : 要不然以前覺得只是個加減還加什麼溢位檢查,根本是嗤之以鼻^-(oo)-^。 : 推 luciferii:不管是註解、debug message、else和所有垃圾除錯碼 12/28 12:11 : → luciferii:出發重點就是在於不要相信「人」的能力 12/28 12:12 : → luciferii:不一定會派上用場,只是種保險作法。我不認為這是「好程 12/28 12:13 : → luciferii:式所要避免」的,再熟練的人類高手,也有恍神的時候。 12/28 12:14 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.19.115
kerickuo:Sun 的一個 for mips 的詭異的平台,剛好有提供 ^^" 12/28 13:37
kerickuo:不過那function只是回傳某個reg的值而且一發生印完就cras 12/28 13:41
kerickuo:crash, 所以檢查出來還是要在前面就先處理掉 orz 12/28 13:42
ledia:單兵作戰 ? 12/28 13:51
kerickuo:而且跟8K的SRAM比起來,我可以用的RAM大小很奢侈...orz 12/28 14:14