#pragma CODE_SEG __NEAR_SEG NON_BANKED詳解

原文地址:http://goo.gl/E5Ei5

這要還是要從FLASH分頁和非分頁的區別說起。
    下面詳細說一說,FLASH裏非分頁和分頁的使用。 要明白一點,分頁是不可見的,要用的時候PPAGE參與尋
址。
   FLASH裏非分頁工作機制
   FLASH一共爲128K,一頁是16K,那麼應該有8頁纔是,但是實際只有6個分頁。有2個非分頁放在4000-7FFF
,和C000-FFFF兩個邏輯地址窗裏。那麼,當程序的尋址在64K之內(2^16=64K,16位機的尋址能力是64K)時,
就不用分頁了,直接使用那兩個非分頁的數據。實際上,3E頁 3F頁是可見的,其實他們就是那2個非分頁的映
射。因此,使用非分頁FLASH,就不須設置PPAGE寄存器,直接使用邏輯地址即可。
   這點我們可以從以下看出:
/* non-paged FLASHs */
      ROM_4000      = READ_ONLY     0x4000 TO   0x7FFF;
      ROM_C000      = READ_ONLY     0xC000 TO   0xFEFF;
PLACEMENT
      NON_BANKED,    INTO ROM_C000/*, ROM_4000*/;
    
    很直觀地看出,把這兩個可以直接使用邏輯地址的頁面設爲NON_BANKED, 那麼中斷函數放在NON_BANKED裏
,就可以把函數放在64K的尋址程序段中。這麼一來,進中斷就方便多了,效率也高很多。

發佈了33 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章