嵌入式軟件開發(fā)培訓(xùn)課程(嵌入式軟件 培訓(xùn))
本篇文章給大家談?wù)勄度胧杰浖_發(fā)培訓(xùn)課程,以及嵌入式軟件 培訓(xùn)對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。
嵌入式軟件開發(fā)培訓(xùn)機(jī)構(gòu)有哪些比較好?
比較好的嵌入式軟件開發(fā)培訓(xùn)機(jī)構(gòu)還是選擇千鋒教育吧,千鋒教育軟件開發(fā)培訓(xùn)機(jī)構(gòu)十多年來(lái)專注為客戶提供軟件開發(fā)就業(yè)培訓(xùn)。講師具有豐富的實(shí)戰(zhàn)經(jīng)驗(yàn),課程設(shè)置科學(xué),0基礎(chǔ)適學(xué),教學(xué)內(nèi)容涵蓋廣,實(shí)戰(zhàn)性強(qiáng)。精細(xì)化的分級(jí)教學(xué),為客戶量身打造教學(xué)課程及進(jìn)度。千鋒教育就有線上免費(fèi)的軟件開發(fā)公開課,。
千鋒教育采用全程面授高品質(zhì)、高體驗(yàn)培養(yǎng)模式,學(xué)科大綱緊跟企業(yè)需求,擁有國(guó)內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),在職業(yè)教育發(fā)展道路上不斷探索前行。千鋒現(xiàn)擁有百人教研團(tuán)隊(duì),300人教學(xué)團(tuán)隊(duì),講師均來(lái)自一線大廠兼具項(xiàng)目實(shí)戰(zhàn)與教學(xué)經(jīng)驗(yàn),全程面授教學(xué)。關(guān)于軟件開發(fā)的更多相關(guān)知識(shí),建議到千鋒教育了解一下,公司總部位于北京,已在18個(gè)城市成立分公司,現(xiàn)有教研講師團(tuán)隊(duì)300余人。千鋒將在高校、企業(yè)、學(xué)員和各方合作伙伴支持下,努力成為一個(gè)有情懷、有良心、有品質(zhì)的一流教育機(jī)構(gòu),為國(guó)家培養(yǎng)更多高質(zhì)量數(shù)字技能人才。
嵌入式開發(fā)要學(xué)哪些課程?
嵌入式軟件開發(fā)專業(yè)主要課程如下:
主干學(xué)科:馬克思主義理論、大學(xué)外語(yǔ)、高等數(shù)學(xué)、大學(xué)物理、物理實(shí)驗(yàn)、線性代數(shù)、概率論與數(shù)理統(tǒng)計(jì)、程序設(shè)計(jì)語(yǔ)言、數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、操作系統(tǒng)、編譯技術(shù)、軟件工程概論、統(tǒng)一建模語(yǔ)言、軟件體系結(jié)構(gòu)、軟件需求、軟件項(xiàng)目管理
該專業(yè)除了學(xué)習(xí)公共基礎(chǔ)課外,還將系統(tǒng)學(xué)習(xí)離散數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、算法分析、面向?qū)ο蟪绦蛟O(shè)計(jì)、現(xiàn)代操作系統(tǒng)、數(shù)據(jù)庫(kù)原理與實(shí)現(xiàn)技術(shù)、編譯原理、軟件工程、軟件項(xiàng)目管理、計(jì)算機(jī)安全等課程,根據(jù)學(xué)生的興趣還可以選修一些其它選修課。
實(shí)踐環(huán)節(jié):畢業(yè)實(shí)習(xí)、課程設(shè)計(jì)、計(jì)算機(jī)工程實(shí)踐、生產(chǎn)實(shí)習(xí)、畢業(yè)設(shè)計(jì)(論文)。
擴(kuò)展資料:
嵌入式開發(fā)技能及就就業(yè)方向:
1、可視化編程掌握程序設(shè)計(jì)方法及可視化技術(shù),精通一種可視化平臺(tái)及其軟件開發(fā)技術(shù)。獲取Delphi程序員系列、Java初級(jí)或VB開發(fā)能手認(rèn)證。 就業(yè)方向:企業(yè)、政府、社區(qū)、各類學(xué)校等可視化編程程序員。
2 、WEB應(yīng)用程序設(shè)計(jì) 具有美工基礎(chǔ)和網(wǎng)頁(yè)動(dòng)畫設(shè)計(jì)能力,掌握交互式網(wǎng)頁(yè)程序的設(shè)計(jì)技術(shù),能進(jìn)行網(wǎng)站建設(shè)和維護(hù)。獲取Macromedia多媒體互動(dòng)設(shè)計(jì)師或Delphi初級(jí)程序員或Delphi快速網(wǎng)絡(luò)開發(fā)工程師認(rèn)證。 就業(yè)方向:企業(yè)、政府、社區(qū)、各類學(xué)校等WEB應(yīng)用程序員。
3 、軟件測(cè)試?掌握軟件測(cè)試的基本原理、方法和組織管理,精通軟件測(cè)試工具。獲取ATA軟件測(cè)試工程師或Delphi初級(jí)程序員或Java初級(jí)程序員認(rèn)證。 就業(yè)方向:企業(yè)、政府、社區(qū)、各類學(xué)校等軟件測(cè)試員。
4 、數(shù)據(jù)庫(kù)管理 能應(yīng)用關(guān)系范式進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì),精通SQL語(yǔ)言,勝任數(shù)據(jù)庫(kù)服務(wù)器管理與應(yīng)用工作。獲取Oracle數(shù)據(jù)庫(kù)管理或SQL Server數(shù)據(jù)庫(kù)應(yīng)用或Windows XP應(yīng)用認(rèn)證。 就業(yè)方向:企業(yè)、政府、社區(qū)、各類學(xué)校等部門的中、大型數(shù)據(jù)庫(kù)管理員。
5 、圖形圖像制作 精通國(guó)際上流行的圖形/圖像制作工具(如CorelDraw、Photoshop、Pagemaker等)。獲取平面設(shè)計(jì)師相關(guān)的認(rèn)證。 就業(yè)方向:廣告制作公司、建筑設(shè)計(jì)公司、包裝裝璜設(shè)計(jì)公司、居室裝修公司、出版印刷公司。
6 、網(wǎng)絡(luò)構(gòu)建技術(shù) 熟悉網(wǎng)絡(luò)結(jié)構(gòu)和組網(wǎng)方式,掌握建網(wǎng)方法,能利用工具分析和排除常見網(wǎng)絡(luò)故障。獲取Cisco路由配置或華為網(wǎng)絡(luò)工程或AMP應(yīng)用工程師認(rèn)證。 就業(yè)方向:企業(yè)、政府、社區(qū)、各類學(xué)校等網(wǎng)絡(luò)構(gòu)建工程師。
7 、網(wǎng)絡(luò)系統(tǒng)管理 掌握網(wǎng)絡(luò)系統(tǒng)管理的基本知識(shí)與應(yīng)用技能,能進(jìn)行網(wǎng)絡(luò)系統(tǒng)的安全設(shè)置。獲取Window2000 Server或TurboLinux TLCE或Cisco路由配置專家認(rèn)證。 就業(yè)方向:企業(yè)、政府、社區(qū)、各類學(xué)校等網(wǎng)絡(luò)系統(tǒng)管理員。
8 、多媒體制作 具有多媒體程序設(shè)計(jì)與多媒體制作策劃的能力?;菊莆彰嫦?qū)ο蟪绦蛟O(shè)計(jì)與建模、造型設(shè)計(jì)、場(chǎng)景設(shè)計(jì)、分鏡頭原理等技能。獲取多媒體設(shè)計(jì)師相關(guān)的認(rèn)證。 就業(yè)方向:多媒體設(shè)計(jì)與制作公司、動(dòng)畫美術(shù)制作出版公司、廣告制作公司。
9、 計(jì)算機(jī)辦公應(yīng)用 精通辦公自動(dòng)化應(yīng)用與管理,熟悉服務(wù)器的安裝、管理和維護(hù),基于應(yīng)用服務(wù)器的相關(guān)服務(wù)和軟件系統(tǒng),具備對(duì)服務(wù)器的網(wǎng)絡(luò)安全設(shè)置、郵件、網(wǎng)頁(yè)發(fā)布、FTP、OA、BBS等系統(tǒng)的應(yīng)用和維護(hù)能力。 就業(yè)方向:企業(yè)、政府、社區(qū)、各類學(xué)校等系統(tǒng)管理。
參考資料來(lái)源:百度百科-軟件工程
嵌入式需要學(xué)什么?嵌入式需要學(xué)哪些課程和內(nèi)容?
1.1 有哪些設(shè)備使用單片機(jī)或Linux
所有的電子產(chǎn)品,所用技術(shù)都可以認(rèn)為要么是單片機(jī),要么是Linux;GUI方面主要是QT/Android,它們都是運(yùn)行于Linux之上的。我們說(shuō)的單片機(jī)不使用操作系統(tǒng),但是使用單片機(jī)設(shè)備肯定遠(yuǎn)遠(yuǎn)超過(guò)Linux。很多人也是先學(xué)習(xí)單片機(jī),從單片機(jī)進(jìn)入電子工程師行業(yè),日常生活中,有哪些產(chǎn)品使用單片機(jī)、Linux呢?下面舉一些例子:
我們?cè)O(shè)計(jì)一個(gè)產(chǎn)品時(shí),是使用單片機(jī)還是Linux,取決于成本:硬件成本、軟件成本、維護(hù)成本、升級(jí)成本。而不應(yīng)該根據(jù)個(gè)人偏好來(lái)選擇:我喜歡單片機(jī),所以就排斥使用Linux;我喜歡Linux,就排斥使用單片機(jī)。為了有更多的選擇,我們需要既懂單片機(jī),又懂Linux。
1.2 在硬件操作上單片機(jī)和Linux是類似的
以點(diǎn)燈為例,
無(wú)論是單片機(jī)還是Linux,我們要做的事情都一樣:
看原理圖,確定引腳是哪一個(gè),確定它輸出什么電平才可以
看芯片手冊(cè),確定要怎么操作寄存器
寫程序
但是,怎么編寫程序,單片機(jī)和Linux有很大不同。
1.3 在單片機(jī)中點(diǎn)燈、使用LCD
使用單片機(jī)開發(fā)程序時(shí),我們一上來(lái)就寫一個(gè)main函數(shù),下面是一些簡(jiǎn)化的代碼:
LED程序里面的init_led、led_on、led_off函數(shù)是你一個(gè)人寫的,愛(ài)取什么名就取什么名,愛(ài)怎么寫就怎么寫。
LCD程序里的函數(shù)也是你寫的,完全是自由發(fā)揮。
很多單片機(jī)項(xiàng)目不是很復(fù)雜,2、3個(gè)人從上到下統(tǒng)統(tǒng)搞定,里面的函數(shù)大多時(shí)間是直接去讀寫寄存器。
很多單片機(jī)項(xiàng)目嚴(yán)重依賴于硬件,換一個(gè)芯片后怎么辦?重寫一套代碼唄。
在單片機(jī)程序里,沒(méi)有應(yīng)用程序、驅(qū)動(dòng)程序的概念,很可能一個(gè)人包攬了硬件設(shè)計(jì)、模塊調(diào)試(或稱之為驅(qū)動(dòng))、功能開發(fā)(或稱之為應(yīng)用)的全部活。
1.4 在Linux中點(diǎn)燈、使用LCD
在Linux中,不允許應(yīng)用開發(fā)人員直接去操作硬件,比如你想點(diǎn)個(gè)燈,不好意思,你無(wú)法直接訪問(wèn)寄存器;你需要通過(guò)驅(qū)動(dòng)程序來(lái)訪問(wèn)寄存器。
為什么?有幾大原因:
Linux系統(tǒng)中運(yùn)行著眾多程序,必須保證質(zhì)量差的程序無(wú)法破壞系統(tǒng):假設(shè)你寫的程序比較爛,那我不能讓你去隨便訪問(wèn)寄存器,把系統(tǒng)搞崩潰了怎么辦?你本意是去點(diǎn)燈,但是你看錯(cuò)了寄存器,你把電源關(guān)了怎么辦?所以這些操作硬件的活,還是交給信得過(guò)的人來(lái)做吧:交給驅(qū)動(dòng)工程師,他既懂硬件又懂軟件。
保證程序的可移植性:編寫應(yīng)用程序時(shí),大家都使用統(tǒng)一的函數(shù),以后換一個(gè)芯片時(shí),應(yīng)用程序不用變;只需要根據(jù)這個(gè)接口提供驅(qū)動(dòng)程序就可以了。
團(tuán)隊(duì)協(xié)作:使用Linux系統(tǒng)的項(xiàng)目一般比較大,術(shù)業(yè)有專攻,一個(gè)人不太可能從上到下都全部掌握。比如做人臉識(shí)別項(xiàng)目,有擅長(zhǎng)做圖像處理的,他可不管你要用多少種攝像頭,有圖像給他就可以。而多種攝像頭的硬件操作方法各有不同,這些交給驅(qū)動(dòng)程序工程師。
所以,在Linux中應(yīng)用程序和驅(qū)動(dòng)程序是分開的。
以LED、LCD程序?yàn)槔?,?jiǎn)化的代碼如下
也許你已經(jīng)大概猜出來(lái)了,應(yīng)用程序怎么調(diào)用驅(qū)動(dòng)程序?通過(guò)標(biāo)準(zhǔn)的接口:
open:打開驅(qū)動(dòng)程序。
read/write:讀、寫數(shù)據(jù)。
ioctl:傳入各種參數(shù),獲得各種參數(shù)。
mmap:內(nèi)存映射,比如映射之后,應(yīng)用程序可以直接讀寫LCD的顯存。
你看!從這些接口里,我們根本看不到寄存器的操作。底層的程序驅(qū)動(dòng)會(huì)根據(jù)這些調(diào)用,去設(shè)置寄存器、操作硬件。
所以,我高大上的應(yīng)用工程師,干嘛苦哈哈地去看原理圖、看在片手冊(cè)、讀寫寄存器,搞不好還要去調(diào)試硬件BUG。這些臟活、累活就交給驅(qū)動(dòng)工程師吧。客戶的需求千變?nèi)f化,我996時(shí)間都不夠用了。
我上懂軟件、下懂硬件的驅(qū)動(dòng)工程師,肯定不能把這么重要的活交給你去做了,把我的系統(tǒng)搞崩潰了怎么辦。
開玩笑、開玩笑、開玩笑的,有應(yīng)用工程師、驅(qū)動(dòng)工程師的優(yōu)劣之分,大家都是為了做出產(chǎn)品。現(xiàn)在有一個(gè)趨勢(shì),一個(gè)任務(wù)從上到下你都需要懂,這就是所謂的全棧工程師。
還是以LED為例,應(yīng)用程序和驅(qū)動(dòng)程序的協(xié)作如下圖所示:
在Linux中,“一切皆文件”,要訪問(wèn)某個(gè)硬件,也是要打開文件、讀寫文件。應(yīng)用程序要根據(jù)標(biāo)準(zhǔn)的文件接口:open/read/write/ioctl/mmap等來(lái)訪問(wèn)驅(qū)動(dòng)程序。
既然如此,怎么寫驅(qū)動(dòng)程序呢?最簡(jiǎn)單的方法就是:APP要調(diào)用open來(lái)打開驅(qū)動(dòng)程序,那驅(qū)動(dòng)‘程序里就提供一個(gè)xxx_open函數(shù)來(lái)初始化硬件;APP要調(diào)用write來(lái)寫數(shù)據(jù),驅(qū)動(dòng)程序里就提供一個(gè)xxx_write函數(shù)來(lái)接收數(shù)據(jù)并操作硬件。
用xxx_open、xxx_write來(lái)構(gòu)成一個(gè)驅(qū)動(dòng)程序,這就是驅(qū)動(dòng)框架。
怎么實(shí)現(xiàn)這些xxx_open、xxx_write函數(shù)?我們要做的事情跟單片機(jī)是類似的,一樣要去看電路圖、看芯片手冊(cè),然后在這些函數(shù)里讀寫寄存器:這稱為硬件操作。
所以,Linux驅(qū)動(dòng)程序= 驅(qū)動(dòng)框架 + 硬件操作。
有單片機(jī)基礎(chǔ)的人,對(duì)硬件操作比較熟悉了,把重點(diǎn)放在驅(qū)動(dòng)框架上就可以。
高能預(yù)警:驅(qū)動(dòng)框架可不簡(jiǎn)單,對(duì)于LED來(lái)說(shuō)是簡(jiǎn)單,但是還有更復(fù)雜的驅(qū)動(dòng)程序,它要考慮“通用”,這很要命。
第2章 嵌入式Linux快速入門
這幾天在群里跟學(xué)員聊天,有一位學(xué)員的學(xué)習(xí)方法很好:先觀其廣,再究其深。有時(shí)候要“不求甚解”,很多時(shí)候保持疑問(wèn)先學(xué)下去,這些疑問(wèn)就自然解決了。
比如課程中涉及匯編知識(shí),如果你要徹底弄清楚,你需要去學(xué)習(xí)《ARM架構(gòu)與編程》;當(dāng)你學(xué)完這本書,你的同學(xué)搞不好已經(jīng)可以上手工作了。
2.1 短期的目標(biāo)是什么
我們先把學(xué)習(xí)目標(biāo)定下來(lái):快速了解嵌入式Linux開發(fā)的流程,知道要學(xué)什么,具備跟從業(yè)者交流的能力。
2.2 一個(gè)嵌入式Linux系統(tǒng)的組成
下面我們用類比和邏輯推導(dǎo)出嵌入式Linux系統(tǒng)的組成,沒(méi)錯(cuò),“推導(dǎo)”。
從上圖可以知道:
組成:嵌入式Linux系統(tǒng)= bootloader + linux內(nèi)核 + 根文件系統(tǒng)(里面含有APP)。
bootloader:它的目的是啟動(dòng)內(nèi)核,去哪等讀內(nèi)核?讀到哪里?去Flash等外設(shè)讀內(nèi)核,存到內(nèi)存里去。所以需要有Flash里外設(shè)的驅(qū)動(dòng)能力,為了調(diào)試方便還會(huì)有網(wǎng)絡(luò)功能。所以,可以認(rèn)為 booloader = 裸機(jī)集合,它就是一個(gè)復(fù)雜的單片機(jī)程序。
Linux內(nèi)核:Linux內(nèi)核的最主要目的是去啟動(dòng)APP,APP保存在哪里?保存在“根文件系統(tǒng)”里。“根文件系統(tǒng)”又保存在哪里?在Flash、SD卡等設(shè)備里,甚至可能在網(wǎng)絡(luò)上。所以Linux內(nèi)核要有這些Flash、SD卡里設(shè)備的驅(qū)動(dòng)能力。
不僅如此,Linux內(nèi)核還有進(jìn)程調(diào)度能力、內(nèi)存管理等功能。
所以:Linux內(nèi)核 = 驅(qū)動(dòng)集合 + 進(jìn)程調(diào)度 + 內(nèi)存管理等。
2.3 要學(xué)習(xí)bootloader嗎
Bootloader有很多種,常用的叫u-boot。
在實(shí)際工作中,對(duì)于u-boot基本上是修修改改,甚至不改。但是u-boot本身是很復(fù)雜的,比如為了便于調(diào)試,它支持網(wǎng)絡(luò)功能;有些內(nèi)核是保存在FAT32分區(qū)里,于是它要能解析FAT32分區(qū),讀FAT32分區(qū)的文件。
花那么多精力去學(xué)習(xí)u-boot,但是工作中基本用不到,這對(duì)初學(xué)者很不友善。
所以,對(duì)于初學(xué)者,我建議:理解u-boot的作用、會(huì)使用u-boot的命令,這就可以了。
如果你的工作就是修改、完善bootloader,那么再去研究它吧。
2.4 要學(xué)習(xí)Linux內(nèi)核、要學(xué)習(xí)驅(qū)動(dòng)程序嗎
之前我們說(shuō)過(guò)Linux內(nèi)核 = 驅(qū)動(dòng)集合 + 進(jìn)程調(diào)度 + 內(nèi)存管理等,如果要學(xué)習(xí)Linux內(nèi)核,從驅(qū)動(dòng)程序入手是一個(gè)好辦法。
但是人人都要學(xué)習(xí)Linux內(nèi)核、人人都要學(xué)習(xí)Linux驅(qū)動(dòng)嗎?顯然不是。
作為初學(xué)者,懂幾個(gè)簡(jiǎn)單的驅(qū)動(dòng)程序,有利于工作交流;理解中斷、進(jìn)程、線程的概念,無(wú)論是對(duì)驅(qū)動(dòng)開發(fā)、應(yīng)用程序開發(fā),都是很有好處的。
所以對(duì)于初學(xué)者,建議前期只學(xué)習(xí)這幾個(gè)驅(qū)動(dòng):LED、按鍵、中斷。
LED驅(qū)動(dòng)程序:這是最簡(jiǎn)單的驅(qū)動(dòng)程序。
按鍵驅(qū)動(dòng)程序:它也比較簡(jiǎn)單,從它引入“中斷”。
中斷:從“中斷”它可以引入:休眠-喚醒、進(jìn)程/線程、POLL機(jī)制、異步通知等概念。這些概念無(wú)論是對(duì)驅(qū)動(dòng)開發(fā),還是對(duì)應(yīng)用開發(fā),都很重要。
所以,對(duì)于初學(xué)者,我建議必須學(xué)習(xí)這幾個(gè)驅(qū)動(dòng):LED、按鍵、中斷。
入門之后,如果你想從事內(nèi)核開發(fā)、驅(qū)動(dòng)開發(fā),那么可以去鉆研幾個(gè)驅(qū)動(dòng)程序(輸入系統(tǒng)、I2C總線、SPI總線等),掌握若干個(gè)大型驅(qū)動(dòng)程序后,你對(duì)內(nèi)核的套路就有所了解了,再去研究其他部分(比如進(jìn)程管理、文件系統(tǒng))時(shí)你會(huì)發(fā)現(xiàn)套路是如此通用。
攝像頭(VL42)、聲卡ALSA驅(qū)動(dòng)是Linux中比較復(fù)雜的2類驅(qū)動(dòng),它們是很難的,如果工作與此相關(guān)再去研究。
2.5,要學(xué)習(xí)Linux應(yīng)用程序嗎?先學(xué)一些基礎(chǔ)技能
要學(xué),即使以后你只想研究?jī)?nèi)核,一些基本的應(yīng)用開發(fā)編寫能力也是需要的:
基本設(shè)備的訪問(wèn),比如LCD、輸入設(shè)備
進(jìn)程、線程、進(jìn)程通信、線程同步與互斥
休眠-喚醒、POLL機(jī)制、信號(hào)
網(wǎng)絡(luò)編程
①②③部分的知識(shí),跟驅(qū)動(dòng)有密切的關(guān)系,它們是相輔相承的。
掌握了基本驅(qū)動(dòng)開發(fā)能力、基本應(yīng)用開發(fā)能力之后,在工作中你就可以跟別人友好溝通了,不至于一臉懵逼。
2.6,應(yīng)用程序是怎么啟動(dòng)的?要了解一下根文件系統(tǒng)
你辛辛苦苦寫出了應(yīng)用程序,怎么把它放到板子上,讓它開機(jī)就自動(dòng)啟動(dòng)?
你寫的程序,它依賴于哪些庫(kù),這些庫(kù)放到板子上哪個(gè)目錄?
怎么做一個(gè)可升級(jí)的系統(tǒng)?即使升級(jí)中途斷電了,也要保證程序至少還可以運(yùn)行老的版本?
這些都需要我們了解一下根文件系統(tǒng)。
先了解一下init進(jìn)程:它要讀取配置文件,根據(jù)配置文件啟動(dòng)各個(gè)APP。
了解了init進(jìn)程,你就了解了根文件系統(tǒng)的組成,就可以隨心所欲裁剪系統(tǒng),為你的項(xiàng)目制作出最精簡(jiǎn)的系統(tǒng)。
第3章 學(xué)習(xí)方法
3.1 先不要打破砂鍋問(wèn)到底
嵌入式涉及的東西太多太雜了,如果心里沒(méi)有主線,碰到什么都要去研究個(gè)透徹,最終反而忘記自己要學(xué)什么了。
嵌入式涉及硬件知識(shí)、軟件知識(shí),軟件里涉及匯編、ARM架構(gòu)、C語(yǔ)言、Makefile、Shell;又分為bootloader、內(nèi)核、驅(qū)動(dòng)、基本的APP、GUI。
比如我們會(huì)用到Makefile,了解它的基本規(guī)則,會(huì)用我們提供的Makefile就可以。
不需要深入研究那些make函數(shù),因?yàn)樵诠ぷ髦卸加鞋F(xiàn)成的Makefile給你使用,不需要自己去編寫一套Makefile。何必花上好幾天去深入研究它呢?
比如我們會(huì)用到bootloader,難道又要花上幾個(gè)月來(lái)深入研究u-boot嗎?工作中基本不需要改u-boot,會(huì)用那幾個(gè)命令就可以。
甚至有些學(xué)員先去買本shell的書來(lái)學(xué)習(xí)shell命令,何必?我們?cè)谝曨l中用到什么命令,你不懂時(shí)再去百度一下這些命令就可以了。
不要脫離初學(xué)者的主線:應(yīng)用基礎(chǔ)、驅(qū)動(dòng)基礎(chǔ)。有了這2個(gè)基礎(chǔ)后,你想深入研究某部分時(shí),再去花時(shí)間吧。
3.2 思路要清晰,不怕抄代碼
視頻里的代碼,請(qǐng)你一定要自己去寫一次、寫多次。為什么我現(xiàn)在寫驅(qū)動(dòng)那么熟?我2009年在華清遠(yuǎn)見上課時(shí),
每次上課我都要給學(xué)生寫一次那些驅(qū)動(dòng),十幾次下來(lái)閉著眼睛都知道內(nèi)核的套路了。
記不住那些函數(shù)?我也記不住,我都是去參考同類的驅(qū)動(dòng)程序,這又不是閉卷考試。
但是要理清楚思路,你寫這個(gè)程序要完成什么功能、怎么實(shí)現(xiàn)這些功能?這個(gè)要弄清楚。
有了思路后再寫代碼,不知道怎么寫?沒(méi)關(guān)系,看看視頻,看看示例,然后關(guān)閉視頻看看能否自己寫出來(lái)。
3.3 對(duì)自己的方向很了解,我只能帶你到這里了
我的專長(zhǎng)是操作系統(tǒng),是快速地帶領(lǐng)大家掌握一些項(xiàng)目開發(fā)的基礎(chǔ)知識(shí)。
如果你決定深入研究某方面時(shí),我并不能帶你多久。你要去看源碼,去看這方面的專業(yè)書籍。
比如想深入鉆研內(nèi)核的內(nèi)存管理時(shí),它有頁(yè)表映射(你需要閱讀ARM架構(gòu)的手冊(cè))、SLAB分配器、vmalloc/malloc實(shí)現(xiàn)、mmap實(shí)現(xiàn)、缺頁(yè)中斷、父進(jìn)程子進(jìn)程之間的頁(yè)面管理等等,內(nèi)容非常多。有時(shí)候連書籍都沒(méi)有,你需要直接啃代碼。
當(dāng)你想從事某個(gè)行業(yè)時(shí),就需要深入研究行業(yè)相關(guān)的知識(shí)。
比如CAN總線,它可以寫成一本書:CAN協(xié)議、CAN報(bào)文、Socket CAN、車身網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),CAN應(yīng)用報(bào)文,CAN網(wǎng)絡(luò)管理報(bào)文,CAN診斷報(bào)文。
想做物聯(lián)網(wǎng)網(wǎng)關(guān),需要深入研究MQTT,MQTT協(xié)議相對(duì)簡(jiǎn)單,但是MQTT英文原版協(xié)議有130多頁(yè),中文版有近100頁(yè),是一本小書了。
每個(gè)行業(yè)都有自己的業(yè)務(wù)邏輯,在掌握基本的編程能力之一,你需要結(jié)合具體的業(yè)務(wù)去深入學(xué)習(xí)。
搞嵌入式開發(fā)需要學(xué)習(xí)那些課程??
轉(zhuǎn)載:
嵌入式軟件方面最重要的課程包括:
(1)
嵌入式微處理器結(jié)構(gòu)與應(yīng)用:這是一門嵌入式硬件基礎(chǔ)課程,我院用這門課取代了傳統(tǒng)的“微機(jī)原理與接口”課程(目前國(guó)內(nèi)已有少部分高校IT專業(yè)這樣做了,因?yàn)橹vx86微機(jī)原理與接口很難找到實(shí)際用處,只為教學(xué)而已)。我們說(shuō)過(guò),嵌入式是軟硬件結(jié)合的技術(shù),搞嵌入式軟件的人應(yīng)對(duì)ARM處理器工作原理和接口技術(shù)有充分了解,包括ARM的匯編指令系統(tǒng)。若不了解處理器原理,怎么能控制硬件工作,怎么能寫出節(jié)省內(nèi)存又運(yùn)行高速的最優(yōu)代碼(嵌入式軟件設(shè)計(jì)特別講究時(shí)空效率),怎么能寫出驅(qū)動(dòng)程序(驅(qū)動(dòng)程序都是與硬件打交道的)?很多公司招聘嵌入式軟件人員時(shí)都要求熟悉ARM處理器,將來(lái)若同學(xué)到公司中從事嵌入式軟件開發(fā),公司都會(huì)給你一本該設(shè)備的硬件規(guī)格說(shuō)明書
(xxx
Specification),您必須能看懂其中的內(nèi)存分布和端口使用等最基本的說(shuō)明(就像x86匯編一樣),否則怎么設(shè)計(jì)軟件。有些同學(xué)覺(jué)得嵌入式處理器課程較枯燥,這主要是硬件課程都較抽象的原因,等我們的嵌入式實(shí)驗(yàn)室10月份建好后,您做了一些實(shí)驗(yàn)后就會(huì)覺(jué)得看得見摸得著。還有同學(xué)對(duì)ARM匯編不感興趣,以為嵌入式開發(fā)用C語(yǔ)言就足夠了。其實(shí)不應(yīng)僅是將匯編語(yǔ)言當(dāng)成一個(gè)程序設(shè)計(jì)語(yǔ)言,學(xué)匯編主要是為了掌握處理器工作原理的。一個(gè)不熟悉匯編語(yǔ)言的人,怎么能在該處理器寫出最優(yōu)的C語(yǔ)言代碼。在嵌入式開發(fā)的一些關(guān)鍵部分,有時(shí)還必須寫匯編,如Bootloader等(可能還包括BSP)。特別是在對(duì)速度有極高要求的場(chǎng)合(如DSP處理器的高速圖像采集和圖像解壓縮),目前主要還要靠匯編寫程序(我看到過(guò)很多公司是這樣做的)。當(dāng)您在一個(gè)嵌入式公司工作時(shí),在查看描述原理的手冊(cè)時(shí),可能很多都是用匯編描述的(我就遇到過(guò)),這是因?yàn)楹芏嘤布O(shè)計(jì)人員只會(huì)寫或者喜歡用匯編描述,此時(shí)您就必須看懂匯編程序,否則軟硬件人員可能就無(wú)法交流。很多嵌入式職位招聘時(shí)都要求熟悉匯編。
(2) 嵌入式操作系統(tǒng)類課程
除了WinCE的實(shí)時(shí)性稍差外,大多數(shù)嵌入式操作系統(tǒng)的實(shí)時(shí)性都很強(qiáng),所以也可稱為實(shí)時(shí)操作系統(tǒng)Real Time
Operating
System.從事嵌入式的人至少須掌握一個(gè)嵌入式操作系統(tǒng)(當(dāng)然掌握兩個(gè)更好),這在嵌入式的所有技術(shù)中是最為關(guān)鍵的了。目前最重要的RTOS主要包括:
第一類、傳統(tǒng)的經(jīng)典RTOS:最主要的便是Vxworks操作系統(tǒng),以及其Tornado開發(fā)平臺(tái)。Vxworks因出現(xiàn)稍早,實(shí)時(shí)性很強(qiáng)(據(jù)說(shuō)可在1ms內(nèi)響應(yīng)外部事件請(qǐng)求),并且內(nèi)核可極微(據(jù)說(shuō)最小可8K),可靠性較高等,所以在北美,Vxworks占據(jù)了嵌入式系統(tǒng)的多半疆山。特別是在通信設(shè)備等實(shí)時(shí)性要求較高的系統(tǒng)中,幾乎非Vxworks莫屬。Vxworks的很多概念和技術(shù)都和Linux很類似,主要是C語(yǔ)言開發(fā)。像Bell-alcatel、Lucent、華為等通信企業(yè)在開發(fā)產(chǎn)品時(shí),Vxworks用得很多。但Vxworks因價(jià)格很高,所以一些小公司或小產(chǎn)品中往往用不起。目前很多公司都在往嵌入式Linux轉(zhuǎn)(聽說(shuō)華為目前正在這樣轉(zhuǎn))。但無(wú)論如何,Vxworks在一段長(zhǎng)時(shí)間內(nèi)仍是不可動(dòng)搖的。與Vxworks類似的稍有名的實(shí)時(shí)操作系統(tǒng)還有pSOS、QNX、Nucleus等RTOS。
第二類、嵌入式Linux操作系統(tǒng):Linux的前途除作為服務(wù)器操作系統(tǒng)外,最成功的便是在嵌入式領(lǐng)域的應(yīng)用,原因當(dāng)然是免費(fèi)、開源、支持軟件多、呼擁者眾,這樣嵌入式產(chǎn)品成本會(huì)低。Linux本身不是一個(gè)為嵌入式設(shè)計(jì)的操作系統(tǒng),不是微內(nèi)核的,并且實(shí)時(shí)性不強(qiáng)。目前應(yīng)用在嵌入式領(lǐng)域的Linux系統(tǒng)主要有兩類:一類是專為嵌入式設(shè)計(jì)的已被裁減過(guò)的Linux系統(tǒng),最常用的是uClinux(不帶MMU功能),目前占較大應(yīng)用份額,可在ARM7上跑;另一類是跑在ARM
9上的,一般是將Linux
2.4.18內(nèi)核移植在其上,可使用更多的Linux功能(當(dāng)然uClinux更可跑在ARM
9上)。很多人預(yù)測(cè),嵌入式Linux預(yù)計(jì)將占嵌入式操作系統(tǒng)的50%以上份額,非常重要。缺點(diǎn)是熟悉Linux的人太少,開發(fā)難度稍大。另外,目前我們能發(fā)現(xiàn)很多教材和很多大學(xué)都以u(píng)cOS/II為教學(xué)用實(shí)時(shí)操作系統(tǒng),這主要是由于ucOS/II較簡(jiǎn)單,且開源,非常適合入門者學(xué)習(xí)實(shí)時(shí)操作系統(tǒng)原理,但由于ucOS/II功能有限,實(shí)用用得較少,所以我院不將其作為教學(xué)重點(diǎn),要學(xué)習(xí)就應(yīng)學(xué)直接實(shí)用的,比如
uClinux就很實(shí)用。況且熟悉了Linux開發(fā),不僅在嵌入式領(lǐng)域有用,對(duì)開發(fā)Linux應(yīng)用軟件,對(duì)加深操作系統(tǒng)的認(rèn)識(shí)也有幫助,可謂一舉多得。據(jù)我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式開發(fā),F(xiàn)ujitum則是在自己的處理器上大搞Linux開發(fā)。目前在嵌入式Linux領(lǐng)域,以下幾個(gè)方面的人特別難找,一是能將Linux移植到某個(gè)新型號(hào)的開發(fā)版上;二是能寫Linux驅(qū)動(dòng)程序的人;三是熟悉Linux內(nèi)核裁減和優(yōu)化的人。我院在該嵌入式Linux方面的課程系列是:本科生操作系統(tǒng)必修課,然后是Linux程序設(shè)計(jì)選修課,最后是嵌入式Linux系統(tǒng)選修課。我院在Linux方面目前已有較強(qiáng)力量,魏老師和張老師熟悉Linux開發(fā),金老師和唐老師熟悉Linux系統(tǒng)管理。
第三類、 Windows
CE嵌入式操作系統(tǒng):Microsoft也看準(zhǔn)了嵌入式的巨大市場(chǎng),MS永遠(yuǎn)是最厲害的,WinCE出來(lái)只有幾年時(shí)間,但目前已占據(jù)了很大市場(chǎng)份額,特別是在PDA、手機(jī)、顯示儀表等界面要求較高或者要求快速開發(fā)的場(chǎng)合,WinCE目前已很流行(據(jù)說(shuō)有一家賣工控機(jī)的公司板子賣得太好,以至來(lái)不及為客戶裁減WinCE)。WinCE目前主要為4.2版(.NET),開發(fā)平臺(tái)主要為WinCE Platform Builder,有時(shí)也用EVC環(huán)境開發(fā)一些較上層的應(yīng)用,由于WinCE開發(fā)都是大家熟悉的VC++環(huán)境,所以我院學(xué)過(guò)Windows程序設(shè)計(jì)課程的同學(xué)都不會(huì)有多大難度,這也是WinCE容易被人們接受的原因,開發(fā)環(huán)境方便快速,微軟的強(qiáng)大技術(shù)支持,WinCE開發(fā)難度遠(yuǎn)低于嵌入式Linux。對(duì)于急于完成,不想拿嵌入式Linux冒險(xiǎn)的開發(fā)場(chǎng)合,WinCE是最合適了(找嵌入式Linux的人可沒(méi)那么好找的),畢竟公司不能像學(xué)生學(xué)習(xí)那樣試試看,保證開發(fā)成功更重要。根據(jù)不同的側(cè)重點(diǎn),WinCE還有兩個(gè)特殊版本,一個(gè)是MS PocketPC操作系統(tǒng)專用于PDA上(掌上電腦),另一個(gè)是MS SmartPhone操作系統(tǒng)用于智能手機(jī)上(帶PDA功能的手機(jī)),兩者也都屬于WinCE平臺(tái)。在PDA和手機(jī)市場(chǎng)上,除WinCE外,著名的PDA嵌入式操作系統(tǒng)還有Palm OS(因出現(xiàn)很早,很有名)、Symbian等,但在WinCE的強(qiáng)勁沖擊下,Palm和Symbian來(lái)日還能有多長(zhǎng)?我院可能是全國(guó)高校中唯一一家開設(shè)專門的“Windows CE嵌入式操作系統(tǒng)“課程的學(xué)校,這主要是基于以下原因:我院本身前面便有Windows程序設(shè)計(jì)課程,同學(xué)學(xué)過(guò)VC++后再學(xué)WinCE,非常方便自然,通過(guò)學(xué)習(xí)WinCE同樣也可了解嵌入式軟件的一般開發(fā)過(guò)程,對(duì)Linux有懼怕心理的同學(xué)也很合適。很顯然,嵌入式Linux永遠(yuǎn)不可能替代WinCE,而且將來(lái)誰(shuí)占份額大還很難講,畢竟很多人更愿意接受MS的平臺(tái),就像各國(guó)政府都在大力推LINUX已好長(zhǎng)時(shí)間,但您能看到幾個(gè)在PC機(jī)上真正使用LINUX的用戶?據(jù)我觀察,目前在嵌入式平臺(tái)上,LINUX是叫得最響,但還是WinCE實(shí)際用得更多.嵌入式LINUX可能更多地是一些有長(zhǎng)遠(yuǎn)產(chǎn)品計(jì)劃的公司,為降低成本而進(jìn)行長(zhǎng)遠(yuǎn)考慮;
二是微軟亞洲研究院對(duì)我院WinCE課程的支持計(jì)劃,我們也很希望將來(lái)我院能有同學(xué)通過(guò)微軟的面試去實(shí)習(xí)。WinCE和多媒體(如MPEG技術(shù))是微軟亞洲工程院目前做得較多的項(xiàng)目領(lǐng)域之一,他們很需要精通WinCE的人。
總結(jié)關(guān)于嵌入式操作系統(tǒng)類課程,若您覺(jué)得自己功底較深且能鉆研下去,則可去學(xué)嵌入式Linux;若您覺(jué)得自己VC++功底較好且想短平快地學(xué)嵌入式開發(fā),則我院的WinCE課程是最好的選擇。
(3) 嵌入式開發(fā)的其它相關(guān)軟件課程
搞嵌入式若能熟悉嵌入式應(yīng)用的一些主要領(lǐng)域,這樣的人更受企業(yè)歡迎。主要的相關(guān)領(lǐng)域包括:
A、數(shù)字圖像壓縮技術(shù):這是嵌入式最重要最熱門的應(yīng)用領(lǐng)域之一,主要是應(yīng)掌握MPEG編解碼算法和技術(shù),如DVD、MP3、PDA、高精電視、機(jī)頂盒等都涉及MPEG高速解碼問(wèn)題。為此,我院已預(yù)訂了一位能開設(shè)數(shù)字圖像處理課程的博士。
B、通信協(xié)議及編程技術(shù):這包括傳統(tǒng)的TCP/IP協(xié)議和熱門的無(wú)線通信協(xié)議。首先,大多數(shù)嵌入式設(shè)備都要連入局域網(wǎng)或Internet,所以首先應(yīng)掌握TCP/IP協(xié)議及其編程,這是需首要掌握的基本技術(shù);其次,無(wú)線通信是目前的大趨勢(shì),所以掌握無(wú)線通信協(xié)議及編程也是是很重要的。無(wú)結(jié)通信協(xié)議包括無(wú)線局域網(wǎng)通信協(xié)議802.11系列,Bluetooth,以及移動(dòng)通信(如GPRS、GSM、CDMA等)。
C、網(wǎng)絡(luò)與信息安全技術(shù):如加密技術(shù),數(shù)字證書CA等。我院有這方面的選修課。
D、DSP技術(shù):DSP是Digital Signal
Process數(shù)字信號(hào)處理的意思,DSP處理器通過(guò)硬件實(shí)現(xiàn)數(shù)字信號(hào)處理算法,如高速數(shù)據(jù)采集、壓縮、解壓縮、通信等。數(shù)字信號(hào)處理是電子、通信等硬件專業(yè)的課程,對(duì)于搞軟件的人若能了解一下最好。目前DSP人才較缺。如果有信號(hào)與系統(tǒng)、數(shù)字信號(hào)處理等課程基礎(chǔ),對(duì)于學(xué)習(xí)MPEG編解碼原理會(huì)有很大幫助。
(4)嵌入式開發(fā)的相關(guān)硬件基礎(chǔ)
對(duì)于軟件工程專業(yè)的學(xué)生,從事嵌入式軟件開發(fā),像數(shù)字電路、計(jì)算機(jī)組成原理、嵌入式微處理器結(jié)構(gòu)等硬件課程是較重要的。另外,匯編語(yǔ)言、C/C++、數(shù)據(jù)結(jié)構(gòu)和算法、特別是操作系統(tǒng)等軟件基礎(chǔ)課也是十分重要的。我們的主要目地是能看懂硬件工作原理,但重點(diǎn)應(yīng)是在嵌入式軟件,特別操作系統(tǒng)級(jí)軟件,那將是我們的優(yōu)勢(shì)。
我們的研究生里有些是學(xué)電子、通信類專業(yè)過(guò)來(lái)的,有較好的模擬電路和單片機(jī)基礎(chǔ),學(xué)嵌入式非常合適。嵌入式本身就是從單片機(jī)發(fā)展過(guò)來(lái)的,只是單片機(jī)不帶OS,而現(xiàn)在很多嵌入式應(yīng)用越來(lái)越復(fù)雜,以至不得不引入嵌入式操作系統(tǒng)。另外,為追求更高速的信號(hào)處理速度,現(xiàn)在在一些速度要求較高的場(chǎng)合,有不少公司是將一些DSP算法,如MPEG壓縮解壓縮算法等用硬件來(lái)實(shí)現(xiàn),這就涉及到HDL數(shù)字電路設(shè)計(jì)技術(shù)及其FPGA/IP核實(shí)現(xiàn)技術(shù),這方面的人目前市場(chǎng)上也很缺。
嵌入式軟件開發(fā)培訓(xùn)課程的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于嵌入式軟件 培訓(xùn)、嵌入式軟件開發(fā)培訓(xùn)課程的信息別忘了在本站進(jìn)行查找喔。