我還要繼續學習51單片機嗎?----答疑貼

晶元在不斷發展,我還要繼續學習51單片機嗎?----答疑貼


結合我的親身經歷說說這個問題吧。

最近有個深圳的朋友,專程開車過來,帶來了一款他們公司的產品,晶元是一款51內核的8位單片機.。

他說這個賣的很火,只是現在三星的這個單片機晶元快要停產了,擔心後面難以購買,所以想讓我幫忙更換掉核心板,使用STM32代替.

無獨有偶,最近也有很多朋友和我聊天的時候,問我說現在都學習STM32了,還有學習51單片機的必要嗎?

更有人問,我們的ARM Cortex-A17都量產了,還有必要學習ARM Cortex-M3嗎?

我想說的是,如果你是做產品,當然要優先考慮用當前量大的,出貨有保證的晶元。

經過市場檢驗的晶元,質量也不會太次,市場用量大,價格也相對低一些。其實使用新推出的IC做量產產品,

運氣不好的話會遇到很多坑,我們就曾經因為使用一款新的IC,導致產品在溫濕度環境實驗的時候出現INT概率性宕機,

經過大量的試驗和測試(當時在溫濕度環境下,測試人員和我們工程師的小手都被蒸成紅燒豬手了,那個濕度和溫度相當高!),

最後我們定位到了宕機問題和我們的軟體設計,硬體設計無關,問題恰恰出在這個新IC上面,因為查找這個問題耽誤了項目進度,

導致我們的項目延期,被客戶罰款(客戶是衣食父母,得罪不起啊)

原廠也只能說下個季度修正這個BUG。 %¥%××還能說什麼呢?只能說算是我們選型方案失誤。

另外有很多小的IC原廠,並不能夠保證晶元的生命周期,但是大的廠商可以給你保證XX年內都還是可以買到這款IC的,

這樣你就不用擔心當你的產品大賣時卻遇到晶元缺貨,無法及時生產的尷尬了。

如果你只是學習,特別是學習單片機或者其他的嵌入式軟體底層編程,那我建議您選一款資料最多的晶元可以了。

如果別人問我,我會說其實STC的8051內核單片機就是一個不錯的選擇。因為它的晶元架構相對簡單,應用也很成熟,資料多,玩的人也多,上手比較輕鬆。

我們大學課本都是以講8051為主。資料是最豐富的,無論是網路上的貼子、書籍、視頻,都已經形成了一個完整的體系。

你碰到的大多數問題,別人都已經碰到並解決了。入門也最簡單,最快速!

首先更正一些概念:8051並沒有過時:

1. 寫驅動中不涉及CPU,只涉及CPU之外的設備

嵌入式晶元被稱為SoC(System on Chip),它上面既有CPU還有其他模塊,比如GPIO、I2C、UART等。

如果你是單片機嵌入式軟體工程師, 無論是8051、STM8、STM32,對我們來說是沒有差別的;

差別不在於CPU核, 差別在於CPU之外的模塊的寄存器操作不一樣。

因為我們寫驅動並不涉及CPU核,只是操作CPU之外的設備,只是讀寫這些設備的寄存器。

2. 一理通,百理明:掌握了原理,通吃所有晶元

從我2005年入行,在單片機 、ARM架構方面經歷了8051,STM32,ARM9,ARM11,CORTEX A8/A9,現在又到了多核;

期間用過其他架構的晶元,但是所用到的知識跟8051上所學的知識,完全沒變過!根本沒變過!

變化的就是調試驅動的經驗累積,就是學習的能力,快速掌握新知識的能力另外就是對操作系統的掌握!

3、「我學8051幹嘛?工作中又不用8051!」,

此話大錯特錯,你是用8051來學習知識,不是學習8051這個晶元本身;

即使你現在選擇很牛的晶元來學習,再過1年它也過時了;追晶元,怎麼追得上!?

就比如你們公司即使現在用的 ARM Cortex-A17 , 你用這個來學習到頭來只是學到皮毛,越是高端的處理器,公司的產品越是依賴於原廠或者方案公司,

你接觸到的很多都是沒有手冊,沒有說明,甚至封裝打包成LIB庫的東西,真正核心的接觸不到。

4、 「8051是不是快被淘汰了,還學它幹嘛」, 大錯特錯,理由同上。

現在單片機的產品很多很多,在滿足功能的情況下,公司或者老闆當然選擇價格便宜,市場量大的單片機了。可以用單片機乾的活,何必要用ARM呢。

5、那麼,怎麼初學者應該學習呢?

(1、找一塊單片機開發板練手,當然你也可以自己搭建硬體平台。學習單片機最重要的就是要多實踐。

(2、學完後再換另一種開發板重寫代碼

為什麼要換開發板?

這是對你所學知識的檢驗與煅煉,把你學習的8051單片機上所有的代碼,都在新板子上自己重新寫出來:很多你沒有領會到的、

沒有在意過的知識點,在這個過程中都會卡得你痛苦萬分,解決了它們你自然就學得更深了。只有這樣,前面在

8051上所學到的知識才會變成你自己的知識。

另外有人問:8051內核、ARM Cortex-M0、ARMCortex-M3這些內核的單片機指令不一樣,對我們學習或者開發有影響嗎?

我想說的不同系列的單片機架構或者指令集,確實有差別。

但是對於初學者或者初級的應用工程師,我想這些是不重要的,至少只能說了解就可以了。

並不是需要熟悉或者精通。因為畢竟做初級開發的,涉及到這方面的很少。

打個比方,前段時間我調試一個語音類的產品,我只需要評估下,可能需要使用支持NEON指令集的CPU。

所以我選了這樣一款ARM晶元,然後軟體打開NEON指令的編譯選項即可。經過測試,加入NEON指令後,多媒體的編解碼會更高效。

但是作為快速開發產品,我沒有必要去了解NEON是如何去提高效率的。

歡迎來我的網站www.armgeek.com極客電子圈交流學習!


你要學習如何快速上手一款晶元,這樣就不會問這問題了,多接觸幾款晶元51、stm32、msp430等,一定程度後就自然會知道怎麼去用不同晶元。要想深入使用一些晶元的功能,大概也只有做項目的時候你才會體驗到,平時做的小東西基本上不會考慮的那麼深入的。

懂得去看晶元的datasheet


大四。

用過51-STM32-MSP430-LM3S-MC56F-A20-CC2540

多學一個少學一個,其實沒什麼關係的。


推薦閱讀:

如何評價華為今天發布的麒麟920?會不會又像K3V2那樣名過其實?
怎樣加入一個開源項目?
自己設計製作小型飛行器(像四旋翼飛行器、直升機),比較重要的是哪一塊?
FPGA、單片機的區別?
怎麼結合嵌入式,Linux,和FPGA三個方向達到一個均衡發展?

TAG:ARM | 單片機 | 嵌入式開發 | 工控 |