Keil C .......


函數宣告與指標


void ToUpper(char *); //將字串轉大寫

其中ToUpper()函數型態是void,參數是char *,如果宣告為這個函數宣告一個 pf指標,就會像下面一樣:

void (*pf)(char*); //指向函數的指標,例如: pf=ToUpper,但是不能寫成pf=ToUpper();

其中括號內的(*pf)會被括號結合,所以閱讀時他會是一個指標,所以他是一個指向函數的指標,如果省略就會不同意義:

void *pf(char *) ; //pf 是回傳指標的函數


變數宣告與指
char xdata* data pagePointer = 0x1000;

要看懂這行宣告,先要能看懂以下的東西,自然能領會。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1、
char pagePointer = 0x00;

意義:
宣告一個名為 pagePointer 的「變數」,型態為 char ,並賦予以初始值 0x00。
注意:宣告中並沒有明訂此一變數本身應儲存於何處的記憶體中。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2、
char * pagePointer;

意義:
宣告一個名為 pagePointer 的「指標」,指向型態為 char 的資料。
請注意:宣告中並沒有明訂此一指標本身應儲存於何處的記憶體中,
而且,也沒有指明其所指向的 char 型態資料在於何種記憶體中。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
3、
char xdata pagePointer = 0x00;

意義:
宣告一個名為 pagePointer 的「變數」,型態為 char ,賦予以初始值 0x00,
並指明此一變數本身所儲存的空間在外部記憶體(XDATA)中。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
4、
char xdata* pagePointer;

意義:
宣告一個名為 pagePointer 的「指標」,指向型態為 char 的資料,
並指明其指向的 char 型態資料位在於在外部記憶體(XDATA)中。
同樣的,此一宣告中並沒有明訂此一指標本身應被儲存於何處的記憶體中。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
5、
char xdata* pagePointer = 0x1000;

意義:
宣告一個名為 pagePointer 的「指標」,指向型態為 char 的資料,
並指明其指向的 char 型態資料位在於在外部記憶體(XDATA)中。
在此宣告中有給定初始值 0x1000 ,
表示此指標指向外部記憶體(XDATA)位址為 0x1000 的 char 型態資料。
而同樣的,此一宣告中也沒有明訂此一指標本身應被儲存於何處的記憶體中。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
6、
char * data pagePointer;

意義:
宣告一個名為 pagePointer 的「指標」,指向型態為 char 的資料,
此宣告並無指明其指向的 char 型態資料位在於在何處記憶體中。
但此一宣告中「有明訂」此一指標本身應被儲存於內部記憶體(DATA)中。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

辛苦了!看到這裡,再請各位朋友嘗試解試看看下面這行宣告:

7、
char xdata* data pagePointer = 0x1000;

沒錯!其意義為:
宣告一個名為 pagePointer 的「指標」,指向型態為 char 的資料,
並指明其指向的 char 型態資料位在於在外部記憶體(XDATA)中。
而此一宣告中「有明訂」此一指標本身應被儲存於內部記憶體(DATA)中。
且在此宣告中有給定初始值 0x1000 ,
表示此指標指向外部記憶體(XDATA)位址為 0x1000 的 char 型態資料。


Keil C 有關 memory map IO 的宣告和使用
Keil C 有關 memory map IO 的宣告和使用
例如 xdata 的 位置 0x8000 為一個 IO port,如何對它做存取?
宣告:
volatile xdata unsigned char MyIOport _at_ 0x8000;

使用:
unsigned char PortData;
PortData= MyIOport;//讀xdata 0x8000 到 PortData 變數
MyIOport= 0x55;//把0x55寫入xdata 0x8000

宣告中的 volatile 是告訴編譯器不要對 MyIOport 的存取做最佳化,
免得存取錯誤。

留言

這個網誌中的熱門文章

NMEA標準格式 -- GPS

網路 Transformer 的用途

cut,sed,awk 字串處理