音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

[轉(zhuǎn)貼]HC08 C語言程序設(shè)計(jì)(1)

作者:JerryBJ 欄目:單片機(jī)
[轉(zhuǎn)貼]HC08 C語言程序設(shè)計(jì)(1)
周末在www.mcu123.com上讀到劉玉宏同志的這篇文章,覺得寫得很好,基本上涵蓋了使用C語言對(duì)HC(S)08微控制器編程的基本知識(shí),推薦給大家。把這篇文章轉(zhuǎn)貼過來,沒有經(jīng)過原文作者和MCU123的允許,希望他們不會(huì)生氣。若作者和MCU123對(duì)此感到不適,請(qǐng)即告知,我們立刻刪除此轉(zhuǎn)貼。原文鏈接如下:
http://www.mcu123.com/news/Article/uc/MOTOROLA/200608/252.html

HC08 C語言程序設(shè)計(jì)(1)

作者:劉玉宏    文章來源:本站原創(chuàng)    點(diǎn)擊數(shù):     更新時(shí)間:2006-8-23     



16.1 HC08 C語言簡(jiǎn)介


16.1.1 嵌入式C語言


1. 編程語言的使用原則

在目前的單片機(jī)應(yīng)用系統(tǒng)研制過程中,主要使用匯編語言和C語言作為開發(fā)語言,兩者各有特點(diǎn)。

    匯編語言的特點(diǎn):

l         直接操作硬件及資源。

l         生成代碼精簡(jiǎn)高效。

l         起步要求較高,程序員需對(duì)硬件有深刻的了解,一個(gè)好的程序員往往能大大減少開發(fā)與調(diào)試的周期。

l         可移植性較差,硬件或資源改變代碼需要大量修改。

C語言的特點(diǎn):

l         對(duì)程序員要求較低,往往只需要程序員了解一定的硬件知識(shí)即可。

l         可移植性較好,可以編寫跨平臺(tái)的嵌入式軟件。

l         不需要程序員管理堆棧。在調(diào)用子程序和中斷子程序時(shí),不需要用戶處理繁鎖的棧操作,加快了開發(fā)進(jìn)度,同時(shí)減少了棧操作出錯(cuò)的可能性。

l         生成代碼的效率取決于編譯器和程序員的編程風(fēng)格。HC08C的編譯器已經(jīng)對(duì)部分硬件資源進(jìn)行了封裝,如:堆棧、子程序的跳轉(zhuǎn)、中斷處理時(shí)現(xiàn)場(chǎng)的保護(hù)。C代碼中的函數(shù)、控制語句在編譯時(shí)都會(huì)被編譯器編譯成相應(yīng)的匯編指令,這些語句生成的代碼量也不盡相等。而且同樣功能的總代碼生成量比使用匯編語言略高20%

任何一款編譯器都不會(huì)比一個(gè)有經(jīng)驗(yàn)的匯編語言程序員編寫的匯編程序效率高,但是寫一個(gè)好的C程序然后轉(zhuǎn)換為高效的匯編程序比直接寫高效的匯編程序就容易多了。

綜上所述,無論是采用C語言還是匯編語言都各有其利弊。我們既不推薦在學(xué)習(xí)與開發(fā)嵌入式軟件過程中完全采取匯編語言(因?yàn)閰R編語言對(duì)一個(gè)不懂硬件的新手來說,是需要一定的時(shí)間才能上手的),也不贊同完全使用C語言(因?yàn)橛性S多底層的操作,C的語句是無法做到的)。所以在開發(fā)過程中,我們往往采用C和匯編結(jié)合的一種編程風(fēng)格,要充分利用這兩者的優(yōu)勢(shì)。例如我們通常把底層的對(duì)硬件的操作留給匯編指令,把與硬件無關(guān)或相關(guān)性較少的部分用C代碼實(shí)現(xiàn)。當(dāng)然,要充分發(fā)揮兩者的性能,需要程序員對(duì)編譯器有一定了解,并注重平時(shí)的積累

2. C語言對(duì)硬件的要求

并不是所有的MCU都可以用C語言來開發(fā),它們必需具備一定的硬件條件:

l         完整的指令系統(tǒng)

l         擁有分別為運(yùn)算和指針服務(wù)的16位寄存器,在HC08中就是HX和PC

l         堆棧指針和堆棧結(jié)構(gòu)指針,在HCS08 C 語言中它們都是SP

l         連續(xù)的地址空間

3. 嵌入式C語言與標(biāo)準(zhǔn)C語言的區(qū)別

純粹的ANSI C語言并不適合單片機(jī)開發(fā),這是因?yàn)椋?br>
l         嵌入式系統(tǒng)與硬件密切相關(guān)

l         大部分嵌入式系統(tǒng)使用中斷

l         ANSI C 語言的變量類型提升規(guī)則對(duì)存儲(chǔ)器消耗非常大

l         有些MCU不支持C語言堆棧.

l         很多MCU具有多種存儲(chǔ)空間,例如51單片機(jī)的程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、特殊功能存儲(chǔ)器等  

因此嵌入式C語言必需適合嵌入式的特殊環(huán)境:

l         有限 RAM

l         有限 ROM

l         有限堆?臻g

l         要求具有硬件編程向?qū)?br>
l         嚴(yán)格的時(shí)序(ISR, tasks, ...)

l         必需具有多種指針類型 (far/near/rom/uni/paged/...)

l         必需具有特殊關(guān)鍵字/符號(hào) (@, interrupt, tiny, ...)

4. 嵌入式C編譯器應(yīng)具有的功能

l         適合ROM代碼

l         優(yōu)化代碼

l         重入代碼

l         支持CPU系列的不同成員

l         支持不同的存儲(chǔ)器模式

對(duì)于一個(gè)編譯器我們還應(yīng)該注意以下細(xì)節(jié),不同的編譯器在這些方面差異較大

l         能內(nèi)嵌匯編、混合編程

l         具有中斷服務(wù)編程能力

l         可輸出匯編語言源文件

l         帶有標(biāo)準(zhǔn)庫

l         具有初始化硬件和建立C語言運(yùn)行環(huán)境的啟動(dòng)代碼

5. 嵌入式C連接器應(yīng)具有的功能

l         合并不同代碼段

l         為CPU分配存儲(chǔ)器 (RAM, ROM, stack, special areas)

l         產(chǎn)生調(diào)試文件 (包括符號(hào)、行號(hào)等)

l         產(chǎn)生目標(biāo)文件的存儲(chǔ)器映像



16.1.2 CodeWarrior for HCS08


Metrowerks 是MOTOROLA1999收購(gòu)并獨(dú)立運(yùn)作的子公司,其軟件產(chǎn)品CodeWarrior專門是面向MOTOROAL(FREESCALE)所有的MCU與DSP嵌入式應(yīng)用、跨平臺(tái)的軟件工具,是MOTOROLA向用戶的推薦產(chǎn)品。

CodeWarrior for HCS08 是面向以HC08或S08為CPU的單片機(jī)嵌入式應(yīng)用開發(fā)的軟件包。其中包括集成環(huán)境IDE、處理器專家?guī)臁⑷酒抡、可視化參?shù)顯示工具、項(xiàng)目工程管理器、C交叉編譯器、匯編器、鏈接器以及調(diào)試器。可以完成從源代碼編輯、編譯到調(diào)試的全部工作,本書將在以后的章節(jié)中介紹其使用方法,以下所提到C語言均是指CodeWarrior for HCS08的C交叉編譯器所支持的C語言。



16.2 HCS08 C語言的擴(kuò)展語法
HCS08C語言的語法基本與標(biāo)準(zhǔn)C相同。有關(guān)標(biāo)準(zhǔn)C語言的語法本書不再介紹,請(qǐng)讀者自行參考相關(guān)書籍。本節(jié)主要介紹HCS08 C語言對(duì)標(biāo)準(zhǔn)C語言的擴(kuò)展語法。

16.2.1基本數(shù)據(jù)類型


數(shù)據(jù)類型
大小
無符號(hào)(unsigned)數(shù)據(jù)范圍
有符號(hào)(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ī)定長(zhǎng)度,不過八位的單片機(jī)的C編譯器一般都把int定義為16位有符號(hào)數(shù)。但是由于8位機(jī)處理8位數(shù)據(jù)是效率最高的,所以int類型和更大的類型都應(yīng)該在必需要時(shí)才使用。最好不用使用浮點(diǎn)數(shù)。

CHAR類型可能在不同編譯器有不同的定義,或者根本沒有定義,為了便于程序移植要,最好不要用CHAR這個(gè)符號(hào)應(yīng)給它起個(gè)別名。

可以為所有用到的數(shù)據(jù)類型進(jìn)行重新定義。

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資源應(yīng)該為每個(gè)變量盡量用最小的數(shù)據(jù)類型;盡量少用有符號(hào)數(shù)據(jù);可以在表達(dá)式中用強(qiáng)制類型轉(zhuǎn)換把數(shù)據(jù)長(zhǎng)度縮到最短。




參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
各路高手請(qǐng)推薦學(xué)習(xí)MPC852的好資料
冷火系列與ARM系列相比,有那些優(yōu)勢(shì)?
請(qǐng)問下,coldfire有沒有這樣的CPU
尋編寫USB驅(qū)動(dòng)軟件合作伙伴
請(qǐng)教下張大俠,mr32的pwm如何實(shí)現(xiàn)?
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)