嵌入式高效編程(一)——簡潔,嵌入式編程
兩年的工作經驗心得總結一下:怎麼做到嵌入式高效編程。
1、高效編程的概念
- 程式的效能高≠高效編程
- 精確實現預定功能
- 調試時間在整個開發週期內佔比低
- 代碼簡潔
- 代碼便於維護的代碼
- 高效編程就是快速寫出高品質的代碼
2、高效編程的要點
3、高效編程要點:簡潔簡潔可以簡單理解為無重複的量和代碼,無無效代碼或邏輯。
3、1 用宏代替常數
double circle_area(double r){return 3.14 * r * r;}#define PI3.1415926#define float_tdoublefloat_t circle_area(float_t r){return PI * r * r;}3、2 用宏表示重複的計算公式或操作
#define point_reset(p)((p % 4) < 2) ? (p / 4 * 4) : (p / 4 * 4 + 4)xxx = point_reset(xxx)yyy = point_reset(yyy)
3、3 用同一個量來表達一致的量
pAudioBuf = malloc(一個稍複雜的計算運算式exp);…memcpy(pAudioBuf, src, 一個稍複雜的計算運算式exp);iAudioSize = 一個稍複雜的計算運算式exp;pAudioBuf = malloc(iAudioSize);…memcpy(pAudioBuf, src, iAudioSize);
Funxxx(){for (i = 0; i < 16; i++){…}for (i = 0; I < 16; i++){}}Funxxx(){iCnt = 16;for (i = 0; i < iCnt; i++){}for (i = 0; I < iCnt; i++){}}3、4 通用的代碼邏輯獨立成函數3、5 函數只定義一份3、6 無效的邏輯判斷
例一{…if (res){return rs;}else{return 0;}}//修改{…return res;}
例二{…if (res){return xxxx;}else{return 0;}}修改{…return res ? xxx : 0;}3、7 數組的應用
例:{…if (0 == res){return xxx1;}else if (1 = res){return xxx2;}else if (2 = res){return xxx3}….}修改:{vals[] = {xxx1, xxx2, xxx3, …};…return vals[res];}3、8 模板應用
double double_add(double a, double b){return a + b;} float float_add(float a, float b){return a + b;}int int_add(int a, int b){return a + b;}#define DECLARE_MATH_FUN(name, type, op) \type type##_##name(type a, type b) \{ \return (type)(a op b);\}DECLARE_MATH_FUN(add, int, +);DECLARE_MATH_FUN(add, float, +);DECLARE_MATH_FUN(add, double, +);DECLARE_MATH_FUN(sub, int, -);DECLARE_MATH_FUN(sub, float, -);DECLARE_MATH_FUN(sub, double, -);3、9 簡潔代碼的惡敵
- 複製&粘貼
- 懶惰的程式員
- 不思考的程式員
- 沒長進的程式員
- 以代碼量的多寡論成就感的程式員
3、10 重複代碼的問題
- 程式體積變大
- 維護成本增加
- 容易漏改問題
- 迷惑人,對排查問題帶來幹擾
- 容易引發不一致性,造成程式運行意外
代碼簡潔暫且寫到這裡,以後工作中遇到典型問題繼續更新。
什叫做 嵌入式編程?
簡單點吧:白話其名曰:裁剪式系統編程。
-----
一個作業系統,需要什嗎?
即時性,多任務,還有驅動,應用。
----
一個裁剪式系統,幹掉不必要的驅動,加上特有的驅動。
比如蜂鳴通報器,我只要個蜂鳴,視頻驅動,鍵盤驅動、滑鼠啥全不要,是謂裁剪。
----
軟體編程玩的是啥?
變數、函數、應用
嵌入式玩的是啥?
記憶體、寄存、多線程、驅動,提供底層API的給應用,.
嵌入式編程需要懂什?
嵌入式編程需要懂C語言,Linux,還有ARM的知識。
關於如何學習嵌入式,我剛才看到一篇很不錯的文章,是一個專科生介紹自己如何自學嵌入式,並找到嵌入式的工作,裡面介紹了他的學習方法和學習過程,希望對你有協助。
專科生學嵌入式到找到工作的前前後後--學習的榜樣
先做個自我介紹,我07年考上一所很爛專科民辦的學校,學的是生物專業,具體的學校名稱我就不說出來獻醜了。09年我就輟學了,我在那樣的學校,一年學費要1萬多,但是根本沒有人學習,我實在看不到希望,我就退學了。
退學後我也迷茫,大專都沒有畢業,我真的不知道我能幹什麼,我在糾結著我能做什麼。所以輟學後我一段時間,我想去找工作,因為我比較沉默寡言,不是很會說話,我不適合去應聘做業務。我想應聘做技術的,可是處處碰壁。
一次偶然的機會,我才聽到嵌入式這個行業。那天我去新華書店,在電腦分類那邊想找本書學習。後來有個女孩子走過來,問我是不是讀電腦的,有沒有興趣學習嵌入式,然後給我介紹了一下嵌入式現在的火熱情況,告訴我學嵌入式多麼的有前景,給我了一份傳單,嵌入式培訓的廣告。聽了她的介紹,我心裡痒痒的,確實我很想去學會一門自己的技術,靠自己的雙手吃飯。
回家後,我就上網查了下嵌入式,確實是當今比較熱門的行業,也是比較好找工作的,工資也是相對比較高。我就下決心想學嵌入式了。於是我去找嵌入式培訓的相關資訊,說真的,我也很迷茫,我不知道培訓是否真的能像他們宣傳的那樣好,所以我就想瞭解一段時間再做打算。
後來,我在百度知道看到一篇讓我很鼓舞的文章《如何學習嵌入式》,是一個嵌入式高手介紹沒有基礎的朋友怎麼自學入門學嵌入式,文章寫的很好,包含了如何學習,該怎麼學習。他提到一個方法就是看視頻,因為看書實在太枯燥和費解的,很多我們也看不懂。這點我真的很認同,我自己看書往往看不了幾頁。
我在想,為什麼別人都能自學成才,我也可以的!我要相信自己,所以我就想自學,如果實在學不會我再去培訓。
主意一定,我就去搜尋嵌入式的視頻,雖然零星找到一些嵌入式的視頻,但是都不系統,我是想找一個能夠告訴我該怎麼學的視頻,一套從入門到精通的視頻,一個比較完整的資料,最好能有老師教,不懂可以請教的。
後來我又找到一份很好的視頻,是在嵌入式學習網推出的一份視頻《嵌入式視頻教程--零基礎手把手教你學嵌入式》,裡面的教程還不錯,很完整,可以讓我從基礎的開始學起。視頻不便宜啊,但是我也忍了,畢竟買幾本書都要幾百了,何況他們還有半年的技術諮詢和服務,算值了。
======這裡我就不給出他們的網址,如果你也想要嵌入式視頻的話,那就自己去百度搜尋:零基礎手把手教你學嵌入式。
下面介紹下我的學習流程,希望對和我一樣完全沒有基礎的朋友有所協助。
收到他們寄過來的光碟片後,我就開始學習了,由於我沒有什麼基礎,我就從最簡單的C語言視頻教程學起,話說簡單,其實我還是很多不懂的,我只好請教他們,他們還是很熱心的,都幫我解決了。C語言我差不多學了一個禮拜,接下來我就學了linux的基本命令,我在他們提供linux虛擬機器上都有做練習,敲linux的基本命令,寫簡單的C語言代碼,差不多也就三個禮拜。我每天都在不停的寫一些簡單的代碼,這樣一月後我基本掌握了C和linux的基本操作。
接下來我就去學習了人家的視頻的培訓教程,是整套的,和去參加培訓沒有多大的區別,這一看就是兩個月,學習了ARM的基本原理,學習嵌入式系統的概念,也掌握了嵌入式的環境的一些搭建,對linux也有更深層......餘下全文>>