嚴(yán)均 周煌輝
摘要:本文簡要闡述了C語言在單片機(jī)程序開發(fā)中的應(yīng)用優(yōu)勢,就C語言在單片機(jī)開發(fā)中的具體步驟進(jìn)行了分析探討,包括開發(fā)工具的選擇與安裝、建立源文件、調(diào)試編譯程序以及生成HEX文件,并在此基礎(chǔ)上提出了C語言在單片機(jī)開發(fā)應(yīng)用過程中應(yīng)注意的一些事項(xiàng)。
關(guān)鍵詞:C語言;單片機(jī)開發(fā);C語言編程
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)03-0265-02
C語言是一門面向過程的高級計(jì)算機(jī)編程語言,與匯編語言相較,利用C語言進(jìn)行編程工作量少,可讀性好,易于修改、移植和調(diào)試,且可以保證代碼質(zhì)量。由于C語言兼顧了高級語言與匯編語言的優(yōu)點(diǎn),且不需要任何環(huán)境支持便可以運(yùn)行,普適性強(qiáng),因此在編程領(lǐng)域得到了廣泛的運(yùn)用。運(yùn)用C語言進(jìn)行單片機(jī)程序的開發(fā),開發(fā)者無須對單片機(jī)硬件結(jié)構(gòu)進(jìn)行全面了解也可以進(jìn)行高效編程,這為單片機(jī)程序開發(fā)提供了很大的便利,使得單片機(jī)程序開發(fā)變得簡單且可靠。本文基于單片機(jī)程序開發(fā)實(shí)踐,就C語言在單片機(jī)開發(fā)中的應(yīng)用進(jìn)行分析探討,以期能夠?yàn)閺V大單片機(jī)程序開發(fā)者提供一些參考與借鑒。
1 C語言在單片機(jī)程序開發(fā)中的應(yīng)用優(yōu)勢
單片機(jī)屬于一種微型計(jì)算機(jī),具有體積小、功耗小、功能強(qiáng)大等特點(diǎn),在工業(yè)控制領(lǐng)域及現(xiàn)代電子產(chǎn)品設(shè)計(jì)中具有廣泛的應(yīng)用。單片機(jī)除對體積、功耗等具有嚴(yán)格要求外,還依賴于應(yīng)用程序的開發(fā)。由于單片機(jī)內(nèi)部存儲器的存儲空間較小且對運(yùn)行效率要求較高,因此,對于應(yīng)用程序開發(fā)來說,必須要考慮編譯代碼所占的空間大小問題及運(yùn)行效率問題。匯編語言屬于第二代編程語言,是面向機(jī)器的程序設(shè)計(jì)語言,其特點(diǎn)是保持了機(jī)器語言優(yōu)秀的執(zhí)行效率,能夠直接控制硬件,同時(shí)具有可讀性及簡便性,且程序占用存儲空間少,這些特點(diǎn)十分契合單片機(jī)程序的開發(fā)要求,因此,單片機(jī)程序開發(fā)中匯編語言的應(yīng)用十分廣泛。但匯編語言作為一種面向機(jī)器的語言,對于開發(fā)者來說并不是十分友好,主要表現(xiàn)為程序代碼的可讀性較差、編寫和調(diào)試復(fù)雜、移植困難等。
C語言兼顧了高級語言與匯編語言的優(yōu)點(diǎn),相較于匯編語言,具有更高的可閱讀性,便于理解,調(diào)試、修改更為容易簡便;更為重要的是,其具有良好的可移植性,大大提高了程序的重復(fù)利用率,有助于程序開發(fā)人員提高程序編寫效率。C語言的跨平臺特性是其最為顯著的特征,這使得用C語言編寫的程序可以在不同的計(jì)算機(jī)平臺穩(wěn)定運(yùn)行,大大提高了程序開發(fā)者的工作效率,減少了成本。C語言擁有34種運(yùn)算符,數(shù)組、指針等多種表達(dá)方式,庫函數(shù)豐富,運(yùn)算結(jié)構(gòu)簡單易懂。由于C語言包含了單片機(jī)的指令集,因此,對于一些簡單的單片機(jī)程序開發(fā),即使程序開發(fā)者不了解單片機(jī)的硬件結(jié)構(gòu),也可以用C語言編寫出高質(zhì)量的程序代碼。C語言將程序開發(fā)分解為多個(gè)互不影響的功能模塊,這使得后期優(yōu)化變得更為便利[1]。隨著單片機(jī)的應(yīng)用范圍不斷拓展,C語言憑借其強(qiáng)大的功能及特性,在單片機(jī)程序開發(fā)中的應(yīng)用優(yōu)勢日益明顯,得到了單片機(jī)開發(fā)者的廣泛應(yīng)用。
2 C語言在單片機(jī)開發(fā)中的具體應(yīng)用步驟
2.1 開發(fā)工具的選擇與安裝
C語言開發(fā)工具的選擇與安裝是運(yùn)用C語言進(jìn)行單片機(jī)開發(fā)的首要環(huán)節(jié)。C語言開發(fā)工具又叫C語言編譯器或集成開發(fā)環(huán)境,C語言的編譯器有很多種,不同的平臺下有不同的編譯器,如Windows下常用的是微軟編譯器cl.exr,Linux下常用的是CUN組織開發(fā)的GCC,Mac下常用的是LLVM/Clang。安裝編譯器或者IDE(集成開發(fā)環(huán)境),也叫搭建開發(fā)環(huán)境。Windows下的C語言IDE眾多,常用的包括Visual Studio、Dev C++、VisualC++6.0等。
Visual Studio(簡稱VS),它是Windows下的標(biāo)準(zhǔn)IDE,但是VS安裝包有點(diǎn)龐大,下載不方便,安裝時(shí)間較長,而且會安裝很多暫時(shí)用不到的工具。Dev C++是一款免費(fèi)開源的C/C++IDE,內(nèi)嵌CCC編譯器(Linux GCC編譯器的Windows移植版),優(yōu)點(diǎn)是體積小(只有幾十兆)、安裝卸載方便、學(xué)習(xí)成本低,缺點(diǎn)是調(diào)試功能弱。Visual C++ 6.0(簡稱VC 6.0)是微軟開發(fā)的一款經(jīng)典的IDE,但VC 6.0是1998年的產(chǎn)品,在Win7、Win8、Winl0T會有各種各樣的兼容性問題,甚至根本不能運(yùn)行,目前基本只作為教學(xué)工具來使用。除上述開發(fā)工具外,Windows平臺下還有很多其他的IDE,如Code::Blocks是一款開源、跨平臺、免費(fèi)的C/C++ IDE,它和Dev C++非常類似,小巧靈活,易于安裝和卸載,不過它的界面要比Dev C++復(fù)雜一些;Turbo C是一款DOS年代的C語言開發(fā)工具,程序員只能使用鍵盤來操作Turbo C,不能使用鼠標(biāo),所以非常不方便。但是Turbo C集成了一套圖形庫,可以在控制臺程序中畫圖,所以至今仍然有人在使用;C-Free是一款國產(chǎn)Windows下的C/C++ IDE,整個(gè)軟件只有14M,非常輕巧,安裝也簡單,界面也比Dev C++漂亮,缺點(diǎn)也是調(diào)試功能弱。這些工具在功能、難易度等方面各異,實(shí)際應(yīng)用中可以根據(jù)具體的單片機(jī)設(shè)計(jì)來合理選擇。
2.2 建立C源文件
搭建好開發(fā)環(huán)境后,在開始編程前,首先需要?jiǎng)?chuàng)建一個(gè)新的項(xiàng)目,可以用項(xiàng)目特征來進(jìn)行命名,選擇好存儲路徑即可完成新項(xiàng)目的建立。這里需要注意的是,項(xiàng)目名稱和存儲路徑最好不要包含中文。接下來就是在所創(chuàng)建項(xiàng)目中添加源文件,可以是新建文件也可以將以往程序文件內(nèi)容添加到項(xiàng)目當(dāng)中;之后需要再創(chuàng)建一個(gè)全新的語言程序文件,并在文字編輯窗口中利用void、signed、intint、void、restrict、return、continue等C語言基本語言結(jié)構(gòu)對所需要的單片機(jī)程序進(jìn)行逐步編寫,并在編寫任務(wù)完成后保存文件并生成最終的C語言文件[2]。
2.3 調(diào)試編譯程序
在程序代碼編寫完成之后,后續(xù)一項(xiàng)重要的工作就是進(jìn)行調(diào)試編譯。調(diào)試編譯屬于C語言在單片機(jī)程序開發(fā)中的一個(gè)至關(guān)重要的中間環(huán)節(jié),目的是對編寫好的程序進(jìn)行檢查與完善,找出源文件中存在的BUC并進(jìn)行及時(shí)的修正。在此階段,程序開發(fā)人員可以借助編譯器提供的調(diào)試模式對源程序進(jìn)行仿真調(diào)試,調(diào)試過程中程序開發(fā)人員要悉心觀察程序仿真運(yùn)行過程,完成對源程序的完善。編譯是將C語言編程文件轉(zhuǎn)換成機(jī)器可以識讀的文件,編輯器自動(dòng)完成編譯工作并生成目標(biāo)文件。生成的目標(biāo)文件需要進(jìn)行整合并鏈接,如果代碼沒有錯(cuò)誤,則編譯器會顯示鏈接成功,并生成一個(gè)完整的可執(zhí)行文件。
2.4 生成HEX文件
生成HEX文件可視為單片機(jī)C語言程序開發(fā)的最后一個(gè)環(huán)節(jié),借助編譯器,C語言程序在完成編譯后可以生成格式文件HEX,以便被單片機(jī)獲取和執(zhí)行。能夠順利生成HEX格式文件,基本可以表明單片機(jī)C語言程序開發(fā)任務(wù)已經(jīng)完成,在此基礎(chǔ)上,借助編譯器可以將單片機(jī)HEX格式文件寫入到存儲器中,并通過仿真器對所設(shè)計(jì)的單片機(jī)程序的性能進(jìn)行測試、調(diào)整。
3 C語言在單片機(jī)開發(fā)中應(yīng)用的注意事項(xiàng)
3.1 關(guān)注編程代碼效率的提升
目前,C語言已經(jīng)在單片機(jī)程序開發(fā)中被廣泛應(yīng)用,但作為一種高級語言,C語言程序代碼執(zhí)行效率是程序開發(fā)者應(yīng)重點(diǎn)關(guān)注的問題。首先,應(yīng)合理選擇數(shù)據(jù)類型,若可以使用字符型(char)變量,就不要使用整型變量;其次,在C語言實(shí)際應(yīng)用中,執(zhí)行浮點(diǎn)數(shù)運(yùn)算時(shí)常選用double型,因?yàn)閒loat型的精度偏低,且雙精度浮點(diǎn)數(shù)和單精度浮點(diǎn)數(shù)的計(jì)算代價(jià)相差無幾。事實(shí)上,對51單片機(jī)來說,雙精度運(yùn)算比單精度運(yùn)算的速度快。第三,應(yīng)對各類C語言編譯器進(jìn)行充分的了解,結(jié)合編程實(shí)際合理選擇編譯器。同時(shí),還應(yīng)將單片機(jī)C語言編程中出現(xiàn)的高頻率程序與對應(yīng)的匯編語言行數(shù)進(jìn)行比較匯總,對編譯效率形成一個(gè)清晰的認(rèn)識,進(jìn)而提高單片機(jī)C語言編程代碼的編譯、執(zhí)行效率[3]。
3.2 變量類型的定義要明確
一些程序開發(fā)者受程序編寫習(xí)慣的影響,程序編寫過程中往往不考慮函數(shù)內(nèi)外情況,在程序初始位置直接定義新的變量,雖然原則上并不會構(gòu)成程序編寫錯(cuò)誤,但一定程度上會對程序的執(zhí)行產(chǎn)生不利影響。因此,在C語言程序編寫過程中,要注重變量類型定義的明確化,并依據(jù)編譯器版本的不同,對變量放置位置進(jìn)行合理選擇。如:一般來講在C90版本的編譯器中,全局變量屬于函數(shù)外,只可以放置于引用之前,而在最新的C99版本中局部變量則可以被靈活的放置于任何位置。
參考文獻(xiàn):
[1]葉曉龍.51單片機(jī)C語言編程技巧探討[J].信息與電腦:理論版,2019(04):66-67.
[2]張延梅,論C語言在單片機(jī)開發(fā)中的應(yīng)用[J].信息技術(shù)與信息化,2018(11):78-80.
[3]張神.C語言在單片機(jī)開發(fā)中的應(yīng)用分析[J].江蘇科技信息,2017(18):47-48.