久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> 技術(shù)中心 >> 單片機入門 >> 如何提高單片機C語言代碼效率

如何提高單片機C語言代碼效率

作者:admin 來源:不詳 發(fā)布時間:2018-05-08  瀏覽:42
     代碼效率包括兩個方面內(nèi)容:代碼的大小和代碼執(zhí)行速度。如果代碼精簡和執(zhí)行速度快,我們就說這個代碼效率高。一般情況下,代碼精簡了速度也相應(yīng)提上來了。單片機的ROM和RAM的空間都很有限,當(dāng)您編程時遇到單片機的ROM和RAM的不夠用的時候,或者您的程序要求較高的執(zhí)行速度時,我們就得面對解決代碼效率問題了。如何提高代碼效率?現(xiàn)筆者以一個LED閃爍的程序為例與您探討。

#i nclude<reg52.h>//包含頭文件

sbit led=P2^0;//定義位變量led,使其關(guān)聯(lián)單片機管腳P2.0

void Delayms(unsigned int t);//定義延時函數(shù)

int main(void)//主函數(shù)(C語言程序入口函數(shù))

{

       while(1)

       {

             led=0;//P2.0拉低,點亮LED

             Delayms(500);//調(diào)用延時函數(shù),延時500毫秒

             led=1;//P2.0拉高,熄滅LED

             Delayms(500);//調(diào)用延時函數(shù),延時500毫秒

       }

       return 0;

}

void Delayms(unsigned int t)//延時函數(shù)

{

        unsigned int i,j;

        for(i=0;i<t;i++)

               for(j=0;j<120;j++);//大約延時1毫秒

}

        這是指示燈LED閃爍的C源碼,這個源碼在Keil uVision4 生成的程序代碼是67個字節(jié)。下面我們就采用幾個方法來提高這個程序的效率。

一.盡量定義局部變量

        單片機程序的全局變量一般是放在通用數(shù)據(jù)存儲器(RAM)中,而局部變量一般是放在特殊功能寄存器當(dāng)中。處理寄存器數(shù)據(jù)的速度比處理RAM數(shù)據(jù)要快,如果在一個局部函數(shù)里調(diào)用一個全局變量將會多生成好幾個代碼出來。所以,少定義全局變量,多定義局部變量。如上例中,如果把延時函數(shù)里的i和j定義為全局變量,編譯后程序代碼會增加到79個字節(jié),多了12個字節(jié)。

二.省略函數(shù)定義

        在一個單片機程序里我們習(xí)慣在main函數(shù)的前面先定義被調(diào)用函數(shù),然后在mian函數(shù)的下面再實現(xiàn)被調(diào)用函數(shù)。這樣的寫法固然是一個好習(xí)慣,但每定義一個函數(shù)會增加幾個代碼,而且函數(shù)形參數(shù)據(jù)類型越大、形參越多增加的代碼就越多,顯然這不是什么好事。如果不定義編譯器又報錯,怎么辦?C編譯器的編譯順序是從上往下編譯,只要被調(diào)用的函數(shù)在主調(diào)函數(shù)調(diào)用之前實現(xiàn)就沒有問題了。所以,筆者的習(xí)慣寫法是不用定義函數(shù),但要按先后順序(被調(diào)用函數(shù)一定要在主調(diào)函數(shù)之前寫好)來寫函數(shù)實現(xiàn),到最后再寫main函數(shù)。這樣做編譯器不但不會報錯,而且代碼得到精簡了。如上例中,把延時函數(shù)的定義刪除了,然后把延時函數(shù)的實現(xiàn)搬到main函數(shù)的上面,編譯后程序代碼減少到63個字節(jié),減少了4個字節(jié)。

三.省略函數(shù)形參

        函數(shù)帶形參,是為了在函數(shù)調(diào)用時傳遞實參,不但可以避免重復(fù)代碼出現(xiàn),還可以通過傳遞不同的實參值多次調(diào)用函數(shù)且實現(xiàn)不同的函數(shù)功能,總體代碼也會得到精簡。在實際編程的時候,我們只要注意,還可以進一步精簡代碼。對于不是多次調(diào)用或者多次調(diào)用但實參值不變的函數(shù)我們可以省略函數(shù)形參。如上例中的延時函數(shù),我們把它改成不帶形參的函數(shù):

void Delayms()//延時函數(shù)

{

     unsigned int i,j;

     for(i=0;i<500;i++)

          for(j=0;j<120;j++);//大約延時1毫秒

}

編譯后,程序代碼變成了56個字節(jié),精簡了11個字節(jié)。

四.改換運算符

       也許您可能沒有注意到C運算符的運用也會影響程序代碼的數(shù)量。如上例中,把延時函數(shù)里的自加運算符改成自減運算符后,如:

void Delayms(unsigned int t)//延時函數(shù)

{

     unsigned int i,j;

     for(i=t;i>0;i--)

          for(j=120;j>0;j--);//#p#分頁標(biāo)題#e#大約延時1毫秒

}

編譯后,程序代碼變成了65個字節(jié),精簡了2個字節(jié)。

通過改換運算符能達到精簡代碼的例子還有:

1.把求余運算表達式改為位與運算表達式。如:b=a%8 可以改為:b=a&7。

2.把乘法運算表達式改為左移運算表達式。如:b=a*8 可以改為:b=a<<3。

3.把除法運算表達式改為右移運算表達式。如:b=a/8 可以改為:b=a>>3。

五.選擇合適的數(shù)據(jù)類型

        C語言里選擇變量的數(shù)據(jù)類型很講究,變量的數(shù)據(jù)類型過小滿足不了程序的要求,變量的數(shù)據(jù)類型過大會占用太多的RAM資源。您可能還沒有注意到數(shù)據(jù)類型定義也影響程序代碼的大小,而且這個影響還不小。如上例中,延時函數(shù)里的局部變量j定義的數(shù)據(jù)類型明顯偏大,如果把它由unsigned int改成unsigned char 。編譯后,程序代碼變成了59個字節(jié),精簡了8個字節(jié)。

六.直接嵌入代碼

        在您的程序里如果某個函數(shù)只調(diào)用一次,而您又要求代碼提高執(zhí)行速度,建議您不要采用調(diào)用函數(shù)的形式,而應(yīng)該將該函數(shù)里的代碼直接嵌入主調(diào)函數(shù)里,代碼執(zhí)行效率會大大提高。

七.使用效率高的C語句

        C語言里有一個三目運算符“?”,俗稱“問號表達式”。很多程序員都很喜歡使用,因為它邏輯清晰表達簡潔。

看這個問號表達式:c=(a>b) ? a+1 : b+1;實際上等效于以下的if…else結(jié)構(gòu):

if (a>b)  c=a+1;

else  c=b+1;

可以看到,使用問號表達式,語句相當(dāng)簡潔,但它的執(zhí)行效率卻很低,遠(yuǎn)沒有if…else語句效率高。所以,當(dāng)您的程序要求提高執(zhí)行速度的話,建議您不要使用問號表達式了。

        另外,do…while語句也比while語句的效率高。

代碼的效率問題,不是我們編程中的主要問題,除了程序要求較高的執(zhí)行速度或者單片機的ROM和RAM不夠用的時候才會考慮。一般情況下,我們不用在乎。如果您一味追求高效率的代碼,可能會影響代碼的可讀性和可維護性。

編輯:admin  最后修改時間:2018-05-08

聯(lián)系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市南山區(qū)桃源街道平山社區(qū)平山一路2號南山云谷創(chuàng)業(yè)園二期11棟410-411

Copyright © 2014-2026 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网
男人的天堂avav| 欧洲美女亚洲激情| 亚洲乱码日产精品bd在线观看| 成人亚洲精品777777大片| 成人羞羞国产免费网站| 91传媒久久久| 国产小视频精品| 911av视频| 800av在线免费观看| 成年人看的毛片| 国产一区二区网| 男女啪啪网站视频| 色一情一区二区三区| 国内av免费观看| 日韩xxxx视频| 大香煮伊手机一区| 在线免费看v片| www.国产二区| 国产精彩免费视频| 三上悠亚av一区二区三区| 日韩肉感妇bbwbbwbbw| 亚洲图片 自拍偷拍| 久久亚洲a v| 国产av无码专区亚洲精品| 可以看污的网站| 欧美狂野激情性xxxx在线观| 97成人在线观看视频| 亚洲综合婷婷久久| 无码人妻精品一区二区蜜桃网站| 国产原创中文在线观看| 自拍偷拍21p| 岛国大片在线播放 | 亚洲男人天堂av在线| 喜爱夜蒲2在线| 黄色国产小视频| 视色,视色影院,视色影库,视色网| 日韩中字在线观看| 亚洲天堂一区二区在线观看| 成人一对一视频| 国产911在线观看| 天堂av在线网站| a在线视频观看| 欧美黄色免费网址| www.久久久久久久久久久| 一女被多男玩喷潮视频| 可以免费看的黄色网址| 国产又粗又长又大的视频| 成人黄色av片| 国产精品自拍合集| 50度灰在线观看| 中文字幕在线乱| 婷婷免费在线观看| 91小视频网站| 狠狠操精品视频| 日韩av在线综合| www.国产区| 成年人小视频网站| 免费在线观看毛片网站| av免费观看网| 欧美老熟妇喷水| 黄色片一级视频| 18岁视频在线观看| 动漫av免费观看| 中文字幕国内自拍| 一级片视频免费观看| 精品久久久久久中文字幕2017| 欧美久久久久久久久久久久久| 国产自产在线视频| 日韩中文字幕在线免费| 成人免费性视频| 丰满少妇被猛烈进入高清播放| 免费黄色日本网站| 日本a√在线观看| 在线a免费观看| 国产真实老熟女无套内射| 欧美国产综合在线| 午夜精品久久久内射近拍高清| 亚洲视频在线观看一区二区三区| 杨幂毛片午夜性生毛片| 久久久久久久高清| 天天做天天躁天天躁| 欧美精品一区免费| 国产区二区三区| www.国产亚洲| 青青在线视频免费| 色乱码一区二区三区熟女 | 中文字幕第100页| 国产又粗又爽又黄的视频| 亚洲熟妇无码一区二区三区| 大香煮伊手机一区| 2021国产视频| 天天天干夜夜夜操| 国产人妻人伦精品| 久久久噜噜噜www成人网| 亚洲欧美激情网| 亚洲中文字幕无码一区二区三区| 无码 制服 丝袜 国产 另类| 九九视频精品在线观看| 91网站在线观看免费| 成年人网站大全| 97超碰在线视| 亚洲天堂2018av| 日本在线xxx| 天堂av在线中文| 国产精品自拍视频在线| 熟女少妇在线视频播放| 亚洲一区二区图片| 十八禁视频网站在线观看| 裸体裸乳免费看| 一区二区免费av| 午夜视频在线瓜伦| 国产妇女馒头高清泬20p多| 中文字幕一区二区在线观看视频| 啊啊啊一区二区| 成年人深夜视频| 伊人色在线视频| 免费看黄色一级大片| 日韩精品 欧美| 性高湖久久久久久久久aaaaa| 亚洲天堂一区二区在线观看| 中文字幕第88页| 国产精品久久a| 在线免费av播放| 色综合天天色综合| 午夜欧美福利视频| 国产超碰在线播放| 黄色国产小视频| 一区二区三区 日韩| 亚洲免费av一区二区三区| aaa毛片在线观看| 激情婷婷综合网| 亚洲三级视频网站| 国产一级片自拍| 97人人模人人爽人人澡| www.51色.com| 激情成人开心网| 国产精品无码av在线播放| ww国产内射精品后入国产| 波多野结衣家庭教师在线播放| 日韩a∨精品日韩在线观看| 你懂的av在线| 91av俱乐部| 午夜免费福利网站| 日韩在线视频在线| 欧美国产亚洲一区| 亚洲一级免费观看| 9l视频自拍9l视频自拍| 免费无码毛片一区二三区| 精品久久久久av| 日韩a一级欧美一级| 日本xxxxx18| 国产成人无码a区在线观看视频| 能在线观看的av网站| 热久久久久久久久| 97超碰在线视| 国产一级特黄a大片免费| 一本二本三本亚洲码| 欧美精品卡一卡二| 色国产在线视频| 久久成人福利视频| 亚洲这里只有精品| 97干在线视频| 中文字幕日韩综合| 99爱视频在线| 国产乱码一区二区三区四区| aa在线观看视频| 熟女视频一区二区三区| 国产免费成人在线| 大陆极品少妇内射aaaaaa| 最近免费中文字幕中文高清百度| 五月天婷婷在线观看视频| 男人揉女人奶房视频60分| 色撸撸在线观看| av丝袜天堂网| 乱妇乱女熟妇熟女网站| 91麻豆天美传媒在线| 亚洲老女人av| 久久国产色av免费观看| 福利在线小视频| 加勒比av中文字幕| 天天影视综合色| 青青青国产在线观看| 肉大捧一出免费观看网站在线播放| 久久久精品三级| 欧美精品成人网| 无码人妻丰满熟妇区毛片| 欧美视频在线观看网站| 日韩视频一二三| 亚洲色图欧美自拍| 欧美一级小视频| 蜜臀一区二区三区精品免费视频 | 欧美激情第3页| 欧美成人福利在线观看| 嫩草av久久伊人妇女超级a| 午夜肉伦伦影院| 91黄色小网站| 亚洲五月天综合| 青青草原国产在线视频| 在线播放免费视频| 国产精品久久久久久久av福利|