KEIL C51 和 ANSI C 的區別

2021-07-04 05:35:37 字數 2477 閱讀 4943

不同系列的嵌入式系統的c編譯器,根據它所對應的不同晶元系列有其各自的特點,在這裡,以keil公司的針對51系列的keilc51編譯器為例,簡要說明它與ansi-c的主要區別,其它的編譯系統與ansi-c的差別,可具體參照指定編譯系統手冊,找出它們的不同之處。清楚嵌入式系統的c編譯器與標準 ansi-c的區別是用c編譯器系統進行嵌入式系統開發的前提條件。

不同的嵌入式c編譯系 統之所以與ansi-c有所不同,主要是由於它們所針對的硬體系統有其各自不同的硬體特點,對國內開發人員熟悉的51系列微控制器,有著最為豐富的編譯系 統,其中最為出色的當屬keil(也就是大家熟知的frankling,但frankling只相當於keil的早期產品,它是keil公司在美國銷售時 曾使用的乙個品牌)。

從頭檔案來說,51系列有不同的廠家,不同的系列產品,如僅 atmel公司就有大家熟悉的89c2051、89c51、89c52以及大家不熟悉的89s8252等系列產品。它們都是基於51系列的晶元,唯一不同 之處在於內部資源如定時器、中斷、i/o等數量以及功能的不同,為了實現這些功能,只需將相應的功能暫存器的標頭檔案載入在程式中就可實現它們所指定的不同功能。因此,keilc51系列標頭檔案集中體現了各系列晶元的不同功能。

從資料型別來說,由於8051系列器件包含位操作空間和豐富的位操作指令,直接嵌入式c與ansi-c相比,比ansi-c多一種位型別,使得它能如同彙編一樣,靈活的進行位指令操作。

從 資料儲存型別來說,8051系列有片內、片外程式儲存器,片內、片外資料儲存器,片內程式儲存器還分直接定址區和間接定址型別,分別對應code、 data、xdata、idata以及根據51系列特點而設定的pdata型別,使用不同的儲存器,將使程式執行效率不同,在編寫c51程式時,最好指定 變數的儲存型別,這樣將有利於提高程式執行效率(此問題將在後面專門講述)。與ansi-c稍有不同,它只分samll、compact、large模 式,各種不同的模式對應不同的實際硬體系統,也將有不同的編譯結果。

從資料運算操作和程式 控制語句以及函式的使用上來講,它們幾乎沒有什麼明顯的不同,只是在函式的使用上,由於嵌入式系統的資源有限,它的編譯系統不允許太多的程式巢狀,c語言 的豐富的庫函式對程式開發提供了很大的幫助,但它的庫函式和ansi-c也有一些不同之處,從編譯相關的不同來說,由於51系列是8位機,擴充套件16位字元不被c51所支援,其次,ansi-c所具備的遞迴特性不被c51所支援,在c51中,要使用遞迴特性,必須用reentrant進行申明才能使用。

keilc51 與標準ansi-c在庫函式,由於部分庫函式不適合嵌入式處理系統,因此被排除在外,如字元螢幕和圖形函式,也有一些庫函式繼續使用,但這些庫函式是廠家針對硬體特點相應開發的,它們與ansi-c的構成及用法都有很大不同,如printf和scanf。在ansi-c中這兩個函式通常用於螢幕打和,接收 字元,而在keilc51中,它們則主要用於序列資料的收發。

ansi c的標準函式庫(與之相關聯的標頭檔案):

assert.h

ctype.h

errno.h

float.h

limits.h

locale.h

math.h

setjmp.h

signal.h

stdarg.h

stddef.h

stdio.h

stdlib.h

string.h

time.h

keil c 庫函式

c51強大功能及其高效率的重要體現之一在於其豐富的可直接呼叫的庫函式,多使用庫函式使程式**簡單,結構清晰,易於除錯和維護,下面介紹c51的庫函式系統。

c51提供的本徵函式是指編譯時直接將固定的**插入當前行,而不是用acall和lcall語句來實現,這樣就大大提供了函式訪問的效率,而非本徵函式則必須由acall及lcall呼叫。

c51的本徵庫函式只有9個,數目雖少,但都非常有用,列如下:

_crol_,_cror_:將char型變數迴圈向左(右)移動指定位數後返回

_iror_,_irol_:將int型變數迴圈向左(右)移動指定位數後返回

_lrol_,_lror_:將long型變數迴圈向左(右)移動指定位數後返回

_nop_: 相當於插入nop

_testbit_: 相當於jbc bitvar測試該位變數並跳轉同時清除。

_chkfloat_: 測試並返回源點數狀態。

使用時,必須包含#inclucle 一行。

如不說明,下面談到的庫函式均指非本徵庫函式。

1. 專用暫存器include檔案

例如8031、8051均為reg51.h其中包括了所有8051的sfr及其位定義,一般系統都必須包括本檔案。

2. 絕對位址include檔案absacc.h

該檔案中實際只定義了幾個巨集,以確定各儲存空間的絕對位址。

3. 動態記憶體分配函式,位於stdlib.h中

4. 緩衝區處理函式位於「string.h」中

其中包括拷貝比較移動等函式如:

memccpy memchr memcmp memcpy memmove memset

這樣很方便地對緩衝區進行處理。

Keil C51詳細設定

一.target名更改 開啟keil後,左側project workspace中的target可改,方法 右擊target manage compnents 雙擊待修改項即可,若要新增,使用對話方塊內對應工具欄。二.optionfor target 設定之target項 1 memary model...

Keil C51詳細設定

2013 12 10 19 41 251人閱讀收藏 舉報2010 12 30 19 54 39 分類 常用eda軟體 字型大小 訂閱 一.target名更改 開啟keil後,左側project workspace中的target可改,方法 右擊target manage compnents 雙擊待修...

KEIL C51 程式編譯

1.keil目錄 asm 放置組合語言的標頭檔案,格式為xx.inc。inc是include的簡寫。inc 放置c語言的標頭檔案,格式為xx.h。hlp 幫助檔案。help的簡寫。example 例子。rtxtiny2 keil自帶的rtx51作業系統。flashmon,mon51,mon390 目...