嵌入式linux和stm32嵌入式開發這兩者之間有什么關聯性


 對於更開始入坑的同學,可能也像我一樣搞不清楚兩者的區別與聯系。現在結合知乎網上的相關資料發一篇文章來具體分析。

    基於STM32的開發屬於微控制器開發領域,主要開發工具是keil或IAR,這種開發更准確的說法是單片機開發或者硬件開發;而招聘里所說的嵌入式開發,開發環境是基於Linux操作系統,這種開發一般會分為幾個層次:驅動開發、操作系統層開發、應用層開發。開發后者所需了解的知識和前者的不是在同一個層次上。

    如果玩過Arduino和樹莓派,那么這個就很好理解了。STM32開發和Arduino是同一個層次,處於微控制器級別;嵌入式Linux開發和樹莓派一個層次,屬於微處理器級別。

    更詳細地說,單片機開發主要在於控制、檢測和傳輸數據,比如控制繼電器開關以控制門鎖,檢測溫濕度上傳數據到網關。而處理器除了可以做單片機的事,還可以處理音視頻等計算量很大的任務,有文件管理系統也有更多的存儲空間,以及該平台所提供的「開封即用」的工具(即安裝后就可以直接使用),比如在樹莓派上運行一個人臉檢測系統是沒問題的,在樹莓派上搭建Web網站也是很方便的。

    嵌入式Linux使用的主控芯片比STM32更高級。什么叫高級?除了運行速度內存空間等特性以外,從拿到芯片開始開發,到最后成為一個完整的產品原型或方案,其過程需要用到很多開發工具,硬件電路板的設計、驅動層和系統層代碼的移植,應用層代碼的編寫,這些是需要一個團隊合作完成的,當然大牛也可以獨立完成,但是需要非常非常多的精力,同時項目周期也會拖得非常非常的長。

    嵌入式Linux開發,不是像單片機開發那樣設計好硬件后,只需要打開IDE編寫代碼,然后燒錄測試改代碼燒錄測試改代碼。

    放上一張ARM芯片內核匯總圖片。其中STM32內核屬於Cortex-M系列,嵌入式Linux所用內核可能是Cortex-A系列。有的Cortex-M不支持MMU內存管理單元,據我所知最多只能上到 µC/OS系列的嵌入式系統,而Cortex-A支持MMU,可以上類Unix系統。一旦上了類Unix系統,底層的東西就可以封裝起來,只提供接口給上層開發人員。

    這里科普一下。如果學過面向對象編程,那封裝和接口就很容易理解。封裝是把實現細節盡可能的隱藏起來,對外提供一個或多個公共接口,開發人員只需要知道這個接口怎么調用即可,不需要知道是怎么實現的。這一點和基於單片機開發很大不同,單片機開發本質就是“面向寄存器開發”。而嵌入式Linux開發,是"面向N-1層開發",比如應用層就是“面向操作系統層API開發”。

    當然,現在STM32有了STM32Cube這個開發工具,就好像把STM32開發封裝一層並提供接口一樣。但對我來說,Cube只是一個“開發框架”或"中間件",Cube使開發者配置引腳更省心省力,同時把寄存器封裝了一層,以更友好的方式告訴開發者,開發者只需要根據接口文檔提供的接口去調用即可(可惜Cube的文檔、學習和開發資料太少)。我要是不用Cube,也可以開發STM32,沒有Cube以前開發者都是直接看芯片手冊開發的。

    而對於嵌入式Linux開發,則不能脫離N-1層,不了解底層API都不知道要做什么,例如使用TCP,至少也要知道Socket接口,例如編寫Web管理頁面,至少也需要一個Web框架(比如Python的Django)及Web服務器(比如Apache)。當然,由於嵌入式Linux都是基於類Unix開發,很多接口及其知識都是通用的,掌握了底層接口以后可以更多的關注業務邏輯。而在單片機開發中,換了一個芯片就需要重新看芯片手冊,哪怕是實現相同的功能也有種重新開發的感覺,所以芯片選型階段也是重中之重。嵌入式Linux應用層開發則不用那么麻煩,只要操作系統是類Unix,底層提供相同的接口即可代碼重用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM