|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe |
[轉貼]HC08 C語言程序設計(1) |
| 作者:JerryBJ 欄目:單片機 |
周末在www.mcu123.com上讀到劉玉宏同志的這篇文章,覺得寫得很好,基本上涵蓋了使用C語言對HC(S)08微控制器編程的基本知識,推薦給大家。把這篇文章轉貼過來,沒有經(jīng)過原文作者和MCU123的允許,希望他們不會生氣。若作者和MCU123對此感到不適,請即告知,我們立刻刪除此轉貼。原文鏈接如下: http://www.mcu123.com/news/Article/uc/MOTOROLA/200608/252.html HC08 C語言程序設計(1) 作者:劉玉宏 文章來源:本站原創(chuàng) 點擊數(shù): 更新時間:2006-8-23 16.1 HC08 C語言簡介 16.1.1 嵌入式C語言 1. 編程語言的使用原則 在目前的單片機應用系統(tǒng)研制過程中,主要使用匯編語言和C語言作為開發(fā)語言,兩者各有特點。 匯編語言的特點: l 直接操作硬件及資源。 l 生成代碼精簡高效。 l 起步要求較高,程序員需對硬件有深刻的了解,一個好的程序員往往能大大減少開發(fā)與調試的周期。 l 可移植性較差,硬件或資源改變代碼需要大量修改。 C語言的特點: l 對程序員要求較低,往往只需要程序員了解一定的硬件知識即可。 l 可移植性較好,可以編寫跨平臺的嵌入式軟件。 l 不需要程序員管理堆棧。在調用子程序和中斷子程序時,不需要用戶處理繁鎖的棧操作,加快了開發(fā)進度,同時減少了棧操作出錯的可能性。 l 生成代碼的效率取決于編譯器和程序員的編程風格。HC08C的編譯器已經(jīng)對部分硬件資源進行了封裝,如:堆棧、子程序的跳轉、中斷處理時現(xiàn)場的保護。C代碼中的函數(shù)、控制語句在編譯時都會被編譯器編譯成相應的匯編指令,這些語句生成的代碼量也不盡相等。而且同樣功能的總代碼生成量比使用匯編語言略高20% 任何一款編譯器都不會比一個有經(jīng)驗的匯編語言程序員編寫的匯編程序效率高,但是寫一個好的C程序然后轉換為高效的匯編程序比直接寫高效的匯編程序就容易多了。 綜上所述,無論是采用C語言還是匯編語言都各有其利弊。我們既不推薦在學習與開發(fā)嵌入式軟件過程中完全采取匯編語言(因為匯編語言對一個不懂硬件的新手來說,是需要一定的時間才能上手的),也不贊同完全使用C語言(因為有許多底層的操作,C的語句是無法做到的)。所以在開發(fā)過程中,我們往往采用C和匯編結合的一種編程風格,要充分利用這兩者的優(yōu)勢。例如我們通常把底層的對硬件的操作留給匯編指令,把與硬件無關或相關性較少的部分用C代碼實現(xiàn)。當然,要充分發(fā)揮兩者的性能,需要程序員對編譯器有一定了解,并注重平時的積累 2. C語言對硬件的要求 并不是所有的MCU都可以用C語言來開發(fā),它們必需具備一定的硬件條件: l 完整的指令系統(tǒng) l 擁有分別為運算和指針服務的16位寄存器,在HC08中就是HX和PC l 堆棧指針和堆棧結構指針,在HCS08 C 語言中它們都是SP l 連續(xù)的地址空間 3. 嵌入式C語言與標準C語言的區(qū)別 純粹的ANSI C語言并不適合單片機開發(fā),這是因為: l 嵌入式系統(tǒng)與硬件密切相關 l 大部分嵌入式系統(tǒng)使用中斷 l ANSI C 語言的變量類型提升規(guī)則對存儲器消耗非常大 l 有些MCU不支持C語言堆棧. l 很多MCU具有多種存儲空間,例如51單片機的程序存儲器、數(shù)據(jù)存儲器、特殊功能存儲器等 因此嵌入式C語言必需適合嵌入式的特殊環(huán)境: l 有限 RAM l 有限 ROM l 有限堆?臻g l 要求具有硬件編程向導 l 嚴格的時序(ISR, tasks, ...) l 必需具有多種指針類型 (far/near/rom/uni/paged/...) l 必需具有特殊關鍵字/符號 (@, interrupt, tiny, ...) 4. 嵌入式C編譯器應具有的功能 l 適合ROM代碼 l 優(yōu)化代碼 l 重入代碼 l 支持CPU系列的不同成員 l 支持不同的存儲器模式 對于一個編譯器我們還應該注意以下細節(jié),不同的編譯器在這些方面差異較大 l 能內嵌匯編、混合編程 l 具有中斷服務編程能力 l 可輸出匯編語言源文件 l 帶有標準庫 l 具有初始化硬件和建立C語言運行環(huán)境的啟動代碼 5. 嵌入式C連接器應具有的功能 l 合并不同代碼段 l 為CPU分配存儲器 (RAM, ROM, stack, special areas) l 產生調試文件 (包括符號、行號等) l 產生目標文件的存儲器映像 16.1.2 CodeWarrior for HCS08 Metrowerks 是MOTOROLA于1999收購并獨立運作的子公司,其軟件產品CodeWarrior專門是面向MOTOROAL(FREESCALE)所有的MCU與DSP嵌入式應用、跨平臺的軟件工具,是MOTOROLA向用戶的推薦產品。 CodeWarrior for HCS08 是面向以HC08或S08為CPU的單片機嵌入式應用開發(fā)的軟件包。其中包括集成環(huán)境IDE、處理器專家?guī)、全芯片仿真、可視化參?shù)顯示工具、項目工程管理器、C交叉編譯器、匯編器、鏈接器以及調試器。可以完成從源代碼編輯、編譯到調試的全部工作,本書將在以后的章節(jié)中介紹其使用方法,以下所提到C語言均是指CodeWarrior for HCS08的C交叉編譯器所支持的C語言。 16.2 HCS08 C語言的擴展語法 HCS08C語言的語法基本與標準C相同。有關標準C語言的語法本書不再介紹,請讀者自行參考相關書籍。本節(jié)主要介紹HCS08 C語言對標準C語言的擴展語法。 16.2.1基本數(shù)據(jù)類型 數(shù)據(jù)類型 大小 無符號(unsigned)數(shù)據(jù)范圍 有符號(signed)數(shù)據(jù)范圍 CHAR 8 bits 0 ~ 255 –128 ~ 127 SHORT int 16 bits 0 ~ 65535 –32768 ~ 32767 Int 16 bits 0 ~ 65535 –32768 ~ 32767 LONG int 32 bits 0 ~ 4294967295 –2147483648 ~ 2147483647 ANSI C沒有為int類型規(guī)定長度,不過八位的單片機的C編譯器一般都把int定義為16位有符號數(shù)。但是由于8位機處理8位數(shù)據(jù)是效率最高的,所以int類型和更大的類型都應該在必需要時才使用。最好不用使用浮點數(shù)。 CHAR類型可能在不同編譯器有不同的定義,或者根本沒有定義,為了便于程序移植要,最好不要用CHAR這個符號應給它起個別名。 可以為所有用到的數(shù)據(jù)類型進行重新定義。 typedef unsigned CHAR UINT8; typedef signed CHAR SINT8; typedef unsigned int UINT16; typedef int SINT16; typedef unsigned LONG int UINT32; typedef LONG int SINT32; 使用這樣的定義程序移植性較好。 為了節(jié)約有限的RAM資源應該為每個變量盡量用最小的數(shù)據(jù)類型;盡量少用有符號數(shù)據(jù);可以在表達式中用強制類型轉換把數(shù)據(jù)長度縮到最短。 |
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |