音樂播放器之 CD 轉成 mp3《三》上

220px-Inscribed_bamboo-slips_of_Art_of_War

一九七二年

銀雀山出土的

《孫子兵法》竹簡

孫子兵法‧軍形第四

孫子曰:昔之善戰者,先為不可勝,以待敵之可勝。不可勝在己,可勝在敵。故善戰者,能為不可勝,不能使敵之必可勝。故曰:勝可知,而不可為。

不可勝者,守也;可勝者,攻也。守則有餘,攻則不足。善守者,藏於九地之下;善攻者,動於九天之上,故能自保而全勝也。

不過眾人之所知,非善之善者也;戰勝而天下曰善,非善之善者也。故舉秋毫不為多力,見日月不為明目,聞雷霆不為聰耳。

古之所謂善戰者,勝於易勝者也。故善戰者之勝也,無智名,無勇功。故其戰勝不忒。不忒者,其所措必勝,勝已敗者也。故善戰者,立於不敗之地,而不失敵之敗也。是故勝兵先勝而後求戰,敗兵先戰而後求勝。善用兵者,修道而保法,故能為勝敗之政。

兵法:一曰度,二曰量,三曰數,四曰稱,五曰勝。地生度,度生量,量生數,數生稱,稱生勝。故勝兵若以鎰稱銖,敗兵若以銖稱鎰。勝者之戰民也,若決積水於千仞之溪者,也。

俗話說︰勝敗乃兵家常事。兵無常形,水無常勢,觀其『』,從其『』,先讓自己『不可勝』── 敵打不敗也 ── 以待敵對者所給的『可勝』之『』。如果將兵法用於『軟體開發』,那個『敵對者』就是可能的各種『錯誤』 Bugs。因此對於『原型機』上所用的各個『裝置』以及開發『軟體』,都必須要先確定它們『工作正常』。『錯誤』是可敬的對手,這個『敵友』通常比我們更了解自己的吧,所以常能『打敗』我們!因而一個有智慧的人不只能從『自己』的『錯誤中學習』,也能從『他人』的『錯誤中學習』,記取教訓,『善補』思慮不周之『』,走上『不貳過』的大道。

軟體測試』 software testing 的典型定義是:在特定的環境條件下對指定『程式』進行『種種操作』,藉以發現『程式』的『錯誤』,用此衡量它的『軟體品質』,同時對其是否能夠滿足『設計要求』進行『評估』的一套整體程序。

通常人們認為『軟體測試』比『程式設計』簡單,這或許是誤解了『善攻者』之不易,以至於會有『通過測試』,上線後卻發現『程式』不管用之事。實際上『善守者』才容易是『善攻者』,他深知『攻其所必救』與『固其所難攻』之理。

BugsLifeWallpaper800

A Bug’s Life

82_P_1364427653119

也許可以說『測試』就是用『程式』所允許的『輸入』 Input ,打敗該『程式』之『程序』 Process 之『工藝』。進一步『除錯』,就是嘗試《打開黑箱!!》,找到『原因』並且解決『錯誤』的『活動』。因此於『設計程式』之前,我們需要先『確定』那些使用在『音樂播放器』之『原型機』上的『設備』和『軟體』都『正確無誤』,以及為將來可能的『變更』預做打算。舉例來說,我們如何測試『 USB DVD 讀寫裝置』呢?從這個裝置有兩個 USB 連接頭來看,它是一種耗電量大於 5V 500mA 的裝置,所以才需要兩個『 USB 埠』來供電。其實這也是作者選擇 B+ 而不是 B 的最主要原因, B+ 有四個 USB 埠以及改良過的供電迴路設計。因此只用

lsusb
Bus 001 Device 007: ID 0411:01dc BUFFALO INC. (formerly MelCo., Inc.)

dmesg | grep sr0
[216848.833462] sr0: scsi3-mmc drive: 8x/24x writer dvd-ram cd/rw xa/form2 cdda tray
[216848.838233] sr 0:0:0:0: Attached scsi CD-ROM sr0

,雖然能夠知道 raspbian 認識這個裝置,並不代表它就能夠正常工作。然而確定一個『裝置』或『系統』的【電源需求】,一般需要長時間以及各種操作樣態下的『消耗功率』量測。事實這是十分困難而且麻煩的事情,所以人們多半僅參考產品之『功率規格』來『確認』這件事。有時當系統發生『時好時壞』的狀況時,這個【電源問題】就成了最難診斷的『疑難』之一,更不要講那些用『電池』供電的系統的了。

280_P_1399090698640
Adafruit USB Power Gauge Mini-Kit

139_P_1373091636963
USB TTL RS232 轉換器

後來作者發現 Adafruit 有一款 TTL RS232 界面之迷你的『 USB 埠傳輸功率量測』裝置,如果再加上『USB TTL RS232 轉換器』可以構成一套既便宜又好用的『功率量測』系統。假使輔之以『測試軟體』,可以『自動紀錄』任何一個『 USB 裝置』在各種『工作樣態』下的『功率消耗』。由於它的『量測範圍』可以及於『5V 2A』,因此即使一整個『樹莓派系統』的『消耗功率』大體也可以這麼度量。再者,這個裝置的『資料』輸出格式十分簡單易讀,也就很容易寫『程式』來作『量測數據』處理。在此列出兩種『 USB DVD 讀寫裝置』之『操作狀態』下的消耗功率︰

裝置自起始到閒置 StandBy 量測
cat /dev/ttyUSB0

V: 5.1 I: 491 mA Watts: 2.5

V: 5.1 I: 533 mA Watts: 2.7

V: 5.1 I: 463 mA Watts: 2.4

V: 5.1 I: 521 mA Watts: 2.7

V: 5.1 I: 485 mA Watts: 2.5

V: 5.1 I: 483 mA Watts: 2.5

V: 5.1 I: 479 mA Watts: 2.5

V: 5.1 I: 507 mA Watts: 2.6

V: 5.1 I: 473 mA Watts: 2.4

V: 5.1 I: 515 mA Watts: 2.6

V: 5.1 I: 471 mA Watts: 2.4

V: 5.1 I: 454 mA Watts: 2.3

V: 5.2 I: 351 mA Watts: 1.8

V: 5.3 I: 152 mA Watts: 0.8

V: 5.3 I: 155 mA Watts: 0.8

V: 5.3 I: 148 mA Watts: 0.8

V: 5.3 I: 156 mA Watts: 0.8

V: 5.3 I: 150 mA Watts: 0.8

V: 5.2 I: 152 mA Watts: 0.8

V: 5.3 I: 150 mA Watts: 0.8

V: 5.3 I: 156 mA Watts: 0.8

V: 5.3 I: 146 mA Watts: 0.8

V: 5.3 I: 158 mA Watts: 0.8

V: 5.3 I: 160 mA Watts: 0.8

V: 5.3 I: 154 mA Watts: 0.8

 

裝置從閒置到播放 CD 量測
cat /dev/ttyUSB0

V: 5.3 I: 155 mA Watts: 0.8

V: 5.3 I: 156 mA Watts: 0.8

V: 5.3 I: 146 mA Watts: 0.8

V: 5.3 I: 153 mA Watts: 0.8

V: 5.1 I: 441 mA Watts: 2.2

V: 4.9 I: 826 mA Watts: 4.0

V: 5.1 I: 445 mA Watts: 2.3

V: 5.1 I: 493 mA Watts: 2.5

V: 5.1 I: 461 mA Watts: 2.4

V: 4.9 I: 461 mA Watts: 2.3

V: 5.1 I: 469 mA Watts: 2.4

V: 5.1 I: 493 mA Watts: 2.5

V: 4.8 I: 971 mA Watts: 4.7

V: 4.8 I: 1022 mA Watts: 4.9

V: 4.8 I: 1022 mA Watts: 5.0

V: 5.0 I: 749 mA Watts: 3.8

V: 4.9 I: 814 mA Watts: 4.0

V: 4.9 I: 837 mA Watts: 4.1

V: 4.9 I: 761 mA Watts: 3.8

V: 5.0 I: 755 mA Watts: 3.7

V: 5.0 I: 821 mA Watts: 4.1

V: 4.9 I: 749 mA Watts: 3.7

V: 5.0 I: 769 mA Watts: 3.8

V: 4.9 I: 797 mA Watts: 3.9

V: 5.0 I: 769 mA Watts: 3.8

V: 4.9 I: 799 mA Watts: 3.9

V: 4.9 I: 814 mA Watts: 4.0

V: 5.0 I: 785 mA Watts: 3.9

V: 5.0 I: 761 mA Watts: 3.8

V: 5.0 I: 701 mA Watts: 3.5

V: 4.9 I: 751 mA Watts: 3.7

V: 4.9 I: 755 mA Watts: 3.7

V: 5.0 I: 725 mA Watts: 3.6

V: 5.0 I: 784 mA Watts: 3.9

V: 4.9 I: 705 mA Watts: 3.5

V: 5.0 I: 769 mA Watts: 3.8

V: 4.9 I: 763 mA Watts: 3.8

V: 4.9 I: 717 mA Watts: 3.5

V: 4.9 I: 804 mA Watts: 4.0

V: 5.0 I: 715 mA Watts: 3.6

V: 4.9 I: 811 mA Watts: 4.0

V: 4.9 I: 789 mA Watts: 3.9

由此我們可以知道,這一個『 USB DVD 讀寫裝置』的消耗功率『變化很大』,假使思考『可靠性設計』的問題,我們需要明白『最大瞬間功率』 ── 紅色數據 ── 的需求,否則可能的系統『不穩定性』就會暗藏其中,日後當系統出狀況時,也許很難追查『原因』。讀者自當可以發現 『 USB 埠傳輸功率量測』裝置的『資料輸出格式』真很『簡潔清楚』的吧!

 

─── 待續