我讀 «現代嵌入式系統開發專案實務»

這本書雖然只能說是入門書, 對我的同事們已經不太適用, 不過對新人來說真的是一本很好的書. 本書的副標題叫做 “菜鳥成長日誌與專案經理的私房菜", 所以書中也是以菜鳥的角度來看 embedded system, 從什麼都不會, 一點一滴地學習, 終於熬到產品量產, 結案. 關於這本書的內容, 還是要實際去翻翻才會知道. 我想要特別提到的是書中和我們公司不同的四個點.

1. 這本書更適用於 system design house, 而不是 IC design house. 只不過現在 IC design house 經常撈過界, 使得這本書對我們也變得很真實.

2. 如果沒有 C-model, 我們就必須像書上說得一樣, 去建一套 PC 上的模擬開發環境, 以便設計 UI. 不過我既有 C-model for firmware, 又有 Linux demo system, 所以就省去了再做一套模擬器的時間.

3. 書上的實例是開發一個專案. 專案結束, 案子結了, 人就散了. 但我們是採用部門制, 人力編制也相對龐大 (10 倍?), 所以並不會有專案需要和 RD 部門借用人力的問題.相形之下, 我們專案就是部門, 問題的確比較少. 當然也和產品生命週期夠長有關, 若不是一個產品可以連做好幾年, 大家就不會在一起這麼久了.

4. 書上提到強勢的 QA 導致 RD 抓狂, 品質低落. 我們倒是沒有這個狀況. 或許跟我們的 QA 直接隸屬 DVR project 有關, 這樣大家比較像在同一條船上, 無謂產生什麼意氣之爭. 當然,我們的 QA 做得很不錯, 還是可以稱讚一下.

Excel 小技巧

有時候, 在 excel 的工作表 2008 中想要參考工作表 2007 中某一格的內容, 它的寫法如下:

工作表 2007 假設有一個 A1 = 5

工作表 2008 假設有一個 A1 = 8, A2 想要用工作表 2007 的 A1 去加工作表 2008 的 A1,

則 A2 的公式是 +(‘2007’!A1)+A1

其中 +() 是不能少的, 關鍵字 ‘2007’ 是工作表 2007 的名字, 然後用單引號刮起來, 後面要有驚嘆號! 接下來就是欄位的寫法, 和平常一樣.

如果對應的欄位, 希望在 copy and paste 之後對到固定的欄位還是不變的, 那就要把
A1 改成 $A$1 這種格式.

BT 小檔案

前幾週, 因為我的 PDA 又無預警電力全失, 所以我的正版 Papago 5.7 版也就這樣不認得主人了, 還得要重灌一次. 為此我發願要改灌一個盜版的 Papago, 以免斷電後, 它又不認得我了. [注意! 我有買正版喔]

在這個因緣際會之下, 我上網找到了一個 Papago 5.7 版的 crack. 當然, 又同時發現了 9.0, 10.0 版的 crack. 不過要把他們 download 下來試用的話, 那個網站要我裝一個哇嘎 (Vagaa) 的軟體. 就這樣, 繼多年前用過 eZPeer 後, 我又安裝了一次 P2P 軟體. Papago 10.0 版真的很好用, 所以我又買了個正版. 因為升級價還不到 900 塊, 算是很便宜的合法化.此外它又多送一個正版 5.7, 也有升級的權利. 

言歸正傳, 裝了 Vagaa, 結果惹來了一堆垃圾軟體. 因為 Vagaa 是簡體中文的介面, 所以我在不明就理的情況下, "自願" 灌了一大堆 bundle 軟體而不知不覺. 當然, 我重新安裝的時後, 就不會再去選他們, 結果也就平安無事了. Vagaa 有很強的搜尋能力, 所以可以輕易地找到一些沒空去看的電影.而且它是採積分制的, 上傳愈多, 積分愈高, 就愈容易下載檔案.

不過 Vagaa 雖然容易上手, 但是它還是一直讓我怕怕的. 首先它完全不遵守上傳限制的規定. 明明我限制它 3KB/sec, 它還是會衝到 50KB/sec, 害我都不能用 browser 了. 另外一個缺點就是它的界面不能 sorting. 我想看看那個檔案快傳完了, 這樣也都做不到.尤有甚者, 不知道有那一個垃圾軟體巴在我的電腦裡面, 害我有一陣子狂當機, 只好重灌整個系統. 不過看在它效率不錯的份上, 重灌之後, 我還是不計前嫌又將就著用了它幾天. 不過它似乎有點危險性, 所以不敢介紹給大家.

前幾天我去大潤發, 看見有一本書叫做 "BT, ClubBox, P2P 下載三冠王". 就買回來研究. 也把附贈光碟裡面的軟體全部都安裝了 . 看來看去, 還是騾子比較順眼, 所以我現在裝得是 eMule. BitComet, Vagaa 都擺\到一邊去了. eMule 是 eDonkey 的後代 (騾子是驢子的後代, 真的沒話說), 據說比 eDonkey 更高明. 它有不錯的使用者界面, 搜尋能力也很強. 支援 KAD, 可以不用像 BT 一樣一定要到 Tracker server 去找東西, 可以把 tracker server 的功\能分散到每一台 client電腦的身上.如果不開 KAD,  eMule 仍然須要登入一台 server, 以便搜尋"資源", 不過即使 server 掛了 (eMule 的繁體界面就是這樣顯示的: XXX server 似乎掛了, 蠻親切的), 仍然可以上傳, 下載. 當然, 它可以 sort 各種 information, 限制了上傳速率之後, 就決不會越軌…

ClubBox 的觀念, 和一般的 P2P 不一樣. 它需要把上傳資料全部丟到 server, 然後大家在 server 上互 copy. 它的好處就是: 絕不會下載到一半, 就遇到 source 消失, 檔案從此變成半吊子的孤兒. 至於它的另類神奇用途, 我覺得可以用來緊急備份自己的 hard disk, 然後在 10 天內自己去下載回來.

Pthread 與 CThread

所謂的 P-thread 就是遵循 POSIX 規範所寫的 thread.

如果用 Pthread 去 google 上找, 這個網址算是名列前茅( https://computing.llnl.gov/tutorials/pthreads/ ) 而且它真的寫得很好. 又附上很多 source code 可以練習. 如果可以的話, 真想建議他們把 conditional variable 的那個範例改成 TCOUNT = 100, COUNT_LIMIT 改成 90 之類的. 這樣比較可以體會有一個 function 用兩個 threads 再跑, 另一個 function, 也就是第三個 thread 在苦苦等待的情況.

這個政府單位為什麼要教人家 Pthread 或是平行運算呢? 看來好像是為了教育使用者, 讓大家懂得他們的產品. 也算是用心良苦…

如果看到 CThread, 可能指得是 Thread 的 Class. 參看這個網址 (http://www.codeproject.com/KB/threads/cthread.aspx). 它有兩種表現方式, 一種是簡單的 Trivial threads, 它不支援 parent-child-thread notification, 相對也比較需要 user 注意一些危險. 另一種是 Notification threads, 這時它表現得像一個 server 或是 scheduler, 等待某些 command 進來之後再加以處理.


prevent tail call 小檔案

因為想要解決 relocation truncate 的問題, 在網路上不小心查到 prevent tail call 的資訊. 覺得還蠻有趣的.

所謂 prevent tail call 就是在 function 的最後面又 call 一個 function (tail call).

由於這個 tail call 完成之後, 唯一要做的事情就是 return 原 function,

原 function 又 return 回上一層.

因此這裡就不必囉囌地 return 兩次, 一次就讓它回老家, 這就是 prevent tail call 的精神.

有興趣的人可以去看: http://blog.chinaunix.net/43233/showart_464991.html