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 的存取做最佳化,
免得存取錯誤。
留言
張貼留言