1. gzyueqian
      13352868059

      如何優化單片機程序?這篇文章告訴你!

      更新時間: 2020-06-26 15:11:49來源: 粵嵌教育瀏覽量:13763

            在開發程序中不斷的優化代碼就是為了可以給客戶提供更好的體驗,一般來說優化代碼的時候就會相對應的出現一些其他的問題,如果說優化了速度的話就會給代碼代理一些其他的副作用,所以說如何優化單片機程序是非常的重要的一個程序,下面粵嵌科技用這篇文章來告訴你要如何優化。

        一、程序結構的優化


        1、程序的書寫結構


        雖然書寫格式并不會影響生成的代碼質量,但是在實際編寫程序時還是應該尊循一定的書寫規則,一個書寫清晰、明了的程序,有利于以后的維護。在書寫程序時,特別是對于While、for、do…while、if…else、switch…case 等語句或這些語句嵌套組合時,應采用“縮格”的書寫形式。


        2、標識符


        程序中使用的用戶標識符除要遵循標識符的命名規則以外,一般不要用代數符號(如a、b、x1、y1)作為變量名,應選取具有相關含義的英文單詞(或縮寫)或漢語拼音作為標識符,以增加程序的可讀性,如:count、number1、red、work 等。


        3、程序結構


        C 語言是一種程序設計語言,提供了十分完備的規范化流程控制結構。因此在采用C 語言設計單片機應用系統程序時,首先要注意盡可能采用結構化的程序設計方法,這樣可使整個應用系統程序結構清晰,便于調試和維護。


        對于一個較大的應用程序,通常將整個程序按功能分成若干個模塊,不同模塊完成不同的功能。各個模塊可以分別編寫,甚至還可以由不同的程序員編寫,一般單個模塊完成的功能較為簡單,設計和調試也相對容易一些。在C 語言中,一個函數就可以認為是一個模塊。


        所謂程序模塊化,不僅是要將整個程序劃分成若干個功能模塊,更重要的是,還應該注意保持各個模塊之間變量的相對獨立性,即保持模塊的獨立性,盡量少使用全局變量等。對于一些常用的功能模塊,還可以封裝為一個應用程序庫,以便需要時可以直接調用。但是在使用模塊化時,如果將模塊分成太細太小,又會導致程序的執行效率變低(進入和退出一個函數時保護和恢復寄存器占用了一些時間)。


        4、定義常數


        在程序化設計過程中,對于經常使用的一些常數,如果將它直接寫到程序中去,一旦常數的數值發生變化,就必須逐個找出程序中所有的常數,并逐一進行修改,這樣必然會降低程序的可維護性。因此,應盡量當采用預處理命令方式來定義常數,而且還可以避免輸入錯誤。


        5、減少判斷語句


        能夠使用條件編譯(ifdef)的地方就使用條件編譯而不使用if 語句,有利于減少編譯生成的代碼的長度。


        6、表達式


        對于一個表達式中各種運算執行的優先順序不太明確或容易混淆的地方,應當采用圓括號明確指定它們的優先順序。一個表達式通常不能寫得太復雜,如果表達式太復雜,時間久了以后,自己也不容易看得懂,不利于以后的維護。


        7、函數


        對于程序中的函數,在使用之前,應對函數的類型進行說明,對函數類型的說明必須保證它與原來定義的函數類型一致,對于沒有參數和沒有返回值類型的函數應加上“void”說明。如果果需要縮短代碼的長度,可以將程序中一些公共的程序段定義為函數。如果需要縮短程序的執行時間,在程序調試結束后,將部分函數用宏定義來代替。注意,應該在程序調試結束后再定義宏,因為大多數編譯系統在宏展開之后才會報錯,這樣會增加排錯的難度。


        8、盡量少用全局變量,多用局部變量


        因為全局變量是放在數據存儲器中,定義一個全局變量,MCU 就少一個可以利用的數據存儲器空間,如果定義了太多的全局變量,會導致編譯器無足夠的內存可以分配;而局部變量大多定位于MCU 內部的寄存器中,在絕大多數MCU 中,使用寄存器操作速度比數據存儲器快,指令也更多更靈活,有利于生成質量更高的代碼,而且局部變量所的占用的寄存器和數據存儲器在不同的模塊中可以重復利用。


        9、設定合適的編譯程序選項


        許多編譯程序有幾種不同的優化選項,在使用前應理解各優化選項的含義,然后選用合適的一種優化方式。通常情況下一旦選用優化,編譯程序會近乎病態地追求代碼優化,可能會影響程序的正確性,導致程序運行出錯。因此應熟悉所使用的編譯器,應知道哪些參數在優化時會受到影響,哪些參數不會受到影響。


        二、代碼的優化


        1、選擇合適的算法和數據結構


        應熟悉算法語言。將比較慢的順序查找法用較快的二分查找法或亂序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,這樣可以大大提高程序執行的效率。


        選擇一種合適的數據結構也很重要,比如在一堆隨機存放的數據中使用了大量的插入和刪除指令,比使用鏈表要快得多。數組與指針具有十分密切的關系,一般來說指針比較靈活簡潔,而數組則比較直觀,容易理解。對于大部分分的編譯器,使用指針比使用數組生成的代碼更短,執行效率更高。


        但是在Keil 中則相反,使用數組比使用的指針生成的代碼更短。


        2、使用盡量小的數據類型


        能夠使用字符型(char)定義的變量,就不要使用整型(int)變量來定義;能夠使用整型變量定義的變量就不要用長整型(long int),能不使用浮點型(float)變量就不要使用浮點型變量。當然,在定義變量后不要超過變量的作用范圍,如果超過變量的范圍賦值,C 編譯器并不報錯,但程序運行結果卻錯了,而且這樣的錯誤很難發現。


        3、使用自加、自減指令


        通常使用自加、自減指令和復合賦值表達式(如a-=1 及a+=1 等)都能夠生成高質量的程序代碼,編譯器通常都能夠生成inc 和dec 之類的指令,而使用a=a+1 或a=a-1之類的指令,有很多C 編譯器都會生成2~3個字節的指令。


        關于如果優化單片機程序粵嵌科技也用這篇文章給大家講解了下,想要了解的更加的透徹的話那么肯定是要系統性的學習單片機技術才可以的。粵嵌科技歡迎每位想要學習單片機技術的學員來我們公司進行實地考察,也可以先點擊我們文章下面的獲取試聽資格按鈕來獲取我們的單片機課程免費試聽資格,在試聽中可以更加深入的了解我們粵嵌科技。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲1024久久 | 制服亚洲中文字幕 | 日本三日本三级少妇三级66 | 亚洲综合天堂Av网站在线观看 | 中文字幕日韩午夜精品久久 | 日本香港三级三级久久妇 |