什么是嵌入式軟件開發(fā)
嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
它一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶的應(yīng)用程序等四個(gè)部分組成,用于實(shí)現(xiàn)對(duì)其他設(shè)備的控制、監(jiān)視或管理等功能。
嵌入式系統(tǒng)一般指非 PC 系統(tǒng),它包括硬件和軟件兩部分。硬件包括處理器/微處理器、存儲(chǔ)器及外設(shè)器件和 I/O 端口、圖形控制器等。軟件部分包括操作系統(tǒng)軟件(OS)(要求實(shí)時(shí)和多任務(wù)操作)和應(yīng)用程序編程。有時(shí)設(shè)計(jì)人員把這兩種軟件組合在一起。應(yīng)用程序控制著系統(tǒng)的運(yùn)作和行為;而操作系統(tǒng)控制著應(yīng)用程序編程與硬件的交互作用。
傳統(tǒng)嵌入式產(chǎn)品:空調(diào)主控模塊、冰箱主控模塊、家用遙控器、智能手機(jī)、教學(xué)投影儀、音響系統(tǒng)、雷達(dá)系統(tǒng)、路由器等等。
前沿嵌入式產(chǎn)品:無人機(jī)、智能音響、機(jī)器人控制、城市天眼系統(tǒng)、智能家具、自動(dòng)駕駛汽車、掃地機(jī)器人、手環(huán)等等。
嵌入式開發(fā)工程師,從事領(lǐng)域很寬泛,特別是工業(yè)控制、消費(fèi)電子與通信設(shè)備三大領(lǐng)域,因?yàn)榫蜆I(yè)面很大,所以人才需求也大。現(xiàn)在智能硬件也比較火,這方面的發(fā)展也會(huì)大大拓展嵌入式工程師的就業(yè)機(jī)會(huì)。嵌入式的前景還是非常不錯(cuò)的!
另外,據(jù)校招的一些公司 HR 介紹,一般公司 70%的研發(fā)人員都是軟件類的,嵌入式硬件工程師,需求沒有嵌入式軟件工程師大,但因?yàn)樽鲇布T檻會(huì)高些, 所以這個(gè)方向如果做的比較專業(yè),薪資絕對(duì)不會(huì)低。
崗位分類
嵌入式軟件開發(fā)具體可以分三類:
1、嵌入式驅(qū)動(dòng)工程師:
編寫和移植各種芯片驅(qū)動(dòng)(如音頻芯片),優(yōu)化硬件設(shè)備驅(qū)動(dòng)(如溫濕度傳感器),得精通各種硬件接口協(xié)議(如 I2C 協(xié)議)、系統(tǒng)調(diào)度、信號(hào)量、鎖機(jī)制等等,開發(fā)難度最大。該類開發(fā)者一般是軟硬件綜合型人才,一般的嵌入式驅(qū)動(dòng)工程師指 LINUX 上 的驅(qū)動(dòng)開發(fā)工程師,需要精通 Linux 驅(qū)動(dòng)框架(platform 框架、input 子系統(tǒng)框架等),結(jié)合芯片本身去編寫驅(qū)動(dòng),驅(qū)動(dòng)的好壞很大程度上決定一個(gè)產(chǎn)品的好壞。業(yè)界對(duì)驅(qū)動(dòng)人才的定義是三年才算入門,可見此門檻之高。
2、嵌入式系統(tǒng)工程師:
主要是編寫固件,根據(jù)不同平臺(tái)移植操作系統(tǒng),根據(jù)應(yīng)用場景來優(yōu)化系統(tǒng),需要熟悉整個(gè)操作系統(tǒng)組成與調(diào)度,對(duì)固件的穩(wěn)定性高求很高,如果系統(tǒng)不穩(wěn)定,驅(qū)動(dòng)和應(yīng)用也是白做的。
3、嵌入式應(yīng)用工程師:
編寫業(yè)務(wù)邏輯程序,調(diào)用驅(qū)動(dòng)工程師提供的接口控制設(shè)備,軟件開發(fā)過程所 涉內(nèi)容范圍非常廣,主要使用 C 語言開發(fā),但經(jīng)常會(huì)涉及 C++、Java、python、Java、PHP 等各類語言以及各種腳本語言、數(shù)據(jù)庫、前端后臺(tái)、各種通訊協(xié)議、 甚至一些從來沒聽過的協(xié)議或概念。這需要很強(qiáng)的學(xué)習(xí)能力,該職位也是各大公 司需量最大的。一般 10 人的開發(fā)小組,驅(qū)動(dòng)開發(fā)與系統(tǒng)開發(fā)與應(yīng)用開發(fā)的比例 是 1:2:7。
工作及學(xué)習(xí)內(nèi)容
我國嵌入式人才缺口每年在 50 萬左右,相關(guān)調(diào)查報(bào)告稱嵌入式軟件開發(fā)是 未來幾年最熱門和最受歡迎的職業(yè)之一。嵌入式軟件開發(fā)做什么?
負(fù)責(zé)上層應(yīng)用軟件,主要要用:
(2)外設(shè):AD/DA、UART、USB、LCD;
(3)總線和通訊接口:I2C,SPI,RS232,RS484,CAN,USB,MODBUS(或有
實(shí)時(shí)性要求)
(4)環(huán)境:Linux/QNX+ARM 匯編;
對(duì)于一個(gè)嵌入式軟件工程師,需要掌握以下技能:
1.掌握 C 語言基礎(chǔ)知識(shí),C 語言作為一門基礎(chǔ)語言,無論對(duì)嵌入式軟件還是
硬件開發(fā)編程,都會(huì)有很大的幫助。
2.了解操作系統(tǒng),對(duì)操作系統(tǒng)了解也很有必要,比如進(jìn)程、線程和系統(tǒng)是怎
么分配資源等等相關(guān)內(nèi)容,對(duì)你的軟件開發(fā)會(huì)有很大的幫助。
3.了解 Linux 或者 wince 下的編程。
4.具有單片機(jī)或者 ARM 或者 MIPS 等等相關(guān)基礎(chǔ)。
5.其他知識(shí)的擴(kuò)充,我們可以通過閱讀一些優(yōu)秀代碼,來了解 UBOOT 的源
代碼,或者可以學(xué)習(xí)下 linux 源代碼等等相關(guān)知識(shí)。
對(duì)于嵌入式軟件開發(fā)不僅是上面編程方面需要掌握,還有需要掌握的就是:
1.熟悉 ARM、X86、PLC 等硬件知識(shí);
2.熟悉計(jì)算機(jī)接口知識(shí),熟悉 WinCE 或 Linux 等嵌入式操作系統(tǒng);
3.熟練使用 c、C#編程、PLC 編程者優(yōu)先;
4.精通 DSP、PPC、ARM 等 cpu 的單板開發(fā)與調(diào)試;
5.對(duì) ucos 等實(shí)時(shí)嵌入式系統(tǒng)或嵌入式 linux 系統(tǒng)有了解;
6.良好的學(xué)習(xí)能力,良好的團(tuán)隊(duì)合作精神和溝通能力,認(rèn)真負(fù)責(zé)的工作態(tài)度,有鉆研精神。
這些都是基礎(chǔ),嵌入式軟件開發(fā)這些都是需要掌握的,你掌握的東西也就是你以后要做的內(nèi)容。
對(duì)于嵌入式軟件開發(fā)你以后大致可以做下面幾方面的工作:
1.應(yīng)用程序開發(fā),包括 Android 應(yīng)用開發(fā)或者 Linux 上應(yīng)用開發(fā)(QT 等),目前做的人很多,就業(yè)容易待遇也不錯(cuò),需要掌握 C 語言、C++、java 等開發(fā)語言。
2.操作系統(tǒng)移植,比較復(fù)雜,Linux,Android 等,現(xiàn)在很多手機(jī)廠商(如小米,魅族,樂視等)推出的操作系統(tǒng)也就是修改內(nèi)核,換皮膚,就業(yè)還是很容易的;
3.底層驅(qū)動(dòng)開發(fā),這個(gè)入門、深入都不容易,需要對(duì)硬件及 OS 有較深的了解,發(fā)展前景很不錯(cuò)。
崗位技能
一、C 語言
嵌入式 Linux 工程師的學(xué)習(xí)需要具備一定的 C 語言基礎(chǔ),C 語言是嵌入式領(lǐng)域最重要也是最主要的編程語言,通過大量編程實(shí)例重點(diǎn)理解 C 語言的基礎(chǔ)編程 以及高級(jí)編程知識(shí)。包括:基本數(shù)據(jù)類型、數(shù)組、指針、結(jié)構(gòu)體、鏈表、文件操 作、隊(duì)列、棧等。
二、Linux 基礎(chǔ)
Linux 操作系統(tǒng)的概念、安裝方法,詳細(xì)了解 Linux 下的目錄結(jié)構(gòu)、基本命令、編輯器 VI ,編譯器 GCC,調(diào)試器 GDB 和 Make 項(xiàng)目管理工具, Shell Makefile 腳本編寫等知識(shí),嵌入式開發(fā)環(huán)境的搭建。
三、Linux 系統(tǒng)編程
重點(diǎn)學(xué)習(xí)標(biāo)準(zhǔn) I/O 庫,Linux 多任務(wù)編程中的多進(jìn)程和多線程,以及進(jìn)程間通信(pipe、FIFO、消息隊(duì)列、共享內(nèi)存、signal、信號(hào)量等),同步與互斥對(duì)共享資源訪問控制等重要知識(shí),主要提升對(duì) Linux 應(yīng)用開發(fā)的理解和代碼調(diào)試的能力。
四、Linux 網(wǎng)絡(luò)編程
計(jì)算機(jī)網(wǎng)絡(luò)在嵌入式 Linux 系統(tǒng)應(yīng)用開發(fā)過程中使用非常廣泛,通過 Linux 網(wǎng)絡(luò)發(fā)展、TCP/IP 協(xié)議、socket 編程、TCP 網(wǎng)絡(luò)編程、UDP 網(wǎng)絡(luò)編程、Web 編程開發(fā)等方面入手,全面了解 Linux 網(wǎng)絡(luò)應(yīng)用程序開發(fā)。
重點(diǎn)學(xué)習(xí)網(wǎng)絡(luò)編程相關(guān) API,熟練掌握 TCP 協(xié)議服務(wù)器的編程方法和并發(fā)服務(wù)器的實(shí)現(xiàn),了解 HTTP 協(xié)議及其實(shí)現(xiàn)方法,熟悉 UDP 廣播、多播的原理及編程方法,掌握混合 C/S 架構(gòu)網(wǎng)絡(luò)通信系統(tǒng)的設(shè)計(jì),熟悉 HTML,Javascript 等 Web 編程技術(shù)及實(shí)現(xiàn)方法。
五、數(shù)據(jù)結(jié)構(gòu)與算法
數(shù)據(jù)結(jié)構(gòu)及算法在嵌入式底層驅(qū)動(dòng)、通信協(xié)議、及各種引擎開發(fā)中會(huì)得到大量應(yīng)用,對(duì)其掌握的好壞直接影響程序的效率、簡潔及健壯性。此階段的學(xué)習(xí)要重點(diǎn)理解數(shù)據(jù)結(jié)構(gòu)與算法的基礎(chǔ)內(nèi)容,包括順序表、鏈表、隊(duì)列、棧、樹、圖、哈希表、各種查找排序算法等應(yīng)用及其 C 語言實(shí)現(xiàn)過程。
六、C++ 、QT
C++ 是 Linux 應(yīng)用開發(fā)主要語言之一,本階段重點(diǎn)掌握面向?qū)ο缶幊痰幕舅枷胍约?C++的重要內(nèi)容。圖形界面編程是嵌入式開發(fā)中非常重要的一個(gè)環(huán)節(jié)。由于 QT 具有跨平臺(tái)、面向?qū)ο蟆⒇S富 API、支持 2D/3D 渲染、支持 XML、多國語等強(qiáng)大功能,在嵌入式領(lǐng)域的 GUI 開發(fā)中得到了廣范的應(yīng)用,在本階段通過基于 QT 圖形庫的學(xué)習(xí)使學(xué)員可以熟練編寫 GUI 程序,并移植 QT 應(yīng)用程序到 Cortex-A8 平臺(tái)。包括 IDE 使用、QT 部件及布局管理器、信息與槽機(jī)制的應(yīng)用、鼠標(biāo)、鍵盤及繪圖事件處理及文件處理的應(yīng)用。
七、Cortex A8 、Linux 平臺(tái)開發(fā)
通過基于 ARM Cortex-A8 處理 s5pv210 了解芯片手冊(cè)的基本閱讀技巧,掌握s5pv210 系統(tǒng)資源、時(shí)鐘控制器、電源管理、異常中斷控制器、nand flash 控制器等模塊,為底層平臺(tái)搭建做好準(zhǔn)備。
Linux 平臺(tái)包括內(nèi)核裁減、內(nèi)核移植、交叉編譯、GNU 工具使用、內(nèi)核調(diào)試、Bootloader 介紹、制作與原理分析、根文件系統(tǒng)制作以及向內(nèi)核中添加自己的模塊,并在 s5pv210 實(shí)驗(yàn)平臺(tái)上運(yùn)行自己制作的 Linux 系統(tǒng),集成部署 Linux 系統(tǒng)整個(gè)流程。同時(shí)了解 Android 操作系統(tǒng)開發(fā)流程。Android 系統(tǒng)是基于 Linux 平臺(tái)的開源操作系統(tǒng),該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件,目前它的應(yīng)用不再局限于移動(dòng)終端,還包括數(shù)據(jù)電視、機(jī)頂盒、PDA 等消費(fèi)類電子產(chǎn)品。
八、驅(qū)動(dòng)開發(fā)
驅(qū)動(dòng)程序設(shè)計(jì)是嵌入式 Linux 開發(fā)工作中重要的一部分,也是比較困難的一部分。本階段的學(xué)習(xí)要熟悉 Linux 的內(nèi)核機(jī)制、驅(qū)動(dòng)程序與用戶級(jí)應(yīng)用程序的接口,掌握系統(tǒng)對(duì)設(shè)備的并發(fā)操作。熟悉所開發(fā)硬件的工作原理,具備 ARM 硬件接口的基礎(chǔ)知識(shí),熟悉 ARM Cortex-A8 處理器 s5pv210 各資源、掌握 Linux 設(shè)備驅(qū)動(dòng)原理框架,熟悉工程中常見 Linux 高級(jí)字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備、USB 設(shè)備等驅(qū)動(dòng)開發(fā),在工作中能獨(dú)立勝任底層驅(qū)動(dòng)開發(fā)。
目前的嵌入式開發(fā)更傾向于智能化,也就是我們所說的智能硬件(硬件+軟件),從現(xiàn)在各種前沿的嵌入式產(chǎn)品來看的確如此,嵌入式產(chǎn)品的一個(gè)發(fā)展趨勢是更傾向于自動(dòng)化控制和人機(jī)交互,而不是強(qiáng)調(diào)“算法”這一塊。嵌入式有很好的發(fā)展前景,前沿嵌入式技術(shù)即將崛起,或者說已經(jīng)崛起。
人工智能、大數(shù)據(jù)這些學(xué)科會(huì)給嵌入式帶來沖擊,就目前來看,大學(xué)生更傾向與python 編程語言、機(jī)器學(xué)習(xí)這一塊,而嵌入式學(xué)者的確比往年有所下降。但學(xué)者少了并不代表他的需求就少了,并不代表他的薪資水平下降了,目前的一個(gè)嵌入式技術(shù)更傾向于與智能學(xué)科相結(jié)合的趨勢。
以百度機(jī)器人為例,機(jī)器人的核心是大腦,即是“數(shù)據(jù)和算法”,但機(jī)器人大腦想機(jī)器人身軀能夠像人類一樣活動(dòng),能說會(huì)道,行走自如,那么就必須得依靠嵌入式技術(shù)。
嵌入式+智能學(xué)科應(yīng)用,從長久來看,嵌入式只會(huì)越來越火,智能學(xué)科的崛起必定帶動(dòng)新型的嵌入式技術(shù)發(fā)展。
推薦書籍
一、bootloader
1. 對(duì)硬件的操作,需要看原理圖、芯片手冊(cè)。這需要一定的硬件知識(shí),不求
你能設(shè)計(jì)硬件,但是至少能看懂; 不求能看懂模擬電路,但是要能看懂數(shù)字電路:
《微機(jī)原理》《數(shù)字電路》
2. 芯片手冊(cè),英文。肯定會(huì)痛苦,不痛苦怎么能成長呢?
3. 對(duì) ARM 體系處理器的了解, 匯編指令,異常模式、MMU。也就這 3 塊內(nèi)容需要你了解:《ARM 體系架構(gòu)與編程》杜春蕾
4. 《嵌入式 Linux 應(yīng)用開發(fā)完全手冊(cè)》
二、內(nèi)核
想速成的人,先跨過內(nèi)核的學(xué)習(xí),直接學(xué)習(xí)怎么寫驅(qū)動(dòng)。想成為高手,內(nèi)核必須深刻了解。注意,我說的是了解,我沒奢望去寫出一個(gè)內(nèi)核。要對(duì)里面的調(diào)度機(jī)制、內(nèi)存管理機(jī)制、文件管理機(jī)制等等有所了解。
推薦兩本書:
1. 通讀《linux 內(nèi)核完全注釋》,請(qǐng)看薄的那本;
2. 選讀《Linux 內(nèi)核情景分析》, 想了解哪一塊就讀哪一節(jié)。
三、驅(qū)動(dòng)
《Linux 設(shè)備驅(qū)動(dòng)》,老外寫的那本
《linux 設(shè)備驅(qū)動(dòng)開發(fā)詳解》
提升方法
一、學(xué)習(xí)利用搜索引擎
不要閉門造車,要善用開放源碼世界的信息,很多常見的設(shè)計(jì)問題其實(shí)透過因特網(wǎng)就能找到同領(lǐng)域菁英貢獻(xiàn)的程序代碼;嵌入式工程師們要走出自己的小世界擁抱社群,與同領(lǐng)域的其他工程師們相互交流、互相幫助,而這也是開放源碼世界 的精神。
二、離開舒適圈!
不斷更新并提升原本擅長的技術(shù)雖然很重要,但嵌入式工程師若能擴(kuò)展自己的知識(shí)領(lǐng)域會(huì)更有益。走出舒適圈,挑戰(zhàn)自我、去學(xué)習(xí)原本不熟悉的東西,包括工程以外的知識(shí),例如與客戶、同事之間的互動(dòng),將會(huì)收獲良多。
三、熟悉實(shí)時(shí)操作系統(tǒng)(RTOS)
目前產(chǎn)業(yè)界對(duì)于熟悉 RTOS 的工程師需求很高,也愿意提供更高的薪資水平;因此他鼓勵(lì)沒有接觸過 RTOS 的嵌入式工程師從一些較小型的系統(tǒng)著手,累積相關(guān)技術(shù)經(jīng)驗(yàn)。
四、培養(yǎng)多元化技能與系統(tǒng)觀
原本從事較小型系統(tǒng)架構(gòu)(例如 MCU)開發(fā)的工程師,可以開始去熟悉更大的系統(tǒng)(例如 Linux 驅(qū)動(dòng)程序),反之亦然。嘗試著去開發(fā)手機(jī)應(yīng)用程序、或者是學(xué)習(xí)后端服務(wù)器的相關(guān)技術(shù),能開啟完全不同的觀點(diǎn);建議工程師去熟悉開放性硬件,現(xiàn)在市面上有不少現(xiàn)成的開發(fā)板,能讓工程師專注于學(xué)習(xí)獨(dú)特算法的開發(fā)。
五、要能熟悉開放源碼軟件
客戶往往會(huì)要求在系統(tǒng)中整合一大堆軟件,因此所有的嵌入式工程師需要熟悉各種軟件;工程師應(yīng)避免只專長單一領(lǐng)域,因?yàn)槟强赡軙?huì)阻礙你的成長。對(duì)嵌入式工程師來說,確保自己對(duì)軟硬件技術(shù)都很了解,是非常寶貴的價(jià)值。
六、建立系統(tǒng)級(jí)的工程思維
嵌入式工程師擁有系統(tǒng)導(dǎo)向的思維是很重要的,有不少開發(fā)案遇到問題,就是因?yàn)闆]有在開發(fā)初期充分考慮基準(zhǔn)、驗(yàn)證策略以及兼容性驗(yàn)證計(jì)劃等項(xiàng)目;此外每個(gè)嵌入式工程師都應(yīng)該具備優(yōu)良的項(xiàng)目管理技巧,力求準(zhǔn)時(shí)完成負(fù)責(zé)的項(xiàng)目。具備能明智因應(yīng)技術(shù)與項(xiàng)目風(fēng)險(xiǎn)的能力,對(duì)職業(yè)生涯發(fā)展會(huì)很有幫助。
七、要能透過文字或繪圖,明確表達(dá)自己的想法與意見
往往有些菜鳥工程師無法清晰表達(dá)自己的想法,因?yàn)樽ゲ坏街攸c(diǎn),而最好的解決方法是練習(xí)將之圖形化,例如畫出流程圖。這聽起來好像有點(diǎn)過時(shí),但有時(shí)利用各種圖框組合來整理自己的思緒、表達(dá)想法會(huì)是很有用的,例如 iPad 的 iThoughts應(yīng)用程序。
回復(fù)【更多資料】海量嵌入式資料贈(zèng)送
筆者電子信息專業(yè)碩士畢業(yè),獲得過多次電子設(shè)計(jì)大賽、大學(xué)生智能車、數(shù)學(xué)建模國獎(jiǎng),現(xiàn)就職于南京某半導(dǎo)體芯片公司,從事硬件研發(fā),電路設(shè)計(jì)研究。對(duì)于學(xué)電子的小伙伴,深知入門的不易,特開次博客交流分享經(jīng)驗(yàn),共同互勉!
審核編輯 黃宇
-
芯片
+關(guān)注
關(guān)注
455文章
50714瀏覽量
423155 -
嵌入式
+關(guān)注
關(guān)注
5082文章
19104瀏覽量
304822
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論