Keil C51 指標變數 (pointers to specific memory spaces)

Posted by: 邱小新 at 上午11:16 in
由於 mcs51 的記憶體分成五大部份(註一),所以搞的 SDCC 的指標也要分成好幾種。以下先簡介指標定義準則:

type
變數型態
located
指向位址
pointerphysical
變數位址
name
unsigned charxdata*datap

指標分類

  1. unsigned xdata char * data p;
    指向外部記憶體的指標變數,變數存放在內部記憶體。
  2. unsigned char data * xdata p;
    指向內部記憶體的指標變數,變數存放在外部記憶體。
  3. unsigned char code * xdata p;
    指向程式記憶體的指標變數,變數存放在外部記憶體。
  4. unsigned char code * code p;
    指向程式記憶體的指標變數,變數存放在程式記憶體,指標變數是唯讀,所以必須先設定初始值
  5. unsigned char * xdata p;
    指向任何記憶體的指標變數 (generic pointer),變數存放在外部記憶體。
  6. unsigned char * p;
    指向任何記憶體的指標變數 (generic pointer),變數存放由 memory model 決定。
  7. char (* data fp)(void);
    指向程式記憶體的函數指標變數,變數存放在內部記憶體。函數指標變數只能指向程式記憶體,無法修改喔
  8. 由於內部記憶體指標讀取都是使用間接定址 (indirect addressing),所以無法存取 SFR 空間的記憶體內容。

指標變數大小

data1
xdata2
code2
generic pointer3

  1. generic pointer 是設計用來可以做通用指標變數使用,可以任意變換指標指向位址,但是相對的需要佔用 3 個 bytes 的位置,而且在做讀取寫入時,需要另外執行一個函數來轉換位址,沒事就少用一點吧。

0 意見

張貼留言