日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

飞思卡尔MC9S12系列单片机地址影射以及分页问题

發(fā)布時間:2024/3/12 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 飞思卡尔MC9S12系列单片机地址影射以及分页问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

對于用MCU的人來說,不一定要明白HCS12(x) memory map的機制和聯(lián)系。因為如果沒有系統(tǒng)地學(xué)習(xí)操作系統(tǒng)和編譯原理之類的課程,確實有些難度。并且,對于DG128 XS128這樣的MCU,默認的emory分配方式已經(jīng)夠用了。從這個意義上講,搞清楚memory map似乎不必要。
但是,你有沒有RAM不夠用的情況?有沒有想定義變量到FLASH ROM的情況?有沒有因為欲提高尋址效率而定義變量到非分頁區(qū)的情況?有沒有寫EEPROM但沒寫成功的情況?
? ?飛思的memory非常靈活,通過地址映射來提高效率是芯片制造商的一慣作風(fēng)(當然,首先這個CPU要有這種尋址和內(nèi)存映射轉(zhuǎn)換機制),但是,縱觀HCS12(x) memory map的東西,真是做到極限了。用我以前的話講是,用有限的資源獲得無限的好處了??纯碊G128,64K的邏輯空間,映射之后RAM EEPROM FALSH ROM,都可以充分發(fā)揮作用,而且擴展FLASH也方便。而XS128更高級一籌,有專門的MMC管理HCS12(x) memory map。
??我大體上了解這兩個片子的HCS12(x) memory map,因此就此談?wù)劺斫夂涂捶?#xff0c;如有錯誤,請大家不吝指出
首先,說說6個概念。
1
memory map?地址映射,不要理解成內(nèi)存映射,內(nèi)存是RAM。
2?為什么要映射?因為CPU的尋址是對物理地址操作,但是單片機的RESET之后只有相對地址。相對地址,我理

解為是一塊一塊的,不是連斷的。相對地址,顧名思義,是個相對的,沒有映射之前,CPU是找不到他的,也

用不了相對地址的數(shù)據(jù)。 粘一句百度上的解釋:為了保證CPU執(zhí)行指令時可正確訪問存儲單元,需將用戶程序

中的邏輯地址轉(zhuǎn)換為運行時由機器直接尋址的物理地址,這一過程稱為地址映射。
3 RAM,這個不多說,是存變量和棧的東西,高速,掉電即失。
4 EEPROM,這個是一種特別的FLASH。一般用來保存少量數(shù)據(jù),掉電不會丟失。FLASH也是非易失的,SD卡就是

一種FLASH。EEPROM和普通FLASH的區(qū)別,在于讀寫時的字節(jié)操作上。這個我基本上沒有體會,因為是相當?shù)讓?/p>

的東西。
5 FLASH和ROM,在HCS12(X)里,建議把FLASH和ROM等同起來理解。大家的程序就是放在這里面的。還有一個

CONST變量和中斷向量也是存在這里面的。ROM可能有個誤區(qū),只能讀不能寫,一次性的,不錯。但是,有加個

前提,應(yīng)該是可控的ROM。
6?還有一個重要的register 空間,這個是存放I/0地址和單片機可編程寄存器的空間,是廠家定義的。在頭文件里可以看到。如extern volatile PORTABSTR _PORTAB @(REG_BASE + 0x00000000)就是典型的register 空間映射。
? ?我把memory map理解成為3個內(nèi)容:一個是映射管理,一個是分頁機制,一個是尋址的問題。映射管理,就

是單片機RESET之后,邏輯地址和物理地址之間的關(guān)系。分頁機制的產(chǎn)生主要由于16位尋址能力有限,需要分

頁解決,另外在虛擬內(nèi)存管理上可以獲得更多的優(yōu)勢。至于,CPU尋址的問題,這個就不深糾了。
? ?這次以DG128的為例,XS128的稍復(fù)雜一些。理解了DG128的,XS128的問題就不大。
? ?先說一說映射管理:DG128里通過設(shè)置INITRG、INITRM、INITEE來實現(xiàn)映射。具體的設(shè)置看DS吧。默認情況

下:register 空間映射到0X0000到0x03FF,這個優(yōu)先級最高。RAM空間映射到0x0400-0X1FFF,看到?jīng)]有,實際

上只有7K,也就是說能用的RAM只有7K。但是,DG128的RAM有8K的邏輯空間啊。所以,可以改INITRG、INITRM

、INITEE重映射以提高RAM的實際可用空間。怎么改,看需要了。WJ在這里邏嗦一句,可以看看PE是怎么改的

。而FLASH映射了3個,有兩個非分頁地址0x4000-0x7FFF和0xC000-0xFEFF。還有一個分頁地址,這一個分頁地

址有6個頁面。6個頁面占用一個分頁窗,用一個邏輯空間,如何讓這6個頁面協(xié)作工作并讓CPU能找到他們呢?

這就是分頁管理機制的內(nèi)容。這6個頁面分別是:
? ?? ?PAGE_38? ?? ? = READ_ONLY? ?0x388000 TO 0x38BFFF;
? ?? ?PAGE_39? ?? ? = READ_ONLY? ?0x398000 TO 0x39BFFF;
? ?? ?PAGE_3A? ?? ? = READ_ONLY? ?0x3A8000 TO 0x3ABFFF;
? ?? ?PAGE_3B? ?? ? = READ_ONLY? ?0x3B8000 TO 0x3BBFFF;
? ?? ?PAGE_3C? ?? ? = READ_ONLY? ?0x3C8000 TO 0x3CBFFF;
? ?? ?PAGE_3D? ?? ? = READ_ONLY? ?0x3D8000 TO 0x3DBFFF;
? ?上面說的大家可以新建一個DG128工程,到PRM文件里看。
? ?再看看分頁管理機制:DG128里只有FLASH空間可以分頁,而XS128里,分頁的東西太多了。DG128里FLASH分

頁是通過PPAGE寄存器搞定的。PPAGE是5位寄存器,CPU12內(nèi)核規(guī)位每頁只能有16KB。因此DG128的FLASH尋址空

間就是2^5*16KB=512KB了。

首先問一個問題:
中斷函數(shù)為什么要加:#pragma CODE_SEG __NEAR_SEG NON_BANKED 這個聲明?這個聲明是干什么用的?
這要還是要從FLASH分頁和非分頁的區(qū)別說起。
? ??下面詳細說一說,FLASH里非分頁和分頁的使用。 要明白一點,分頁是不可見的,要用的時候PPAGE參與尋

址。
???1 FLASH里非分頁工作機制
? ?FLASH一共為128K,一頁是16K,那么應(yīng)該有8頁才是,但是實際只有6個分頁。有2個非分頁放在4000-7FFF

,和C000-FFFF兩個邏輯地址窗里。那么,當程序的尋址在64K之內(nèi)(2^16=64K,16位機的尋址能力是64K)時,

就不用分頁了,直接使用那兩個非分頁的數(shù)據(jù)。實際上,3E頁 3F頁是可見的,其實他們就是那2個非分頁的映

射。因此,使用非分頁FLASH,就不須設(shè)置PPAGE寄存器,直接使用邏輯地址即可。見圖1。
? ?這點我們可以從以下看出:

/* 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*/;
? ??
? ??很直觀地看出,把這兩個可以直接使用邏輯地址的頁面設(shè)為NON_BANKED, 那么中斷函數(shù)放在NON_BANKED里

,就可以把函數(shù)放在64K的尋址程序段中。這么一來,進中斷就方便多了,效率也高很多。這就是對本文開篇

的解釋。
???2??FLASH里分頁工作機制
? ??好了,上面是3E頁 3F頁是可見的分頁區(qū),還有3D 3C 3B 3A 39 38不可見的分頁區(qū)。當你的程序要尋址

64K以外的空間,即不是是可見的3E頁 3F頁時,就要涉及分頁了。
? ? PPAGE是MMC模塊的東西,我搞了個圖片大家看看,如圖2。每一頁在DG128中的邏輯地址都是由PPAGE中的

頁號和重疊窗口內(nèi)地址組成的24位絕對地址。通過設(shè)置寄存器PPAGE,可以使用全部的FLASH空間。例如:程序

要將數(shù)據(jù)存入$3D頁,設(shè)置PPAGE的值為$3D,那么邏輯地址范圍說是$3D8000-$3DBFFF。有一點要注意:為了分頁描述的完整性,可以如下理解:對于3E頁 3F頁有兩個邏輯地址映射到物理地址。拿3E頁來說,有$004000-$007FFF和$3E8000-$3EBFFF。
? ?對于程序是如何尋址,這個是內(nèi)核的東西,大家可以看看CPU這個文檔。
? ?通過分析,相信大家知道地址這個東西是非常有用的吧。下次說說XS128,XS128的RAM FLASH EEPROM都可

以分頁。更高級,更主動,編程彈性更大。

?

轉(zhuǎn)載于:https://www.cnblogs.com/fengliu-/p/9256853.html

總結(jié)

以上是生活随笔為你收集整理的飞思卡尔MC9S12系列单片机地址影射以及分页问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。