資料介紹
對程序進行優(yōu)化,通常是指優(yōu)化程序代碼或程序執(zhí)行速度。優(yōu)化代碼和優(yōu)化速度實際上是一個予盾的統(tǒng)一,一般是優(yōu)化了代碼的尺寸,就會帶來執(zhí)行時間的增加,如果優(yōu)化了程序的執(zhí)行速度,通常會帶來代碼增加的副作用,很難魚與熊掌兼得,只能在設(shè)計時掌握一個平衡點。
一、程序結(jié)構(gòu)的優(yōu)化
1、程序的書寫結(jié)構(gòu)
雖然書寫格式并不會影響生成的代碼質(zhì)量,但是在實際編寫程序時還是應(yīng)該尊循一定的書寫規(guī)則,一個書寫清晰、明了的程序,有利于以后的維護。在書寫程序時,特別是對于While、for、do…while、if…elst、switch…case等語句或這些語句嵌套組合時,應(yīng)采用“縮格”的書寫形式,
2、標識符
程序中使用的用戶標識符除要遵循標識符的命名規(guī)則以外,一般不要用代數(shù)符號(如a、b、x1、y1)作為變量名,應(yīng)選取具有相關(guān)含義的英文單詞(或縮寫)或漢語拼音作為標識符,以增加程序的可讀性,如:count、number1、red、work等。
3、程序結(jié)構(gòu)
C語言是一種高級程序設(shè)計語言,提供了十分完備的規(guī)范化流程控制結(jié)構(gòu)。因此在采用C語言設(shè)計單片機應(yīng)用系統(tǒng)程序時,首先要注意盡可能采用結(jié)構(gòu)化的程序設(shè)計方法,這樣可使整個應(yīng)用系統(tǒng)程序結(jié)構(gòu)清晰,便于調(diào)試和維護。于一個較大的應(yīng)用程序,通常將整個程序按功能分成若干個模塊,不同模塊完成不同的功能。各個模塊可以分別編寫,甚至還可以由不同的程序員編寫,一般單個模塊完成的功能較為簡單,設(shè)計和調(diào)試也相對容易一些。在C語言中,一個函數(shù)就可以認為是一個模塊。所謂程序模塊化,不僅是要將整個程序劃分成若干個功能模塊,更重要的是,還應(yīng)該注意保持各個模塊之間變量的相對獨立性,即保持模塊的獨立性,盡量少使用全局變量等。對于一些常用的功能模塊,還可以封裝為一個應(yīng)用程序庫,以便需要時可以直接調(diào)用。但是在使用模塊化時,如果將模塊分成太細太小,又會導致程序的執(zhí)行效率變低(進入和退出一個函數(shù)時保護和恢復寄存器占用了一些時間)。
4、定義常數(shù)
在程序化設(shè)計過程中,對于經(jīng)常使用的一些常數(shù),如果將它直接寫到程序中去,一旦常數(shù)的數(shù)值發(fā)生變化,就必須逐個找出程序中所有的常數(shù),并逐一進行修改,這樣必然會降低程序的可維護性。因此,應(yīng)盡量當采用預處理命令方式來定義常數(shù),而且還可以避免輸入錯誤。
5、減少判斷語句
能夠使用條件編譯(ifdef)的地方就使用條件編譯而不使用if語句,有利于減少編譯生成的代碼的長度,能夠不用判斷語句則少用判斷用語句。
6、表達式
對于一個表達式中各種運算執(zhí)行的優(yōu)先順序不太明確或容易混淆的地方,應(yīng)當采用圓括號明確指定它們的優(yōu)先順序。一個表達式通常不能寫得太復雜,如果表達式太復雜,時間久了以后,自己也不容易看得懂,不利于以后的維護。
7、函數(shù)
對于程序中的函數(shù),在使用之前,應(yīng)對函數(shù)的類型進行說明,對函數(shù)類型的說明必須保證它與原來定義的函數(shù)類型一致,對于沒有參數(shù)和沒有返回值類型的函數(shù)應(yīng)加上“void”說明。如果果需要縮短代碼的長度,可以將程序中一些公共的程序段定義為函數(shù),在Keil中的高級別優(yōu)化就是這樣的。如果需要縮短程序的執(zhí)行時間,在程序調(diào)試結(jié)束后,將部分函數(shù)用宏定義來代替。注意,應(yīng)該在程序調(diào)試結(jié)束后再定義宏,因為大多數(shù)編譯系統(tǒng)在宏展開之后才會報錯,這樣會增加排錯的難度。
8、盡量少用全局變量,多用局部變量。因為全局變量是放在數(shù)據(jù)存儲器中,定義一個全局變量,MCU就少一個可以利用的數(shù)據(jù)存儲器空間,如果定義了太多的全局變量,會導致編譯器無足夠的內(nèi)存可以分配。而局部變量大多定位于MCU內(nèi)部的寄存器中,在絕大多數(shù)MCU中,使用寄存器操作速度比數(shù)據(jù)存儲器快,指令也更多更靈活,有利于生成質(zhì)量更高的代碼,而且局部變量所的占用的寄存器和數(shù)據(jù)存儲器在不同的模塊中可以重復利用。
9、設(shè)定合適的編譯程序選項
許多編譯程序有幾種不同的優(yōu)化選項,在使用前應(yīng)理解各優(yōu)化選項的含義,然后選用最合適的一種優(yōu)化方式。通常情況下一旦選用最高級優(yōu)化,編譯程序會近乎病態(tài)地追求代碼優(yōu)化,可能會影響程序的正確性,導致程序運行出錯。因此應(yīng)熟悉所使用的編譯器,應(yīng)知道哪些參數(shù)在優(yōu)化時會受到影響,哪些參數(shù)不會受到影響。在ICCAVR中,有“Default”和“Enable Code Compression”兩個優(yōu)化選項。在CodeVisionAVR中,“Tiny”和“small”兩種內(nèi)存模式。在IAR中,共有7種不同的內(nèi)存模式選項。在GCCAVR中優(yōu)化選項更多,一不小心更容易選到不恰當?shù)倪x項。
二、代碼的優(yōu)化
1、選擇合適的算法和數(shù)據(jù)結(jié)構(gòu)
應(yīng)該熟悉算法語言,知道各種算法的優(yōu)缺點,具體資料請參見相應(yīng)的參考資料,有很多計算機書籍上都有介紹。將比較慢的順序查找法用較快的二分查找或亂序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序執(zhí)行的效率。。選擇一種合適的數(shù)據(jù)結(jié)構(gòu)也很重要,比如你在一堆隨機存放的數(shù)中使用了大量的插入和刪除指令,那使用鏈表要快得多。數(shù)組與指針語句具有十分密碼的關(guān)系,一般來說,指針比較靈活簡潔,而數(shù)組則比較直觀,容易理解。對于大部分的編譯器,使用指針比使用數(shù)組生成的代碼更短,執(zhí)行效率更高。但是在Keil中則相反,使用數(shù)組比使用的指針生成的代碼更短。
3、使用盡量小的數(shù)據(jù)類型
能夠使用字符型(char)定義的變量,就不要使用整型(int)變量來定義;能夠使用整型變量定義的變量就不要用長整型(long int),能不使用浮點型(float)變量就不要使用浮點型變量。當然,在定義變量后不要超過變量的作用范圍,如果超過變量的范圍賦值,C編譯器并不報錯,但程序運行結(jié)果卻錯了,而且這樣的錯誤很難發(fā)現(xiàn)。在ICCAVR中,可以在Options中設(shè)定使用printf參數(shù),盡量使用基本型參數(shù)(%c、%d、%x、%X、%u和%s格式說明符),少用長整型參數(shù)(%ld、%lu、%lx和%lX格式說明符),至于浮點型的參數(shù)(%f)則盡量不要使用,其它C編譯器也一樣。在其它條件不變的情況下,使用%f參數(shù),會使生成的代碼的數(shù)量增加很多,執(zhí)行速度降低。
4、使用自加、自減指令
通常使用自加、自減指令和復合賦值表達式(如a-=1及a+=1等)都能夠生成高質(zhì)量的程序代碼,編譯器通常都能夠生成inc和dec之類的指令,而使用a=a+1或a=a-1之類的指令,有很多C編譯器都會生成二到三個字節(jié)的指令。在AVR單片適用的ICCAVR、GCCAVR、IAR等C編譯器以上幾種書寫方式生成的代碼是一樣的,也能夠生成高質(zhì)量的inc和dec之類的的代碼。
- 高質(zhì)量程序設(shè)計指南之C++C語言 0次下載
- C語言程序設(shè)計第四講結(jié)構(gòu)化程序設(shè)計之選擇 0次下載
- C#語言程序設(shè)計實用教程 50次下載
- 使用51單片機進行PS2鍵盤解碼實驗的C語言程序免費下載
- 使用51單片機進行按鍵掃描的C語言程序免費下載
- 如何進行單片機C程序代碼的優(yōu)化
- 使用51單片機進行12864液晶時鐘的C語言程序免費下載
- 使用C語言進行IOT物聯(lián)網(wǎng)編程的程序免費下載 10次下載
- 如何使用單片機設(shè)計音樂盒進行播放小蘋果的C語言程序免費下載 21次下載
- 使用單片機進行紅外遙控的C語言程序資料免費下載 19次下載
- 單片機C語言中如何使用nop函數(shù)進行短延時的效果資料和程序說明 10次下載
- C語言教程之如何進行最簡單的C程序設(shè)計實現(xiàn)程序說明 2次下載
- 單片機進行AD轉(zhuǎn)換的C語言程序資料免費下載 17次下載
- DSP的C語言編程的詳細簡介和優(yōu)化改進設(shè)計的詳細概述 8次下載
- 關(guān)于c語言編寫的算法程序 12次下載
- 技術(shù)干貨驛站 ▏深入理解C語言:掌握程序結(jié)構(gòu)知識 833次閱讀
- SEGGER編譯器優(yōu)化和安全技術(shù)介紹 支持最新C和C++語言 1115次閱讀
- 怎么寫出效率高、思路清晰的C語言程序? 428次閱讀
- 用C語言構(gòu)建高效的嵌入式程序 498次閱讀
- 如何把C++程序改寫成C語言 3149次閱讀
- C語言中條件編譯詳解 2885次閱讀
- 為什么說C語言程序運行時要比其他語言編寫的程序快得多 2075次閱讀
- 單片機液晶漢字顯示的C語言程序 4885次閱讀
- DS18B20的C語言驅(qū)動程序 5346次閱讀
- C語言的簡介和特點說明 7800次閱讀
- 如何寫好一個效率高效思路清晰的C語言程序教你關(guān)鍵的三招 5298次閱讀
- 用C語言進行程序構(gòu)架構(gòu)建的“三板斧” 3990次閱讀
- 一文詳解單片機C程序及代碼的優(yōu)化 4771次閱讀
- C語言程序內(nèi)存布局該關(guān)注哪些內(nèi)容 878次閱讀
- 小波去噪c語言程序 1.4w次閱讀
下載排行
本周
- 1使用單片機實現(xiàn)七人表決器的程序和仿真資料免費下載
- 2.96 MB | 40次下載 | 免費
- 2Keysight B1500A 半導體器件分析儀用戶手冊、說明書 (中文)
- 19.00 MB | 4次下載 | 免費
- 3使用TL431設(shè)計電源
- 0.67 MB | 2次下載 | 免費
- 4BT134雙向可控硅手冊
- 1.74 MB | 2次下載 | 1 積分
- 5LabVIEW環(huán)形控件
- 0.01 MB | 1次下載 | 1 積分
- 6PR735,使用UCC28060的600W交錯式PFC轉(zhuǎn)換器
- 540.03KB | 1次下載 | 免費
- 751單片機核心板原理圖
- 0.12 MB | 1次下載 | 5 積分
- 8BP2879DB支持調(diào)光調(diào)滅的非隔離低 PF LED 驅(qū)動器
- 1.44 MB | 1次下載 | 免費
本月
- 1開關(guān)電源設(shè)計原理手冊
- 1.83 MB | 54次下載 | 免費
- 2使用單片機實現(xiàn)七人表決器的程序和仿真資料免費下載
- 2.96 MB | 40次下載 | 免費
- 3FS5080E 5V升壓充電兩串鋰電池充電管理IC中文手冊
- 8.45 MB | 23次下載 | 免費
- 4DMT0660數(shù)字萬用表產(chǎn)品說明書
- 0.70 MB | 13次下載 | 免費
- 5UC3842/3/4/5電源管理芯片中文手冊
- 1.75 MB | 12次下載 | 免費
- 6ST7789V2單芯片控制器/驅(qū)動器英文手冊
- 3.07 MB | 11次下載 | 1 積分
- 7TPS54202H降壓轉(zhuǎn)換器評估模塊用戶指南
- 1.02MB | 8次下載 | 免費
- 8STM32F101x8/STM32F101xB手冊
- 1.69 MB | 8次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評論
查看更多