為什么想寫這個(gè)帖子
只要提到嵌入式,一般碼農(nóng)心里就會(huì)產(chǎn)生兩種想法:一種是“嵌入式系統(tǒng)特別簡(jiǎn)單,學(xué)51單片機(jī)的時(shí)候,也就是說一個(gè)星期的事情”;另一種想法是“嵌入式太難了,Linux操作系統(tǒng)特別復(fù)雜就不說了,還有各種各樣的協(xié)議棧、算法等,當(dāng)客戶提到一個(gè)新的需求的時(shí)候,那改代碼的酸爽,簡(jiǎn)直了”
確實(shí),不同層次的嵌入式工程師對(duì)嵌入式的理解都不一樣,特別的,越是初級(jí)的程序員,越感覺嵌入式簡(jiǎn)單,反而是越是老鳥,越是感覺嵌入式的復(fù)雜與龐大。
我也在這個(gè)行業(yè)摸打滾爬好幾年的人,再加上大學(xué)時(shí)期學(xué)習(xí)的四年,到現(xiàn)在為止整整十年了,從剛開始學(xué)C語言,然后2天入門51單片機(jī),一直到后來工作的時(shí)候做產(chǎn)品,玩藍(lán)牙協(xié)議棧,真心感覺,這個(gè)行業(yè)簡(jiǎn)直就是一個(gè)大水坑:越走的遠(yuǎn),越感覺水的深,有時(shí)候深度簡(jiǎn)直是斷崖式的。
老鳥肯定深有感觸,我們掌握C語言語法,了解各種各樣單片機(jī)的外設(shè)用法及外圍電路芯片的用法,那只是做出產(chǎn)品的最基本的一步,真正做的時(shí)候,各種細(xì)節(jié)都要考慮,我在這里舉幾個(gè)常見的問題:
1.啥叫堆、棧、隊(duì)列、鏈表?他們是做什么用的?或者說為啥牛X的協(xié)議棧,通篇都是指針在那亂跳?
2.各段代碼有沒有容錯(cuò)機(jī)制,萬一這邊出現(xiàn)問題,代碼應(yīng)該執(zhí)行什么比較合適?
3.辛辛苦苦寫的外設(shè)驅(qū)動(dòng),如果換個(gè)處理器能不能直接使用?
4.為什么自己寫的代碼就像亂麻一樣,沒有一點(diǎn)邏輯順序?為什么客戶改一個(gè)需求我的程序就要推到重做?
5.花了好久做出的產(chǎn)品,為什么在測(cè)試那一步就過不去,是測(cè)試人員手臭嗎?
6.產(chǎn)品做好了也賣出去了,但是為啥客戶反饋的問題辣么多?
……
我這里也就是說提到一些很基礎(chǔ)的問題,初學(xué)者肯定暫時(shí)還感受不到其中的痛苦,因?yàn)樗麄冎魂P(guān)心的如何把當(dāng)前的功能實(shí)現(xiàn)了,至于說有什么有效率的算法、程序代碼的邏輯性之類的,根本不在關(guān)心的范圍之內(nèi)。不信的話可以嘗試一下如下這個(gè)問題:如何把用字符串寫出來的數(shù)學(xué)式子進(jìn)行計(jì)算,比如把字符串“(1+3)5/10[5+7*(51-2)]"這個(gè)式子的值計(jì)算出來,別看這個(gè)題簡(jiǎn)單,可能有些老油條都很難很迅速的完成。
本系列帖子主要講哪些內(nèi)容呢
C語言用法篇
C語言基本語法誰都會(huì)用,但是可能有些程序員連指針都用的不熟練,這里將花大篇幅,把C語言的高級(jí)用法重新梳理一遍。然后再講解一下協(xié)議棧常用的堆、棧、隊(duì)列、鏈表。并在此基礎(chǔ)上如何設(shè)計(jì)一個(gè)類型無關(guān)、檢測(cè)方法無關(guān)、可移植的、接口簡(jiǎn)單的、面向?qū)ο蟮摹⒖芍貥?gòu)的算法庫(kù)函數(shù)?。讓這些常用的算法結(jié)構(gòu)成為你自己的用的最順手的利器。所以不要小看這一章節(jié)。
通訊篇
利用前邊梳理的各種算法,來進(jìn)行數(shù)據(jù)傳輸控制,你會(huì)發(fā)現(xiàn)事半功倍。這一篇著重介紹數(shù)據(jù)透?jìng)?、腳本詞法分析、AT指令分析、數(shù)據(jù)裝載分析與加密等通訊行業(yè)中常見的一些功能,拋磚引玉,如果大家遇到此類相關(guān)的問題時(shí),不至于兩眼一抹黑,至少知道如何去分析,按照思路設(shè)計(jì)一個(gè)自己用到的算法。
硬件驅(qū)動(dòng)篇
不同的處理器、不同外設(shè)都有不同的驅(qū)動(dòng)方法,我們以鍵盤操作為例,如何設(shè)計(jì)一個(gè)健壯的、功能強(qiáng)大的、可移植的按鍵驅(qū)動(dòng)庫(kù)。同樣的思路,我們可以拿數(shù)碼管、點(diǎn)陣、LCD入手,設(shè)計(jì)一個(gè)同樣接口的顯示驅(qū)動(dòng)庫(kù)。
架構(gòu)篇
架構(gòu)篇是整本書的核心,介紹如何編寫一些好維護(hù)、好移植的代碼;如何設(shè)計(jì)程序流程讓自己的代碼邏輯清晰;如何對(duì)自己的代碼進(jìn)行分層,方便讓多人對(duì)代碼進(jìn)行共同設(shè)計(jì)。這些都是作為項(xiàng)目經(jīng)理所要考慮的內(nèi)容。
測(cè)試篇
對(duì)于大多數(shù)程序員來說,喜歡先實(shí)現(xiàn)功能然后再整體測(cè)試,這種方法對(duì)于小程序系統(tǒng)來說確實(shí)效率特別高,但是對(duì)于大項(xiàng)目來說,這可能會(huì)出現(xiàn)災(zāi)難性的后果。這一篇我跟大家一塊探討一下嵌入式系統(tǒng)中的一些常用的測(cè)試方法,相信我,當(dāng)你學(xué)會(huì)這些方法的時(shí)候,絕對(duì)會(huì)讓你愛上這種高效率的測(cè)試?yán)鞯摹?/p>
當(dāng)然,內(nèi)容也不少,我在這里先立下flag,我可保證不來能寫完,時(shí)間對(duì)了,心情好了,就過來寫一波,希望大家能來捧捧場(chǎng)。