日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

嵌入式编程C语言提高代码效率的14种方法

發(fā)布時(shí)間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式编程C语言提高代码效率的14种方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ? ? ? ? ? 嵌入式編程C語(yǔ)言提高代碼效率的14種方法

?

1、在可能的情況下使用typedef替代define.當(dāng)然有時(shí)候你無(wú)法避免define,但是typedef更好。

typedef??int*??INT_PTR;? INT_PTR??a?,b;#?define?INT_PTR??int*;? INT_PTR??a?,b; int?x?=?4;? if(x?=?1) {x?=?x?+?2;printf("%d",x);//?Output?is?3?? }int?x?=?4;if(1?=?x){x?=?x?+?2;?printf("%d",x);?//?Compilation?error }

在這個(gè)宏定義中,a是一個(gè)指向整數(shù)的指針,而b是只有一個(gè)整數(shù)聲明。使用typedef?a和b都是整數(shù)的指針。

2、在一個(gè)邏輯條件語(yǔ)句中常數(shù)項(xiàng)永遠(yuǎn)在左側(cè)。

使用"="賦值運(yùn)算符,替代"=="相等運(yùn)算符,這是個(gè)常見的輸入錯(cuò)誤。常數(shù)項(xiàng)放在左側(cè),將產(chǎn)生一個(gè)編譯時(shí)錯(cuò)誤,讓你輕松捕獲你的錯(cuò)誤。注:"="是賦值運(yùn)算符。b=1會(huì)設(shè)置變量b等于值1。"=="相等運(yùn)算符。如果左側(cè)等于右側(cè),返回true,否則返回false。

3、確保聲明和定義是靜態(tài)的,除非您希望從不同的文件中調(diào)用該函數(shù)。


在同一文件函數(shù)對(duì)其他函數(shù)可見,才稱之為靜態(tài)函數(shù)。它限制其他訪問內(nèi)部函數(shù),如果我們希望從外界隱藏該函數(shù)。
現(xiàn)在我們并不需要為內(nèi)部函數(shù)創(chuàng)建頭文件,其他看不到該函數(shù)。靜態(tài)聲明一個(gè)函數(shù)的優(yōu)點(diǎn)包括:

(1)兩個(gè)或兩個(gè)以上具有相同名稱的靜態(tài)函數(shù),可用于在不同的文件。

(2)編譯消耗減少,因?yàn)闆]有外部符號(hào)處理。


4、節(jié)約內(nèi)存(內(nèi)存對(duì)齊和填充的概念)

struct{??char c;?int i;?short s; }str_1;??struct{?char c;?short s;?int i; }str_2;?


假設(shè)一個(gè)字符需要1個(gè)字節(jié),short占用2個(gè)字節(jié)和int需要4字節(jié)的內(nèi)存。起初,我們會(huì)認(rèn)為上面定義的結(jié)構(gòu)是相同的,因此占據(jù)相同數(shù)量的內(nèi)存。然而,而str_1占用12個(gè)字節(jié),第二個(gè)結(jié)構(gòu)只需要8個(gè)字節(jié)?這怎么可能呢???
請(qǐng)注意,在第一個(gè)結(jié)構(gòu),3個(gè)不同的4個(gè)字節(jié)被分配到三種數(shù)據(jù)類型,而在第二個(gè)結(jié)構(gòu)的前4個(gè)自己char和short可以被采用,int可以采納在第二個(gè)的4個(gè)字節(jié)邊界(一共8個(gè)字節(jié))


5、使用無(wú)符號(hào)整數(shù),而不是整數(shù)的,如果你知道的值將永遠(yuǎn)是否定的。


有些處理器可以處理無(wú)符號(hào)的整數(shù),比有符號(hào)整數(shù)的運(yùn)算速度要快。(這也是很好的實(shí)踐,幫助self-documenting代碼)

6、switch-case語(yǔ)句。在程序中經(jīng)常會(huì)使用switch-case語(yǔ)句


每一個(gè)由機(jī)器語(yǔ)言實(shí)現(xiàn)的測(cè)試和跳轉(zhuǎn)僅僅是為了決定下一步要做什么,就浪費(fèi)了處理器時(shí)間。為了提高速度,可以把具體的情況按照它們發(fā)生的相對(duì)頻率排序。即把最可能發(fā)生的情況放在第一,最不可能發(fā)生的情況放在最后,這樣會(huì)減少平均的代碼執(zhí)行時(shí)間。當(dāng)switch語(yǔ)句中的case標(biāo)號(hào)很多時(shí),為了減少比較的次數(shù),明智的做法是把大switch語(yǔ)句轉(zhuǎn)為嵌套switch語(yǔ)句。把發(fā)生頻率高的case標(biāo)號(hào)放在一個(gè)switch語(yǔ)句中,并且是嵌套switch語(yǔ)句的最外層,發(fā)生相對(duì)頻率相對(duì)低的case標(biāo)號(hào)放在另一個(gè)switch語(yǔ)句中。比如,下面的程序段把相對(duì)發(fā)生頻率低的情況放在缺省的case標(biāo)號(hào)內(nèi)。

pMsg=ReceiveMessage(); switch (pMsg->type) { case?FREQUENT_MSG1: handleFrequentMsg(); break;case?FREQUENT_MSG2: handleFrequentMsg2(); break;......case?FREQUENT_MSGn: handleFrequentMsgn(); break;default: //嵌套部分用來(lái)處理不經(jīng)常發(fā)生的消息switch?(pMsg->type){ case?INFREQUENT_MSG1: handleInfrequentMsg1(); break;case?INFREQUENT_MSG2: handleInfrequentMsg2(); break ;......case?INFREQUENT_MSGm: handleInfrequentMsgm(); break; } }

如果switch中每一種情況下都有很多的工作要做,那么把整個(gè)switch語(yǔ)句用一個(gè)指向函數(shù)指針的表來(lái)替換會(huì)更加有效,比如下面的switch語(yǔ)句,有三種情況:

enum?MsgType{Msg1,?Msg2,?Msg3} switch?(ReceiveMessage()) {case?Msg1;...... case?Msg2;..... case?Msg3;..... }為了提高執(zhí)行速度,用下面這段代碼來(lái)替換這個(gè)上面的switch語(yǔ)句/*準(zhǔn)備工作*/ int?handleMsg1(void); int?handleMsg2(void); int?handleMsg3(void);/*創(chuàng)建一個(gè)函數(shù)指針數(shù)組*/? int?(*MsgFunction?[])()={handleMsg1,?handleMsg2,?handleMsg3};/*用下面這行更有效的代碼來(lái)替換switch語(yǔ)句*/ status=MsgFunction[ReceiveMessage()]();


7、全局變量。


使用全局變量比向函數(shù)傳遞參數(shù)更加有效率,這樣做去除了函數(shù)調(diào)用前參數(shù)入棧和函數(shù)完成后參數(shù)出棧的需要。當(dāng)然,使用全局變量會(huì)對(duì)程序有一些負(fù)作用。使用全局變量比函數(shù)傳遞參數(shù)更加有效率。這樣做去除了函數(shù)調(diào)用參數(shù)入棧和函數(shù)完成后參數(shù)出棧所需要的時(shí)間。然而決定使用全局變量會(huì)影響程序的模塊化和重入,故要慎重使用。

8、嵌入式系統(tǒng)編程應(yīng)避免使用標(biāo)準(zhǔn)庫(kù)例程

因?yàn)楹芏啻蟮膸?kù)例程設(shè)法處理所有可能的情況,所以占用了龐大的內(nèi)存空間,因而應(yīng)盡可能地減少使用標(biāo)準(zhǔn)庫(kù)例程。

9、Inline函數(shù)。


在C++中,關(guān)鍵字Inline可以被加入到任何函數(shù)的聲明中。這個(gè)關(guān)鍵字請(qǐng)求編譯器用函數(shù)內(nèi)部的代碼替換所有對(duì)于指出的函數(shù)的調(diào)用。這樣做在兩個(gè)方面快于函數(shù)調(diào)用。這樣做在兩個(gè)方面快于函數(shù)調(diào)用:第一,省去了調(diào)用指令需要的執(zhí)行時(shí)間;第二,省去了傳遞變?cè)蛡鬟f過(guò)程需要的時(shí)間。但是使用這種方法在優(yōu)化程序速度的同時(shí),程序長(zhǎng)度變大了,因此需要更多的ROM。使用這種優(yōu)化在Inline函數(shù)頻繁調(diào)用并且只包含幾行代碼的時(shí)候是最有效的。

10、用指針代替數(shù)組。

在許多種情況下,可以用指針運(yùn)算代替數(shù)組索引,這樣做常常能產(chǎn)生又快又短的代碼。與數(shù)組索引相比,指針一般能使代碼速度更快,占用空間更少。使用多維數(shù)組時(shí)差異更明顯。下面的代碼作用是相同的,但是效率不一樣。

數(shù)組索引 ??指針運(yùn)算 For(;;) { ? p=array??????A=array[t++];?for(;;) {a=*(p++);?...... ?????????????????????????????......??}


指針方法的優(yōu)點(diǎn)是,array的地址每次裝入地址p后,在每次循環(huán)中只需對(duì)p增量操作。在數(shù)組索引方法中,每次循環(huán)中都必須進(jìn)行基于t值求數(shù)組下標(biāo)的復(fù)雜運(yùn)算。

11、不定義不使用的返回值。

function函數(shù)定義并不知道函數(shù)返回值是否被使用,假如返回值從來(lái)不會(huì)被用到,應(yīng)該使用void來(lái)明確聲明函數(shù)不返回任何值。


12、手動(dòng)編寫匯編。

在嵌入式軟件開發(fā)中,一些軟件模塊最好用匯編語(yǔ)言來(lái)寫,這可以使程序更加有效。雖然C/C++編譯器對(duì)代碼進(jìn)行了優(yōu)化,但是適當(dāng)?shù)氖褂脙?nèi)聯(lián)匯編指令可以有效的提高整個(gè)系統(tǒng)運(yùn)行的效率。


13、使用寄存器變量。


在聲明局部變量的時(shí)候可以使用register關(guān)鍵字。這就使得編譯器把變量放入一個(gè)多用途的寄存器中,而不是在堆棧中,合理使用這種方法可以提高執(zhí)行速度。函數(shù)調(diào)用越是頻繁,越是可能提高代碼的速度。

14、使用增量和減量操作符。


在使用到加一和減一操作時(shí)盡量使用增量和減量操作符,因?yàn)樵隽糠Z(yǔ)句比賦值語(yǔ)句更快,原因在于對(duì)大多數(shù)CPU來(lái)說(shuō),對(duì)內(nèi)存字的增、減量操作不必明顯地使用取內(nèi)存和寫內(nèi)存的指令,比如下面這條語(yǔ)句:x=x+1;

?模仿大多數(shù)微機(jī)匯編語(yǔ)言為例,產(chǎn)生的代碼類似于:


move?A,x ;把x從內(nèi)存取出存入累加A
add?A,1?;累加器A加1?????
store?x??;把新值存回x?

如果使用增量操作符,生成的代碼下:
incr?x?;x加1?
顯然,不用取指令和存指令,增、減量操作執(zhí)行的速度加快,同時(shí)長(zhǎng)度也縮短了。


?

總結(jié)

以上是生活随笔為你收集整理的嵌入式编程C语言提高代码效率的14种方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产在线精品视频 | 午夜亚洲aⅴ无码高潮片苍井空 | 又黄又爽无遮挡 | 一道本在线观看视频 | 日韩aaaaaa | 伊人91视频| 婷婷六月激情 | 成人福利影院 | 久久99伊人| 给我免费观看片在线电影的 | 国产69熟 | 精品二三区 | 91美女网站| 欧美日韩欧美日韩在线观看视频 | 国产熟女高潮视频 | 欧美日韩a v | 肥婆大荫蒂欧美另类 | 妖精视频一区二区三区 | 美脚の诱脚舐め脚视频播放 | 亚洲一区二区三区久久久 | 日韩精品色呦呦 | 91免费片 | 在线观看色| 国产免费黄色片 | 日本一区二区在线视频 | 免费在线观看一区 | 波多野结衣电车 | 亚洲视频国产精品 | 97神马影院| 国产稀缺精品盗摄盗拍 | 无码人妻一区二区三区精品视频 | 亚洲精品中文字幕乱码三区91 | 久久黄色免费网站 | 国产精品电影院 | 在线播放91灌醉迷j高跟美女 | 亚洲欧美另类综合 | av小片| 亚洲成人免费影院 | 国产精品一区二区无码对白 | 欧美日韩乱 | 欧美精品在线播放 | 熟妇人妻av无码一区二区三区 | 卡通动漫av| 国产精品国语自产拍在线观看 | 成人欧美一区二区三区黑人免费 | 日日色综合 | 国产欧美一区二区视频 | 韩国av一区 | 黄色大片免费的 | 国产成人一区二区三区别 | 欧美成人黄色小说 | 国产干b| 日本高清视频网站 | 欧美一级全黄 | 精品视频日韩 | 中文人妻熟女乱又乱精品 | 日韩网站免费 | 久久国产一区二区三区 | 91九色论坛 | 久久中文字幕电影 | 中文字幕 日韩 欧美 | a级黄色网址 | 97视频网址| 国产精品91久久久 | 欧美性做爰毛片 | 久久在现| 亚洲精品高清在线 | 色欲av永久无码精品无码蜜桃 | 日韩视频国产 | 咪咪色在线视频 | 日韩欧美中文在线 | 亚洲国产欧美一区二区三区深喉 | 一区二区三区在线观 | 日本欧美国产 | 日韩成人在线免费观看 | 涩涩视频网址 | 尤物精品在线观看 | 亚洲夜夜爽 | 香蕉钻洞视频 | 人妻一区在线 | 精品免费一区二区三区 | 毛茸茸多毛bbb毛多视频 | 久久国产一区 | 一级美女视频 | 亚洲图片欧美在线 | 免费a网址| 欧美日韩一区二区在线观看 | 色网综合| 开心激情婷婷 | 性――交――性――乱睡觉 | 日本免费一级片 | 人妻天天爽夜夜爽一区二区三区 | 九九热九九爱 | 无码国产精品一区二区色情男同 | 三级色网站 | 成人免费在线视频观看 | 伊人久久视频 | 欧美亚洲高清 | 向日葵视频在线播放 |