回覆列表
  • 1 # 使用者5643051594803

    從大一的時候在大學圖書館看到關於AVR微控制器的書籍,到參加競賽、工作,我和微控制器已經打了六七年的交道了吧。其間我都是在做產品的軟體開發,與硬體工程師合作,根據需求選擇合適的微控制器型號和外圍器件,完成程式碼編寫。積累了一點對微控制器選型、特點的認識。

    所以這篇想談談關於微控制器特點和選型。

    微控制器

    MCU,微處理器,他有很多名字,但是我還是喜歡叫他微控制器,因為他就是單單的一片,沒什麼其他的模組,一片裡面就集成了CPU,RAM、ROM等,馮·諾依曼必有的結構單元。只要外部給他晶振,給他電源,他就能像計算機一樣工作起來。高階一點的微控制器內部RC就能起振,外部晶振都可以免去,只要外部給個穩定的3.3V,就可以工作。

    微控制器裝置做的可以有多小?看到老外玩的蚊子飛機,就知道了,大學的時候非常的震驚,也是這樣,讓我對飛行器著迷不已。

    聽過一個趣聞,就是為什麼一個位元組是8個BIT,而不是12個?據說是最早的晶片,因為工藝限制了,只能有八個引腳,想要更多的引腳怎麼辦,多用幾個八腳晶片就好了,於是1個位元組對應一個晶片,一個晶片的八個腳對應八個位元就順理成章了。

    計算機的技術從來都是往兩個方向發展的,一個是計算速度快,資源多,同時可處理的事件多,相對應的,功耗大,體積大。一個就是計算速度慢,資源少,但是價格低廉,體積小,功耗低。

    前者所發展而來的就是咱們的計算機,WINDOWS\LINUX作業系統,後者就是微控制器系統了,各種嵌入式作業系統。手機的範疇有點迷了,我還是願意把手機放在微控制器系統這個層面來看。

    在從業人數規模來看,前者發展出來的計算機,軟體程式設計帶動了多少人的就業,我們把這從事這職業的人叫做“碼農”,他們的工作就是在前人對計算機一層一層又一層的封裝下,進行針對應用的開發。頂層軟體層的開發需要,促成JAVA、C#、PYTHON這樣的語言出現,這些語言本身不涉及底層,只是呼叫底層的介面函式。顯而易見的,想透過JAVA讓計算機主機板發出一個方波訊號出來,是何等困難,但對應的是用JAVA在通用電腦螢幕上顯示一串數字是何等的簡單。

    後者微控制器,開發的人數就不如通用計算機了,微控制器資源少,可用的“輪子”少,啥玩意都需要自己自力更生。能快速的發出方波,如果有DDS晶片的話,可以調製出正弦波,等等通用主機模組做不到的功能。更加的自定義!缺陷的話,顯而易見的,想透過微控制器在螢幕上顯示一串HELLO WORLD字元,那得是進階的人才能做到的咯!

    所以微控制器軟體開發不是“純軟體”開發,也需要對硬體有相當的學習,對數位電路、類比電路也要了解才行。這一行門檻高,很難速成,一定是慢慢積累~

    是否“裸奔”

    裸奔,顧名思義就是微控制器穿不穿衣服?衣服是啥,作業系統唄!

    選微控制器的時候,根據需求不同,首先要選此微控制器是否需要跑作業系統,還是裸奔。

    · 當需要用複雜協議棧的時候,作業系統變得非常有用。

    例如,希望咱們的微控制器可以連網際網路,透過網線聯網,或者透過WIFI訊號聯網,那麼多半需要執行作業系統,如果不跑作業系統也行,但是工作量很大,不穩定。

    工程師需要比方案,咱們比比方案。

    1 、開源的RTOS幾乎都提供TCP/IP協議棧,社群的開原始碼經過很多人,很多年的穩定執行。

    2、自己寫TCP/IP協議棧,嵌入到裸奔工程中,穩定性未知,BUG數量未知。

    兩個方案肯定選擇前者,筆者自己試過在ENC28J60網絡卡晶片上自己硬剛協議棧,其中艱難不言而喻,到最後還是妥協選擇開源社群。

    ·當需要執行多個複雜任務的時候,作業系統很有用

    作業系統提供TASK機制,訊息管理機制,如果上位機程式設計經驗的人,對執行緒會有很深刻的理解,不同的TASK就是不同的執行緒。有了TASK機制,對任務的管理就會方便的多。好像安卓系統執行起來了,咱們可以用JAVA為他隨時增加新功能,下個APK包,安裝就好了,對吧。

    什麼時候,我會選擇裸奔微控制器?

    裸奔有裸奔的好處,筆者怕黑。認為“上位機”開發人員之所以天天加班,有幹不完的事,改不完的BUG,最大的原因就是“黑”。黑盒子太多了。黑盒子指的是一個程式塊,這個程式塊你壓根不知道他是怎麼實現的,你只知道他提供什麼功能,至於自己是不是正確的呼叫了黑盒子的介面,你只能透過文件去看,然後就不斷不斷的試錯,效率極低。所以很多時候大神上位機開發人員,是對黑盒子(某語言提供的物件、方法)有深刻掌握的人!

    裸奔的微控制器不一樣,如果你願意,啟動時的彙編程式碼都可以自己寫,配置好時鐘,配置好各樣的暫存器,所有的程式碼都是你自己寫的,出了問題自己找,自己的程式碼還找不出原因,那就廢了。如果你覺得C語言也是黑盒子,為了躲避C語言開發者給你留的坑,你甚至可以用匯編寫程式碼,當然這個我不推薦了,C語言很棒,bug很少。裸奔開發,你眼前唯一的黑盒子就是硬體是如何實現的,也只有硬體能坑你一把。

    不言而喻,裸奔的微控制器程式碼,雖然簡單,但是所能做的功能也會有侷限。

    裸奔的話,聯網什麼的別想了。

    所以如果需求比較簡單,一定裸奔,需求困難,就跑作業系統。

    什麼微控制器支援作業系統?

    理論上,只要ROM/RAM資源足夠,所有的微控制器都可以執行嵌入式作業系統,但是,不是所有人都有移植作業系統的能力。

    新手還是得靠廠家幫你移植作業系統,所以選微控制器的時候,得問一下,上網查一下,它支援哪些作業系統?

    以TI的 CC2640為例,這玩意支援TI自家的嵌入式作業系統 TI-RTOS,好用!

    裸奔的話,所有微控制器都能裸奔,畢竟不穿衣服誰不會啊~

    溫度特性

    注意要看設計產品的工作溫度區間,是民用級,還是軍工級,有些微控制器晶片高低溫實驗過不了的,會出現程式碼起飛,內部FLASH莫名丟幾個等這些問題,不要等程式碼寫好,送去拿證了,過不了高低溫,被老闆罵~

    低功耗特性

    晶片是否有較好的休眠模式,老牌的晶片廠家都非常注重硬體低功耗模式,提出了各種各樣的睡眠方式,TI就是把低功耗做的很好的廠家。如果是設計電池供電的產品,一定要考慮低功耗。低功耗更多需要程式碼去最佳化,這看一個軟體工程師的水平~

    一個紐扣電池,產品用一年,那就太牛了!

    開發環境

    喜歡IAR還是MDK?筆者喜歡IAR多一點,感覺介面很硬朗,MDK的話顯得像是在寫上位機軟體~CORTEX Mx系列的微控制器多半都是用MDK開發的,STM32算是明星級產品了。TI的產品大多是用IAR。所以哪個開發環境你更熟悉,也可以作為考慮範疇。

    晶片是否冷門?

    STM32的技術支援是真的多,資料滿天飛,所以如果對自己讀DATASHEET的能力有所懷疑的話,一定要選類似STM32這樣的popular晶片。

    選冷門晶片是對自己的很大挑戰,你會發現百度問題幾乎沒人答,你得寫英文e-mail給原廠工程師,滿心歡喜克服語言困難寫完,他也不會理你。你得翻牆去國外論壇找資料。但是一旦你開發好,你會成就感爆棚,也會覺得,微控制器不過如此~然後寫一些關於這個晶片的CSDN文章,幫助建設社群!

    學生的話可以推薦嘗試嘗試,工作的就算了,都996了別升級007咯~

    最近的狀態

    大學的時候,對微控制器,對飛行器的熱情,我都在年復一年,日復一日的工作中慢慢淡去了。現在我唯一想的就是努力把產品做好,賣到世界的各個角落,這也算change world的一種方式吧~嘿嘿,自己給自己熬點雞湯,願明天會好~

  • 中秋節和大豐收的關聯?
  • 手上的後溪穴在哪裡啊?