|
古老的嵌入式系統
十多年前, 我跟學長去幫忙進行一個古老的嵌入式系統....
. w- ?* D3 U4 F z+ D' C在一片大約 3 張 A4 的普通面積的 IC 板上, 配置了六顆 MCU (8031, z80, 6502 三種系列),
( {4 W+ y" X' a# S" e1 U連當時最高檔華邦 FM music chip 都有, 嵌入一堆處理器和記憶體及傳輸裝置, 目的是 ---
1 b0 F! u7 A2 l5 d6 [+ y" x串連很多台小蜜蜂或是小鋼珠, 獲得並控制中獎機率, 幫老闆賺錢 !!
' @* F, R' g, p9 |9 e9 C# c d後來, 用 C 寫的程式太大, 漸漸精簡成組合語言的方式, 並減少 CPU 數量,: I( m/ b) T6 I! D+ ~% ^
最後還衍生出警民連線聯防系統... 不過此時我已經畢業去醫院實習了...
. p, q: _2 ?* B! M2 p+ c經驗: 以前用 C 寫的程式很難除錯, 我還是慣用組合語言," c# b1 }0 D1 r# Y( c; N: J5 o- S
尤其在 debug 中, 居然發現, C 的 compiler 常會有誤設目地資料大小的問題,
2 d; ]) j! C x$ c 也就是你可能只想寫入 1 個 byte 的 00, 但 compiler 雞婆的給你送 16-bit 的 0000+ D! \( T9 u, C6 ^* ^0 p; r8 J! h' O
即使你已宣告是 BYTE 的大小, 很扯的是, 那時公司�兩位年輕的設計師,
% {; j8 @( w5 i3 k# `9 U2 e$ H 連續兩週一直無法抓到此 bug, 壓力過大之餘, 只好走人... % Q g ? r& g0 ?2 I1 c- D2 o
----
: r# Z3 x9 N: g9 a幾年前, 我用 GNU CPP 去設計 PS2 的程式, 居然發現全世界很知名的某個外國人,
* z$ R% R$ c( p. ]7 M6 W6 h他所 release 出來的 source code, 也好像故意在幾個地方偷改 size modifier,6 ]) y7 |& }. [3 b$ K7 F: Z
讓我們用他的部份程式碼來寫自己的計劃時, 會在某些特定的時機當死, 且很難除錯 !!& o% W2 e& p3 }5 L- b
(相同的 C 程式碼就能在我的 PC 上用自己設計的 PS2 模擬器 Run 的好好的, 只是少了那幾個有 bug 的程式,0 `( U! i7 j7 j5 p2 d2 c8 k
於是才讓我去仔細把 MIPS R5900 的機器碼對照回 c source code, 才發現不對, 並證明此等釋出"有害"程式的不良行徑)
( B' S" _& ^8 ^* p1 o/ e5 r! L這也是直到我的除錯功力大增之後, 才發現的... (抓這幾個錯也豁出了好幾週不眠不休的日子 !)
5 G4 j5 X/ j9 X8 y# o/ y所以, 不管是哪種嵌入式系統, 都可能有除錯不易的問題 !!1 E& f- u; Q% A6 m. A
--> 在下不才, 提供給大家看看笑笑就好.. |
評分
-
查看全部評分
|