方春華
摘要:隨著計算機技術的不斷發展,使得如今的單片機仿真器普遍支持了c語言程序的調試,這無疑是對單片機使用c語言提供了極大便利。雖然,單片機內中半導體芯片的體積十分微小,但卻容納了眾多的元器件,包括CPU、半導體存儲器、I/O接口以及中斷系統。與此同時,基于c語言本身兼具高級語言和匯編語言的雙重特點,加之c語言能夠直接操作單片機硬件,這為c語言編程在單片機中的應用創造了良好的條件。本文通過概述單片機系統,深入分析單片機c語言編程的常見問題,并根據實際情況提出解決單片機c語言編程問題的策略,為單片機c語言編程的應用提供可參考的資料。
關鍵詞:單片機;c語言;編程問題
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2019)30-0237-02
單片機的開發主要依賴于大量的編程與算法設計,而通過對單片機編程語言的審視,我們不難發現:傳統單片機運用最多的當屬匯編語言,而針對c、c++等高級編譯語言的運用卻十分稀少。而隨著計算機技術的不斷發展,人們對單片機系統功能需求的不斷提升,所以積極將c、c++一類的高級編譯語言運用至單片機中已然成為時代發展的必然趨勢。
1單片機系統
1.1單片機的定義
單片機的英文全稱為“single chip microcomputer”,中文翻譯為單片微型計算機。其主要部件便是半導體芯片。雖然,半導體芯片的體積十分微小,但卻容納了眾多的元器件,包括CPU、半導體存儲器、I/O接口以及中斷系統等。至于單片機則是由眾多包含此半導體芯片的硬件所構成。
1.2單片機的系統組成
就單片機系統而言,其與普通計算機同樣擁有硬件與軟件系統兩大重要組成部分。其中,硬件系統主要包含了上述所提半導體芯片中集成的各類元器件,如CPU、半導體存儲器等。而軟件則是由眾多的主程序與子程序所共同組成,而這些主程序與子程序則均是借助匯編或c語言所編寫而成,其主要功能便是監控系統。
1.3單片機的功能特點
單片機雖是微型電子計算機,卻仍有著極其豐富的功能。如基于單片機的元器件本身便具有較高的基礎高難度,故在大規模以及超大規模的集成電路中均適用,且具體的運用還能增強電路的抗干擾能力與可靠性。其次,同樣基于單片機元器件的高集成度,故其價格也相對較為低廉。再者則是單片機具有強大的控制功能,而相關功能均是由指令輸入來實現;最后則是單片機本身對電壓要求較低,僅是2.2甚至更低的電壓便可運行,如此低功耗也十分符合環保低耗的相關要求。
1.4單片機的應用范圍
單片機具有強大的功能,故使得該設備于國防、軍事、工業、農業等諸多領域均有著十分廣泛的運用。不僅如此,在眾多與家庭相關的系統及設備中,單片機也有著良好的運用價值,諸如機電一體化設備、智能儀表儀器、分布式多機系統等。
2單片機C語言編程的常見問題
雖然單片機的語言編輯器功能也十分強大,但也并非能可支持所有的數據類型。好在當前所流行的數據類型,當前的單片機語言編輯器均能良好兼容,且基于單片機本身所具有的位數數據存儲功能,故能通過合理應用各種字符集來構建完整的數據庫。浮點型數據這種數據類型也常常會應用到語言編輯中,且最常見的一種方式就是邏輯開頭。
就上述語言類型外,單片機除了能完美兼容外,且還支持特殊功能的寄存。而所謂的特殊功能寄存,即指單片機并非只能單純的存儲數據,而是能訪問數據存儲的任意位置。雖然,基于各種強大的功能使得單片機的運用范圍也十分廣泛,但其語言卻有著十分明顯的缺陷。就以市面上最常見的單片機為例,當前,市面上最常見的單片機通常是八位的,也便是能同時計算二的八次方個數據,而在實際運算過程中,為切實提升代碼的準確率,我們通常是通過減少單片機位數長度的方式來降低其數據計算量,以此將能避免占用過多內存。同樣,在語言設計時通常會采取減少程度執行過程中的預算次數或減少字符串總長度的方式來降低單片機的數據計算量。但若所需計算的數據類型為浮點型數據,這便需要得到內部函數的支持方能精準計算,故我們在運用數據時,需務必做到對數據類型的合理選取,以此方能減少代碼長度,并保證代碼整體結構的科學性與合理性。
3解決單片機C語言編程中常見問題的策略
為了擴大單片機c語言編程的應用范圍,便需要積極解決單片機c語言編程中最常見的一些問題,優化c語言的單片機開發環境、合理分配數據存儲器、與匯編語言的混合編程、完善C語言的單片機開發步驟。
3.1優化C語言的單片機開發環境
當前,就單片機程序的開發軟件而言,運用最廣泛的當屬KEIL C51。該軟件不僅集合了編輯、編譯以及仿真等程序設計所必備的功能外,還能支持不同公司生產的MCS51芯片。不僅如此,KEIL C51的操作界面亦十分友好,且該軟件內部不僅集成了c語言,還同時支持其他的匯編語言。當然,該軟件也因此而具備了強大的變成與調試功能。除此之外,基于KEIL C51的開發環境亦包含了諸多程序,包括編譯器、匯編器、項目管理器、調試器以及實時操作系統等。故也方便對目標、組以及單個文件的管理。至于KEIL C51最主要的特性,因其操作界面十分友好,故用戶能可在實際運用過程中快速熟悉。與此同時,基于源代碼編輯器還為代碼編輯創造了一個極為方便的環境,故編譯人員可隨時基于編輯器來對代碼予以調試,以此將方便編譯人員快速找出前期所寫代碼之中是否存在錯誤以及在代碼完成后對其予以合理的優化。
3.2合理分配數據存儲器
就單片機的內部數據存儲器而言,通常僅有幾百字節大小。但若以添加外部存儲器的方式來提高單片機的數據存儲量,則將導致硬件成本的大幅增加。且因外部存儲器的加入會讓原本較為簡便的系統變得愈發復雜,故針對片內存儲器空間的合理利用對單片機開發而言無疑是極為關鍵的一環。對此,若能基于C語言來調用存儲器的覆蓋技術,則可在連接性的程序時,將此前被其他程度所占用的存儲空間重新定義,是之能轉化為另一程序段的變量。而當另一程序停止運行后,這些存儲器空間又將再度釋放并供其他程序使用,以此將能大幅提升單片器存儲器內部空間的應用效率。至于存儲器中的變量,眾所周知,存儲器變量主要有靜態與動態之分。其中靜態變量僅能被調用而無法被釋放,而動態變量則可以被釋放。對此,針對程序設計過程涉及局部變量的使用時,編譯人員需務必采取動態變量,如此方能進一步提高內部數據存儲器的使用率。除此之外,考慮到C語言中的程序中間結果以及參數傳遞均是依靠內部寄存器來完成,但若內部存儲器本身的空間不足,則反而會對程序帶來負面影響。故在設計相關程序時,編譯人員需務必對寄存器空間予以詳盡考量,如此方能最大限度避免計算錯誤的出現。
3.3與匯編語言的混合編程
雖然,C語言編程于絕大多數場合的運用均可達到預期的目標,但并不適用于諸如實時時鐘等對執行效率要求較高的系統。至于匯編語言,因其原本便是一種直接與硬件打交道且具有較高代碼執行效率的匯編語言,故積極將c語的使用過程過程與匯編語言相結合,將能對C語言無法做到之事予以有效彌補。如結合C語言和匯編語言的優點來予以混合編程,便能滿足實時時鐘系統設計的諸多需求。而這也正是當下單片機開發最流行的編程方法。除此之外,在絕大多數單片機系統中,c語言與匯編語言的結合還包含了以下兩種狀況:一是在匯編程序與C語言程序分屬不同模塊的情況下,系統的子程序,也便是會變成度模塊的變量及函數部分通常是由c語言來進行調用。而另一種則是嵌入式匯編,在嵌入式匯編中,通常是在c語言程序中嵌入一段匯編語言程序,后在不同模塊的調用下又將分為若干個C程序與匯編程序模塊。而此時的C語言模塊通常是作為程序的主體框架來輔助匯編程序完成相應的任務。當然,在此過程中,C語言與匯編語言模塊必須基于完整的約定,否則將導致數據交換出錯。除此之外,就嵌入式匯編而言,因c語言使用使得程序內部可自動生產精煉的代碼,由此可極大減少系統的運行時間,且當內部無復雜跳轉時,該嵌人式語言亦將自動完成匯編。
3.4完善C語言的單片機開發步驟
運用C語言進行單片機程度開發時,通常需經歷以下幾大重要步驟。依次為程序代碼的編寫、程度代碼的編譯、目標代碼的連接以及目標代碼的轉換等。就以上程序而言,最重要的當屬代碼編寫完成后的調式,其步驟關系到編譯文件未能移植到單片機之上以及在編譯文件移植到單片機上后能可順利執行。至于單片機的開發步驟則通常包含如下四步。分別為軟件的安裝、源文件的創建、編譯與調試以及最終的HEX文件生成。其中,軟件的安裝主要是通過登錄KEIL的官方文件下載軟件的商業版安裝包。通過點擊其解壓后的安裝包并雙擊其中的SETUP.EXE文件,在勾選其協議條款的同意按鈕并按提示輸入序列號后,后續的安裝步驟將自動完成;而源文件的創建則是再打開軟件后創立新的項目,后在新創利的項目中編寫代碼便可生成C與源程序的源文件。編譯與調試的主要任務便是檢查并調試源代碼程序,以找出代碼之中錯誤并加以及時的改正,以免影響到后續的軟件運行。至于最后的HEX文件生成則需借助編譯器寫入單片機芯片中,以此為后續的仿真調試提供條件。
總之,C語言本身兼具高級語言和匯編語言的雙重特點,加之該語言能直接操作單片機硬件,故使得該語言于單片機制造中有著絕佳的發展前景。而目前,該技術已然在眾多領域得到了極其廣泛的運用,甚至在單片機開發中,C語言已然取代了其他匯編語言并成了最合適單片機開發的語言。由此可見,c語言在單片機技術中的運用還將迎來更大的發展空間,因此,我們也必須要對該語言的使用給予高度重視。