大二上的寒假,受老師的邀請,去到東莞實習了10天。雖然不是第一次去,但是這次的體會和上次有了很大的不同。這篇文章本來想從東莞回來就寫了,但是一直拖到現在才寫。在東莞,我工作位置的旁邊是一個約27歲的大學生,他的職位大概是嵌入式工程師,他每天都在使用上了ucos2的STM32芯片進行編程。剛好我在學ARM9+LINUX,于是有時候我們也私下討論了一下STM32和ARM9的那些事兒。
STM32是這幾年很火的,有哈佛架構,性價比高,開發使用的函數庫齊全等優點,這個芯片我本來也想在大一下的時候買塊開發板來學,不過后來項目需要,所以學了ARM9。
在講之前,問一個問題。假設有這樣的一個項目,讓你做一個數字示波器的控制和顯示部分的模塊,而采集模塊和保護由其他芯片完成。問你應該采用ARM9還是STM32?(本文的ARM9代表馮諾依曼架構的芯片,而STM32代表的是哈佛架構的芯片)
個人覺得可能用STM32會實際很多。主要原因如下:
1. 芯片成本高。STM32的芯片大概十幾元一片,而且像單片機一樣,幾乎一塊芯片就可以做出一個最小系統。對比ARM9,不但要買相對比較貴的ARM9芯片,還要買上Nand flash和nor flash才能做出最小系統。TQ2440的核心板淘寶就買到200多了。
2. 做PCB的復雜。據說采用ARM9芯片的TQ2440的開發板中,它的最小系統用到6層板。據說做6層板,一次開模費就要1K多了。而且假如不按照TQ2440,選用自己的硬件方案來做最小系統,不知道又要畫多少次板才行。
3. 對于項目,假如采用普通的界面(如儀器類界面)加普通的外設(如按鍵,串口等),真的要上Linux嗎?上Linux系統的確會增加不少難度。從驅動編寫,到Qt程序編寫,再到系統移植等,從內核到應用層,這對于不少人來說,的確有不少難度。假如功夫不到家,還可能開發周期延長,甚至做出來的產品還不如用STM32做得好。而這方面STM32雖然是有點瑕疵,但是也做得不錯。
4. 采用ARM9比STM32需要更多的人手。對于ARM9,假設上了Linux系統,又要做驅動,又要做界面,還要搞系統移植,每一項都是挺有挑戰性的。大型項目用STM32可能就做不來了,但是小型項目,STM32的確不需要太多人手就能完成。而且,聘請一個嵌入式Linux的工程師也是價格不菲的。
以上就是我覺得ARM9的不足之處了。從上面看出來,假如用ARM9去開發一個用51單片機,或者用STM32就能完成的項目,真的有點大材小用了。所以,我覺得學ARM9,就應該研究一些STM32等哈佛架構的芯片無法比擬的方向。哈哈,假如別人用STM32或者AVR甚至51就能完成大部分功能,要你的ARM9干什么啊。
學ARM9,其實好多時間就是在學Linux。因為Linux這個操作系統真的很強大了,比ucos要豐富得多。
因此,下面我覺得學ARM9可以研究的一些方向:
1. 網絡通信類。眾所周知,世界上絕大部分的超級計算機和服務器都是采用Linux的。這歸功于Linux優秀的網絡棧。Linux的網絡棧的出錯幾率小,支持的網絡協議豐富。通信協議從互聯網的到如今流行的wifi,藍牙等都能夠支持。網絡這方面是STM32等哈佛架構的單片機無法比擬的。
2. 文件管理類。Linux有虛擬文件系統,支持絕大部分的文件系統,可以對磁盤里面的文件進行很好的管理。因此假如一些如MP4,PDA等需要對多文件操作的項目,更多會采用ARM9。
3. 絢麗的多界面類(或游戲機類)。普通的界面(如示波器等),用STM32是可以完成的。但是對于復雜的界面,用Linux就好多了。在Linux上,可以用Qt等軟件制作特殊的絢麗的界面。此外,太多的界面也會讓STM32吃不消。多界面會使程序的空間增大得很快,對于Linux那樣,采用虛擬內存管理,1G的程序可以在只有128M的物理內存的機器上跑。但是STM32就不行了,沒有MMU就沒有虛擬內存的功能(暫時看來是沒有MMU),假如128M的物理內存的機器就只能跑不超過128M的程序。況且,STM32有128M的內存嗎?
4. 多種芯片的支持。Linux的可移植性好,假如一個項目需要換另外一種CPU,只要移植好Linux和相應的驅動,應用層基本不用改。但是移植Linux也是不容易的。
ARM9最大的優勢就是可以跑Linux系統。假如能夠真正發揮出Linux系統的優勢,真的能讓STM32等哈佛架構的單片機感到望塵莫及。但是STM32等哈佛架構的芯片,對于大部分中小型普通類控制項目,也是很有優勢的。
既然選擇了,就要風雨兼程。選擇了STM32,就要挖掘STM32獨特的優勢,學精它;選擇了ARM9,就要發揮出嵌入式Linux的優勢。學東西最怕就是見到一樣好就學一樣,祝大家能夠放下浮躁的心,學到自己喜歡的東西。學精一門總比樣樣都學而學而不精要好。
|