2013年2月21日 星期四

STM32系列開始支援SDRAM

ST網站改版,出現了新的型號STM32F429/439,支援TFT及SDRAM。

顯然是要做影像處理的。

再不出Bee都開始考慮轉廠商了。

不過只有網頁型號,沒有多少資料。

這樣Bee就再等數月再看看了。

2013年2月10日 星期日

從PC看MCU發展

PC也是從8位元一路走到64位元。從使用狀況可以推得MCU使用變革。


 


最早的PC是從8位元的6502開始,當時資源少,組合語言當道。


 


再來進入808616位元PCC語言開始使用。DOS是最早的作業系統,基本上是單工的時代。資料用電腦處理開始流行。


 


到了80386,多工作業系統開始使用。PC進入多元發展,主因是32位元已具有處理絶大部分資料的能力。


 


再來64位元時代開始,一開始還不知要如何用,因為作業系統不支援,應用程式無法發展。可是一但開始支援,大型資料程式就開始發展。


 


 


對應於MCU


 


8位元MCU是基本型,以目前來看,價格可能是生存唯一的方法。在這個前題下,只能算是可程式化的智慧型裝置。


 


16位元MCU就是可以處理資料的基本型,有一段時間大約是DSP的領域。基本應用也是單工來得多。


 


32位元MCU成熟型。同PC一樣,多工的需求來了,也就是RTOS引入各家爭鳴的時代。如同Windows 3.1OS2的時代一樣。在這個時代要不要使用多工作業系統也引發工程師之間的爭議。但時代的需求是擋不住的。


目前就是處在32位元MCU大量出現的時代。


 


64位元MCU,應是大量資料處理才會有應用。就觀察何時會開始。


 


 


MCUPC介面不同,只能由資料的使用量來推估使用領域的變化。



MCU程式設計技巧:示波器的使用

有使用到ADC功能時,示波器是不可缺少的儀器。


Bee確實看過許多MCU工程師不會用,原因是由軟體轉來的工程師。


不幸的是,信號處理不是單純的軟體。一定要能看到信號才能寫合適的程式。


所以MCU工程師,示波器還是學會如何操作會好些。


 


除了一般看信號外,好一點的數位示波器可以儲存波型資料由EXCEL來抓取使用。


Bee在一個案例中,就是用數位示波器上所抓取來的資料在EXCEL中就設計出用來取出所要的信號的方法。連程式都還沒有寫就先找出方法,是可以強化程式適應力。


 


ADC程式設計有一項難處,就是RAM少,不可能將數秒的資料皆存下來,反應快的系統連要使用通信傳輸出來都會是困難。


所以使用數位示波器這一類的外部記錄器將變得很重要。


只要MCU提供一個啟動信號讓數位示波器開始啟動抓取資料,然後儲存下來做分析用,就算是沒有多少RAMMCU也不用特別去做儲存。再以數位示波器的資料去設計出對應方法就行了。



MCU程式設計技巧:LA的使用

LA:邏輯分析儀


現在低價位USB LA已經很便宜了。


只要是寫MCU通信,都應會使用LA


雖然Bee也看過有軟體人寫通信記錄器,但LA除了解通信格式外,另一個是有時間記錄。


有了時間記錄,才知道反應時間是否合理。


 


這個技巧並不是新的,在專業LA就有出現。


但因時代不同,已是人人可以容易取得的工具。


有了新的觀察工具,程式開發就方便多了。



MCU程式設計技巧:中斷及FIFO的使用

能否有效使用中斷,將是MCU程式是否進入專業領域的關鍵。並不是會使用就可以了,而是能否了解工作的時效性並做工作切割。


這也是Bee將中斷及FIFO放在一起的原因。


 


在一個具有回授性系統上做PID控制。


因為回授控制具有時間敏感度,故不允許時間上的失誤。


其做法是將命令生成做成FIFO,只要FIFO有空間,就填入新的命令。而中斷則只要負責PID回授的計算方程式,以確保用最短時間內做出反應。


 


類似的工作也出現在通信上面。


應用層程式總是希望通信可以將整個句子一次輸出。但MCU的世界並不是這樣,通信每出一個字都是要花時間的。可以的做法也是使用FIFO,將整個句子用FIFO存起來,再利用中斷接續中間的工作。


 


能有效的將工作切割、控制好中斷的時效性,那MCU程式設計就開始進入專業等級。



MCU程式設計技巧:Delay的使用

在有作業系統的系統上,Delay不是問題,只要呼叫對的函式就對了。


程式也很好寫,樣子大概就是以下程式:


 


void Task(void)


{


        for(;;)


        {


                delay(1);


                // do something


        }


}


只要控制delay的參數,就可以控制執行頻率。


 


 


但在無作業系統的MCU上,這可是嚴重的問題。Bee也以如何處理這個問題來看工程師的MCU程式設計的專業程度。


在許多入門書可以看到delay是這樣寫的:


void delay(unsigned int n)


{


        while(n--);


}


若是這樣用,就是MCU新鮮人。


因為做為產品,不會只有一項功能,老闆隨時都會加功能,一但功能修改,就會調不完。


有一個變形方法解決在不同MCU上執行的效率差,就是利用Watch Dog計時器去取代delay()中的參數。利用檢查參數值做為時間計數。


另一個問題是:一但在執行delay()其他工作就停擺。


這樣做出來的產品,往往有一個問題,只會做單工,不會處理多重工作。產品特性很挑時序,只能在對的時間送入對的信號,使產品不具適應性。


 


 


專業一點的作法,會使用一個Timer做為計時器去改變變數的值,做為計時的檢知。


int delay=DELAY_TIME;


void main(void)


{


        while(1)


        {


                if(delay == 0)


                {


                        // do something


                        delay=DELAY_TIME;


                }


        }


}


 


void Timer_Interrupt(void)


{


        if(delay) delay--;


}


這樣做的效果不錯,只是程式有點不太好寫。但可以使不同工作之間較不相互干擾。不過每次加入新的計時器,又要去改寫中斷程式。


這樣做其產品對於多重工作具有近似的反應時間,唯一的問題是工程師要負擔中斷及其他資源管理,也就是無法多人一起開發程式。另外閱讀性稍差,交接需要多花時間去追蹤變數功能。



MCU程式設計技巧:除錯器之使用

JTAG的使用


這是基本技巧,但看到有人不用就寫了MCU數年,還真是驚訝。


雖然在具回授性系統上並不是很好用,但在程式邏輯除錯還是很好用。


不用的結果,就是找不到人可以教。


Bee待過二家公司,都是使用無JTAGICE的系統,人員訓練皆難以進行。


主因是程式技術也是由除錯來的,沒有好的觀察器,又如何知高階程式是如何運作。


另外一個問題是,程式發展久了,往往有些特異,就是程式如何運作連設計者也不知,是硬試出來的,更不用說下一個交接者要如何看懂了。


這種特異程式多了,系統往往有怪毛病,造成產品評價不好,也無人可解。


 


Simulator的使用


這是好的工具才會有的。但因為可用的地方不多,大部分人玩了一下大概不會再玩。


其實會使用還是可以好好使用。


Bee就用在Boot Loader的開發上。


Simulator是無法模擬在現實電路板上的狀況。


但可以自由載入記憶體資料為其特性,也就是可以裝載大量資料,然後看它如何運作。


Bee就用在Boot Loader載入應用程式的二進制資料,看它的通信寫入是否正常。


因為Boot Loader也不會開太多裝置,所以只用Simulator就寫玩大半。


而且用Simulator也可以將自己的機器碼抓下來,正好做測試用資料。