姓名:李鴻彬
學(xué)號(hào):16040520011
轉(zhuǎn)載自https://www.zhihu.com/question/53880054,有刪節(jié)
【嵌牛導(dǎo)讀】基于STM32的開發(fā)屬于微控制器開發(fā)領(lǐng)域板鬓,主要開發(fā)工具是keil或IAR悲敷,這種開發(fā)更準(zhǔn)確的說法是單片機(jī)開發(fā)或者硬件開發(fā);而招聘里所說的嵌入式開發(fā)穗熬,開發(fā)環(huán)境是基于Linux操作系統(tǒng)镀迂,這種開發(fā)一般會(huì)分為幾個(gè)層次:驅(qū)動(dòng)開發(fā)、操作系統(tǒng)層開發(fā)唤蔗、應(yīng)用層開發(fā)探遵。開發(fā)后者所需了解的知識(shí)和前者的不是在同一個(gè)層次上。
【嵌牛鼻子】嵌入式linux?用stm32進(jìn)行的嵌入式開發(fā)
【嵌牛提問】嵌入式linux 和 用stm32進(jìn)行的嵌入式開發(fā) 這兩者之間有什么關(guān)聯(lián)性嗎妓柜?
【嵌牛正文】
如果玩過Arduino和樹莓派箱季,那么這個(gè)就很好理解了。STM32開發(fā)和Arduino是同一個(gè)層次棍掐,處于微控制器級(jí)別藏雏;嵌入式Linux開發(fā)和樹莓派一個(gè)層次,屬于微處理器級(jí)別作煌。
更詳細(xì)地說掘殴,單片機(jī)開發(fā)主要在于控制赚瘦、檢測和傳輸數(shù)據(jù),比如控制繼電器開關(guān)以控制門鎖奏寨,檢測溫濕度上傳數(shù)據(jù)到網(wǎng)關(guān)起意。而處理器除了可以做單片機(jī)的事,還可以處理音視頻等計(jì)算量很大的任務(wù)病瞳,有文件管理系統(tǒng)也有更多的存儲(chǔ)空間揽咕,以及該平臺(tái)所提供的「開封即用」的工具(即安裝后就可以直接使用),比如在樹莓派上運(yùn)行一個(gè)人臉檢測系統(tǒng)是沒問題的套菜,在樹莓派上搭建Web網(wǎng)站也是很方便的亲善。
嵌入式Linux使用的主控芯片比STM32更高級(jí)。什么叫高級(jí)逗柴?除了運(yùn)行速度內(nèi)存空間等特性以外蛹头,從拿到芯片開始開發(fā),到最后成為一個(gè)完整的產(chǎn)品原型或方案嚎于,其過程需要用到很多開發(fā)工具掘而,硬件電路板的設(shè)計(jì)、驅(qū)動(dòng)層和系統(tǒng)層代碼的移植于购,應(yīng)用層代碼的編寫,這些是需要一個(gè)團(tuán)隊(duì)合作完成的知染,當(dāng)然大牛也可以獨(dú)立完成肋僧,但是需要非常非常多的精力,同時(shí)項(xiàng)目周期也會(huì)拖得非常非常的長控淡。
嵌入式Linux開發(fā)嫌吠,不是像單片機(jī)開發(fā)那樣設(shè)計(jì)好硬件后,只需要打開IDE編寫代碼掺炭,然后燒錄測試改代碼燒錄測試改代碼辫诅。
<img src="https://pic4.zhimg.com/50/7b055bd9b58e41555f35528f9ed4898f_hd.png" data-rawwidth="473" data-rawheight="453" class="origin_image zh-lightbox-thumb" width="473" data-original="https://pic4.zhimg.com/7b055bd9b58e41555f35528f9ed4898f_r.png">
放上一張ARM芯片內(nèi)核匯總圖片。其中STM32內(nèi)核屬于Cortex-M系列涧狮,嵌入式Linux所用內(nèi)核可能是Cortex-A系列炕矮。有的Cortex-M不支持MMU內(nèi)存管理單元,據(jù)我所知最多只能上到 μC/OS系列的嵌入式系統(tǒng)者冤,而Cortex-A支持MMU肤视,可以上類Unix系統(tǒng)。一旦上了類Unix系統(tǒng)涉枫,底層的東西就可以封裝起來邢滑,只提供接口給上層開發(fā)人員。
這里科普一下愿汰。如果學(xué)過面向?qū)ο缶幊?/b>困后,那封裝和接口就很容易理解乐纸。封裝是把實(shí)現(xiàn)細(xì)節(jié)盡可能的隱藏起來,對(duì)外提供一個(gè)或多個(gè)公共接口摇予,開發(fā)人員只需要知道這個(gè)接口怎么調(diào)用即可锯仪,不需要知道是怎么實(shí)現(xiàn)的。這一點(diǎn)和基于單片機(jī)開發(fā)很大不同趾盐,單片機(jī)開發(fā)本質(zhì)就是“面向寄存器開發(fā)”庶喜。而嵌入式Linux開發(fā),是"面向N-1層開發(fā)"救鲤,比如應(yīng)用層就是“面向操作系統(tǒng)層API開發(fā)”久窟。
當(dāng)然,現(xiàn)在STM32有了STM32Cube這個(gè)開發(fā)工具本缠,就好像把STM32開發(fā)封裝一層并提供接口一樣斥扛。但對(duì)我來說,Cube只是一個(gè)“開發(fā)框架”或"中間件"丹锹,Cube使開發(fā)者配置引腳更省心省力稀颁,同時(shí)把寄存器封裝了一層,以更友好的方式告訴開發(fā)者楣黍,開發(fā)者只需要根據(jù)接口文檔提供的接口去調(diào)用即可(可惜Cube的文檔匾灶、學(xué)習(xí)和開發(fā)資料太少)。我要是不用Cube租漂,也可以開發(fā)STM32阶女,沒有Cube以前開發(fā)者都是直接看芯片手冊(cè)開發(fā)的。
而對(duì)于嵌入式Linux開發(fā)哩治,則不能脫離N-1層秃踩,不了解底層API都不知道要做什么,例如使用TCP业筏,至少也要知道Socket接口憔杨,例如編寫Web管理頁面,至少也需要一個(gè)Web框架(比如Python的Django)及Web服務(wù)器(比如Apache)蒜胖。當(dāng)然消别,由于嵌入式Linux都是基于類Unix開發(fā),很多接口及其知識(shí)都是通用的翠勉,掌握了底層接口以后可以更多的關(guān)注業(yè)務(wù)邏輯妖啥。而在單片機(jī)開發(fā)中,換了一個(gè)芯片就需要重新看芯片手冊(cè)对碌,哪怕是實(shí)現(xiàn)相同的功能也有種重新開發(fā)的感覺荆虱,所以芯片選型階段也是重中之重。嵌入式Linux應(yīng)用層開發(fā)則不用那么麻煩,只要操作系統(tǒng)是類Unix怀读,底層提供相同的接口即可代碼重用诉位。