SDCC 指標變數 (pointers to specific memory spaces)

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

located
指向位址
type
變數型態
pointerphysical
變數位址
name
__xdataunsigned char*__datap

指標分類

  1. __xdata unsigned char * __data p;
    指向外部記憶體的指標變數,變數存放在內部記憶體。
  2. __data unsigned char * __xdata p;
    指向內部記憶體的指標變數,變數存放在外部記憶體。
  3. __code unsigned char * __xdata p;
    指向程式記憶體的指標變數,變數存放在外部記憶體。
  4. __code unsigned char * __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 的位置,而且在做讀取寫入時,需要另外執行一個 __gptrget 或 __gptrput 來轉換位址,沒事就少用一點吧。

0 意見

張貼留言