嵌入式系統(tǒng)C語言開發(fā)技巧
一直以來,嵌入式都是大家的關(guān)注焦點(diǎn)之一。因此針對大家的興趣點(diǎn)所在,小編將為大家?guī)砬度胧降南嚓P(guān)介紹,詳細(xì)內(nèi)容請看下文。
一、嵌入式為什么要選擇C語言
嵌入式開發(fā)讓軟硬件開發(fā)變得更加智能,為什么C語言適用于嵌入式開發(fā)呢?主要是因?yàn)橄鄬τ谄渌母呒?jí)語言編程,C語言的語言特點(diǎn)對于嵌入式開發(fā)來說是最適合的。簡單的說就是C語言是面對結(jié)構(gòu)語言,和面對對象語言不同,適用在解決嵌入式開發(fā)這種具體性的工作上。
C語言的特點(diǎn):
1、可讀性好,容易移植,跨平臺(tái)使用,無需CPU指令,能從一個(gè)平臺(tái)切換到另一個(gè)平臺(tái),不需要修改更多代碼,能夠在多種不同結(jié)構(gòu)的軟硬件平臺(tái)使用。
2、使用靈活緊湊、表達(dá)能力強(qiáng),可以直接訪問硬件,特別是在進(jìn)行硬件復(fù)雜操作時(shí)使用。
3、C語言可以直接生成硬件識(shí)別的機(jī)器碼,運(yùn)行效率高。
4、C語言功能豐富、應(yīng)用范圍廣,融合高級(jí)和低級(jí)語言的特點(diǎn),既可以編寫系統(tǒng)軟件又可以編寫應(yīng)用軟件;五是語法機(jī)制簡單,可讀性強(qiáng),能夠很容易的被人們理解。
5、C語言編程方式靈活,嵌入式操作系統(tǒng)中都有C語言仿真調(diào)試工具,這樣編程調(diào)試非常的靈活方便。
6、C語言編寫的程序非常的模塊化,后期的維護(hù)管理非常方便。
在進(jìn)行嵌入式開發(fā)時(shí),首先要考慮到產(chǎn)品性能、開發(fā)的安全性和開發(fā)效率等問題。在性能方面,匯編語言執(zhí)行效率是最快的,但是匯編本身是一種低級(jí)語言,其安全性和開發(fā)效率是最低的;其他的高級(jí)語言運(yùn)行效率低,源代碼和目標(biāo)代碼偏長,占用的內(nèi)存偏大,會(huì)影響使用性能,所以C語言的優(yōu)勢就體現(xiàn)出來了。
但是C語言也有著一些缺點(diǎn),例如代碼重復(fù)使用性、代碼擴(kuò)展性和改進(jìn)維護(hù)性較差,在開發(fā)過程中,我們要規(guī)避這些問題,提高代碼質(zhì)量,靈活運(yùn)用C語言的強(qiáng)大功能,編寫出易維護(hù)、高效率和高可靠性的嵌入式代碼,讓嵌入式開發(fā)產(chǎn)品更加完善。
二、嵌入式系統(tǒng)C語言開發(fā)技巧
1、適當(dāng)?shù)氖褂煤?
在C程序中使用宏代碼可以提高程序的執(zhí)行效率。宏代碼本身不是函數(shù),但使用起來像函數(shù)。函數(shù)調(diào)用要使用系統(tǒng)的棧來保存數(shù)據(jù),同時(shí) CPU 在函數(shù)調(diào)用時(shí)需要保存和恢復(fù)當(dāng)前的現(xiàn)場,進(jìn)行進(jìn)棧和出棧操作,所以函數(shù)調(diào)用也需要 CPU時(shí)間。而宏定義就沒有這個(gè)問題:宏定義僅僅作為預(yù)先寫好的代碼嵌入到當(dāng)前程序中,不產(chǎn)生函數(shù)調(diào)用,所占用的僅僅是一些空間,省去了參數(shù)壓棧,生成匯編語言的 call 調(diào)用,返回參數(shù),執(zhí)行 return等過程,從而提高了程序的執(zhí)行速度。雖然宏破壞了程序的可讀性,使排錯(cuò)更加麻煩,但對于嵌入式系統(tǒng),為了達(dá)到要求的性能,嵌入代碼常常是必須的做法。
2、內(nèi)嵌匯編
程序中對時(shí)間要求苛刻的部分可以用內(nèi)嵌匯編來重寫,以帶來速度上的顯著提高。但是,開發(fā)和測試匯編代碼是一件辛苦的工作,它將花費(fèi)更長的時(shí)間,因而要慎重選擇要用匯編的部分。在程序中,存在一個(gè)80-20原3、提高循環(huán)語言的效率
在 C 語言中循環(huán)語句使用頻繁,提高循環(huán)體效率的基本辦法就是降低循環(huán)體的復(fù)雜性:
在多重循環(huán)中,應(yīng)將最長的循環(huán)放在最內(nèi)層,最短的循環(huán)放在最外層。這樣可以減少 CPU跨切循環(huán)的次數(shù)。
4、提高 switch 語句的效率
switch 語句是 C 語言中常用的選擇語句, 在編譯時(shí)會(huì)產(chǎn)生if- else- if 嵌套代碼,并按照順序進(jìn)行比較,發(fā)現(xiàn)匹配時(shí),就跳轉(zhuǎn)到滿足條件的語句執(zhí)行。
當(dāng) switch 語句中的 case 標(biāo)號(hào)很多時(shí),為了減少比較的次數(shù),可以把發(fā)生頻率相對高的條件放到第一位或者把整個(gè) switch 語句轉(zhuǎn)化嵌套 switch 語句。把發(fā)生頻率高的 case 標(biāo)號(hào)放在最外層的 switch 語句中,發(fā)生相對頻率相對低的 case 標(biāo)號(hào)放在另外的 switch 語句中。
5、避免使用標(biāo)準(zhǔn)庫
使用 C語言標(biāo)準(zhǔn)庫可以加快開發(fā)進(jìn)度,但由于標(biāo)準(zhǔn)庫需要設(shè)法處理用戶所有可能遇到的情況,所以很多標(biāo)準(zhǔn)庫代碼很大。比如標(biāo)準(zhǔn)庫中的 sprintf函數(shù)非常大。這個(gè)龐大的代碼中有很大一部分用于處理浮點(diǎn)數(shù),如果程序中不需要格式化浮點(diǎn)數(shù)值( 如%f),程序設(shè)計(jì)人員就可以根據(jù)實(shí)際情況用少量的代碼實(shí)現(xiàn)這個(gè)功能。
上述所有信息便是小編這次為大家推薦的有關(guān)嵌入式的內(nèi)容,希望大家能夠喜歡,想了解更多有關(guān)它的信息或者其它內(nèi)容,請關(guān)注我們網(wǎng)站哦。