2010年5月8日 星期六

一個A/D 的系統應用問題(續篇-精進版)

好吧...要做就要作徹底一點---直接用組合語言改寫此一一階濾波副程式。

至於實際真正的找一個應用結果,改天再寫吧!

用組合語言寫?大概就剩下我們這些LKK 的人會去想寫了吧,

人家年輕人就是高級的菁英份子,他們都很會算,"幹嘛去浪費這種時間?!"

"我還不如利用這個時間去結交一些『有力人士』...或找好關係,請大陸人寫就好了!"

"真笨~浪費這種精神,怎麼可以賺到大錢呢?!"

是啊...您真的就比較聰明,我們不是菁英份子,我們就比較笨?!

您們只要動動嘴吧就好了...是不是您們在家裡也是像工作上一樣:動動嘴吧就好了?!

只要動動嘴吧~小孩子就會乖乖聽話?!您老婆就會把您服侍的服服貼貼的呢?!

道理是一樣的啦...所以,過去有些人就跟我說過:如果一個人他在工作上的表現如何?!

大概我們也可以推論到他的家庭生活也是大概什麼態度?!您自己想一想~是不是有點道理?!

----

好吧,我們就來看將程式改寫成組合語言之後的結果吧!

圖一

從圖上我們可以發現改用組合語言改寫後...順便把此一副程式直接獨立出來成一單一函數庫,

(左邊那個LAGFILTER.A51...喔?!怎麼把程式改寫成組語?還有怎麼在Keil C 裡套用組語?!

您也不用留言來問我了...因為我以前也沒問過人,我也是自己反覆做實驗Try 出來的!)

我們可以發現:副程式函數只剩下 33H ( 51 Bytes)...

這樣子,會更容易的整合到許多小容量的MCU 應用中了。

也不一定是8051 啊!只要您原理懂,懂得推導數學運算原理的話,移植到任何一種MCU 都可以的。

要不然原來呼叫組譯器的程式庫的話。動不動就得要  1.5 KBytes 的函數庫當然就得買大容量的MCU。

有誰會受得了...重要的是:這個函數也只不過只作一件運算式而已,何必要浪費這麼多程式容量呢?!

但是又很討厭,這一類的副程式又是常常會用到,尤其是有帶那一種A/D 的MCU。

這一類的MCU 也常常支援2K ~4K ...頂多8 K 的程式容量而已,您光一個副程式就佔去這麼多?

有誰受得了...也不要說您是那一種號稱多核心的FxxA 也沒啥用...寫韌體程式就是如此!

搞大容量MCU 賣就不一定比較好賣...但搞小容量的,您最好還是找到功力好一點的工程師吧!

(PS:像是FxxA 或Microchip 的PIC...都是那種所謂14 或16 bit 指令集MCU,

那應該對於這種程式容量的限制是更斤斤計較了吧!...)

好吧...我們再來看改過之後的程式效能:

(圖二)
 
程式一開始的時間點是一樣的:0.10714555 Sec

(圖三)

程式運算後的時間點為:0.10714816 Sec ...從原來的 4.25 uSec~再縮短為 2.61 uSec。

為原來呼叫程式庫作法的30.9 uSec 之 11.84 倍了----已經整整相差一個Order 了。

我們再來看程式執行結果:這回我們就反過來看負的方向 :新讀入值為 20

(圖四)

我們當然可以發現他是往 20 Volts 方向遞減的。

(圖五)

兩者之間都是相差 10 Volts 的方式套用此一副程式,所以跟上回那個  40 Volts 的結果是一樣的。

一樣在 150 與170 次迭代之後,就可以求得近似值了。驗證完畢!

程式不管是對於新值增加或減少情況,都可以套用的。--自己寫副程式就得考慮這一個因素!

-----------------------------------
當然啊...對於越有名的組譯器,他所能支援的函數庫就越多啊。

所以像這一種自然對數的運算式,Keil C 當然也有支援啊,

那我們來看如果我們直接套用這一組數學函數庫的話,他的結果如何?!

下圖是 Keil C 使用說明書的範例:(您是不是一開始就想到這一種作法?!)

(圖六)

您看,也是多簡單啊...那事實上真的有那麼簡單嗎?!...

我們加入程式組譯後的結果如何?

(圖七)

我們發現:他本來就是一種浮點運算的數學函數啊,所以程式變成浮點運算也不意外。

(圖八)

只是很好笑的是:他不但增加了基本副程式庫之外,他還多掛了一組exp() 函數庫:

程式容量還不小耶:9AH....剛好可以讓我們多寫三套副程式!哈~哈~

再加上原來從 106H -->682 H (57CH) ----剛好多增加近 1.6KBytes...

如果您是用那種2K Bytes MCU ...剛好Initialize 之後,呼叫此函數之後,程式就爆了!

難怪大家就只有使用那一種讀十次,然後除以十的平均作法作法!...程式好像小一點吧!

下回我Show 那個應用時,我原本也是用這種方法,但就是有發生一些問題現象,

等下回再說明吧!

(PS:因為FxxA 或是Microchip PIC 那種長指令的MCU 來說,他們就比較不會賣大容量的MCU ,

因為指令長度的關係...程式容量越大,他們與這種8051 一樣的容量的MCU的價差就越大了!

因為程式容量面積比人家大(他們的程式容量是用Word 計算的!...

至少也會大1.5倍吧!所以他們主力產品都是8K以下的!越大的容量與8051 的相差值就越大了<

當然啊...這一種MCU 的特色也沒辦法直接支援大容量的---他們是要切BANK 的啊!

還有一點就是:因為這些長指令的MCU (RISC)也比較少支援乘法或是複雜指令,

所以,如果套副程式的函數庫來說:他們可能比KEIL C這一種程式庫還要長很多!)

--------------------------
說實在的...如果您寫韌體程式,喜歡套用組譯器的函數庫,沒有說您的作法不對。

您高興就好,如果您老闆更爽的話,那更好。皆大歡喜!

但我要說的是:不只是社會的貧富差距趨勢是往兩極化走,連科技界也是的。

尤其是單晶片MCU 這個系統應用產品,我們可以看到:您要嘛就用那種  32 bits MCU ,

大大的容量讓您好好的塞個Embedded System ,讓您的程式寫到爆肝。

要不然,您就得乖乖買那一種程式容量小小的只有幾K 的那一種MCU 。

尤其是國內那些MCU IC 設計公司最喜歡搞的...(其實,開這個頭是 microchip 的PIC)。

好了啊...現在問題來了啊...我們寫一些小程式又不能老是寫那一種純I/O ,

跑個左右跑的LED 跑馬燈...現在要做的東西,也得要講究一下所謂機電整合啊,

或是比較有水準的東西,尤其是現在許多學術論文都跟您講那麼多理論了,

結果:您還是要用十根手指頭硬去寫這個東西...老闆又擺明了只能用那個小小的MCU 。

那您說該怎麼辦?! ...這下好了,滿街都是一大堆會寫韌體程式的人,不管是念那個科系的,

職訓局上一上就出來寫程式了,用C語言寫,就拼命的套用函數程式庫...

大家都會說印度人很會寫程式,...我們也知道印度人的數學很好。

但總覺得這兩者之間到底有什麼關係?!

老闆不懂...連政府官員也不懂,那您說我們國內如何發展軟體工業呢?!

有些學校老師在教工程數學時,也沒有要求學生,或是懂得這些之間的道理!

那只好們大家就是一樣的喜歡用十根手指頭...1.2.3.4....一上機一路往下寫。

容量不夠?!要嘛就再做大容量的MCU ,不好賣?!(成本貴)...那乾脆自己寫應用產品算了。

前兩天有位朋友送我一台MP3 播放器,號稱是新竹某IC 設計公司自己作的,

自己做了五萬台出來賣...賣到現在賣了四萬台,...模具回本了,但又不好作~就又收了!

但純賣IC 又很難作~太多人搞了,大家又殺價,您知道嗎~現在一棵MP3 IC 剩下多少錢?!

答案是 :4.5 RMB ...折合台幣不到 20 元 ,如果套上面的那個五萬台...哈~哈~剛好一百萬元

還不夠付光罩費。....您也不要意外,連現在大M也都有作完整系統應用產品的計畫..)

所以,大家不要笑...我們都會笑說:只有傳統產業才有所謂的中小企業,那一種小小幾個人的小公司。

如果,照這種趨勢往下走的話,不用幾年,這種搞IC 設計或是所謂高科技業,也要準備轉型成這一種

小小幾個人的中小企業了。否則,您要怎麼玩?! ...

所以啦...如果您已經不得已,非得要用這種小小的容量的MCU 時,您還是多在數學基礎多下點功夫。

因為程式要長大很容易,但是要縮小是很難、很艱鉅的工作。

只要您能把您常用的副程式或函數寫得很小~很有效率----這一點是永遠不會錯的道理!

-----------------------------


PS :順便補充一下:您覺得我在提這一件所謂數學推導延伸的觀念只是單純的系統應用觀念嗎?!

您想一想:現在IC 設計的 EDA  Tools 這麼方便了 ....您說:一樣的一個應用函數庫,

您用了 1.5 K Bytes 搞了一個副程式,而人家是用 50 Bytes !

您說:當這一個功能要轉換成IC 硬體回路時,您覺得哪一韌體程式比較有機會轉成為硬體加速器呢?!

那您覺得呢?!到底是系統應用引導IC 設計觀念呢?!還是彼此之間還是有一些某種關係存在呢?!

一樣的道理...如果您是搞IC 設計的,也是用那個VHDL 或是Verilog 寫程式,也是一樣,

用十根手指頭設計IC 的話...講難聽一點,您也沒比較厲害,還比我們搞系統應用的還可憐,

因為我們可以買大一點容量的MCU...但您的IC 可能大到貴得沒人願意買了!是不是?!

所以,不管您是做哪一種設計?!只要是學理工科的~人家學校都教您工程數學是沒有錯的!

您說:對不對啊?!

( Eric 老師,您說呢?!

--------------

1. 一個A/D 的系統應用問題

2.一個A/D 的系統應用問題(續篇-實驗結果)

4.一個A/D 的系統應用問題(續篇-範例版)

 

7 則留言:

  1. 您說得對極了!
    記得我帶學生參加國際競賽時,有一位先生常是冠軍的得主,但看他的MCU,比起同樣來自他們國家的某些選手而言,實在不算高檔,但卻常能擊敗那一些使用高檔設備的人,實在令人佩服。
    看您的文章和看那一位先生的能耐,對我而言都是類似的心情。
    對我的學生而言,看到一個典範似乎比很多例子來得有效。當然前提是他不能放棄才行!
    謝謝您的分享!加油!

    回覆刪除
  2. 莫聽穿林打葉聲,何妨吟嘯且徐行, 竹杖芒鞋輕勝馬,誰怕?一簑烟雨任平生。

    學子都要馬, 草鞋會穿不慣, 不要說徒步了.

    能施行先生提及的工程數學基本功, 到達行竹杖芒鞋輕勝馬的境界, 只有少數人在相當經歷後才有領會, 其餘大部分的都只會混飯吃. 最近就看到一個電子系畢業的大公司的不知什麼什麼經理, 拿著兩個2.5"的硬碟要求退貨, 指著其中一個上面 5V 0.5A的字說:  "這個硬碟出貨批就有問題, 因為插上去沒反應", 又比照另外一個的5V 1.5A一個說 :" 這個是好的, 寫的是1.5伏, 你們是不是該接受整批退貨呢?". 面子的問題, 雖然最後不用退貨, 但是還得很委婉地為他示範一次, 先格式化所謂得OEM硬碟. 原因是怪他的下屬沒水準, 胡亂報告, 因為 [標準1.5伏硬碟] 變成低階的 [0.5伏硬碟] 後, 是需要 [額外的手續] 才能用. 這個是一個極端的台灣經理的例子. :))

    回覆刪除
    回覆
    1. "莫聽穿林打葉聲,何妨吟嘯且徐行, 竹杖芒鞋輕勝馬,一簑烟雨任平生。"
      不錯的意境...I like it !! 謝謝!
      至於這種什麼什麼經理的...或許是大公司呆久了,已經學會那一套只動嘴砲的好功夫。Fine 很好...如果他的這種態度可以引領我們台灣科技業走向全世界Top One 的境界的話。那我們也給他好好推崇一下。否則...可以預見的是:一定是越來越向下沈淪...您以為人家會真的尊重您的專業,然後心甘情願的幫您服務嗎?!
      人家心裡想的是:您這樣子的『奧客』...下回就多準備多收您一些預備的維修服務費,因為人家就是會看不起您的不專業而欺負您啊...然後他們老闆就不知不覺得~我的公司怎麼越來越難做生意啊?!...因為他不知道他們公司已經開始養一大堆只會動嘴砲的人了。 :))

      ----已經看太多這種號稱高科技公司的人才培育計畫啊...

      刪除
  3. 台灣很少人會像日本人花10,20年鑽研同一件學問,更不用說一堆人普遍的觀念是到了某個年紀出張嘴就好了,如果還在coding、焊板子會被一堆人笑(事實上這正是很多台灣人見識淺薄之處)

    偷偷爆一下Chamer的料,他老人家一把年紀還能抱著notebook把VC/MFC學會(好像也只花了1年左右),此等精神台灣就很少人有了,更不用說他原本就還精通MCU firmware、電路設計,數學推演的功力也是RD中少有,像他這麼變態...不!厲害的人可以說是台灣電子業的奇葩XD

    回覆刪除
    回覆
    1. 兩個問題,兩個答案。
      第一個問題:答案很簡單,因為台灣高科技的老闆都不是很在乎永續經營的問題,所以當培養會發現有可用之才之後,就想急著把這個員工榨乾~因為很擔心改天哪一不小心,員工會跳槽到另一家對手公司,等於幫別人培養人才,所以,先升他的級職,讓他只動動嘴吧...久了就廢了,屆時就隨員工愛待不待的~已經不在乎了。
      最近聽到最八卦的事是:昔日同事在原來公司待不下了~透過關係去找了知名某大IC 設計公司,想談團對跳槽之事,這某大IC設計公司也蠻有誠意的,知道這幾位Key Men 的重要性,所以也很乾脆,就開個天價,跟這幾位Key Men 說:您們這幾位,我就開個條件,您們就過來上班吧...至於那個團隊的事,您們就忘了吧!您們想做其他什麼產品都可以啊!---
      一副擺明了,就是要買您們幾位過來廢武功了。當然人家Key Men 也不願意啊。
      因為已經之前有同事過去上班幾年了,人家公司就是擺明用股票綁死您,然後把您當工程師用,把您給廢了。這是真實案例,這位優秀台清交的主管,在此某家大公司待沒兩年,被當工程師用,幾乎已經武功全廢了,已經看不出昔日意氣風發的宏大志向了。又過了幾年,公司態度很明顯的就是:您什麼時候想走啊?!我應該不會留您了~反正您也不會搞手機產品啊! :))

      -----
      第二個問題的答案是:我抱著Notebook 學VC/MFC 是學半年啊...因為人家寫軟體的人跟我說:要學會MFC 至少要花半年時間才可以,後來也是誤打誤撞的幫忙寫了一代MCU 的組譯開發工具軟體,才有機會把這個東西搞定的啦!---我們的想法其實也很簡單:創業維艱,我們可以貢獻心力的,我們就全力以赴,更何況要把上層MCU 組譯器,開發平台再到USB 連線的DebugTool 及燒錄器搞定...至少要養個三、四個工程師才行...我們就體諒老闆創業維艱,就一肩扛下了。---對我來說,也沒賺到什麼錢,只賺到一個寶貴經驗而已。 :)

      刪除
  4. 咦?被當工程師用是啥意思?... :-O

    回覆刪除
    回覆
    1. 藉此順便補充一下:現在要在大陸要靠說台灣有錢才能搞生意的時代已經過去了,
      人家現在大陸比台灣有錢了,五一連假有好友回台,擺明說:人家展訊的手機晶片有大陸國家政策與經濟支持,人家就算虧錢也會切市場的。所以啦...現在台灣要切大陸市場,就像當年歐美日國家對台灣一樣:要靠的是真槍實彈,比的就是技術實力了!...
      ---
      至於,什麼當工程師?!就是幹一般基層工程師啊...叫您去大陸出差您就去啊,您也不用有什麼自己的想法,反正公司原來有原來的經營階層,原來是我們單位處長人選的大熱門...去那邊幹了好幾年,就一直掛個沒啥意義的副理職稱...副理是好聽啊...就放您一個人單兵,自己看得辦!反正您當初也是股票條件談好的~一個在簡單不過的人生生意買賣啊!
      ---那您一定又會問我:那他幹嘛還要呆?!...其他的幾乎不出三年就全陣亡了,他卻因為是台清交的菁英份子,當然也面子掛不住啊,所以就一直撐著吧!雖然常常找我們談他的未來的偉大夢想,但我們幾位老戰友已經心知肚明的告訴他說:您的人生戰場應該就到此了吧!---人家公司擺明就是叫您不要想了,這幾年也不要到別的公司上班了吧!

      刪除