|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
MCU也玩虛擬內(nèi)存 |
| 作者:qjhu0433 欄目:嵌入式系統(tǒng) |
一片微控制器上RAM只有2K,但是我寫的東西用了2K+10bytes的RAM,我在想通用操作系統(tǒng)上經(jīng)常提到什么虛擬內(nèi)存,為什么我不能在微控制器上模擬一個,現(xiàn)在我不考慮系統(tǒng)運行效率,只關(guān)心能否實現(xiàn)?但我想了好久也沒有一點眉目,但我不死心,提出來,大伙一起想,看看有什么好注意,有誰了解通用操作系統(tǒng)的虛擬內(nèi)存是如何實現(xiàn)的,現(xiàn)在我想用片內(nèi)EEPROM模擬RAM. 假設(shè)系統(tǒng)有2048Bytes RAM,有10Bytes EEPROM如何把10Bytes EEPROM的地址空間映射到RAM地址空間的2049~2058呢. 假設(shè)我定義一字符指針CHAR* p = (CHAR*)2049; 那么我用CHAR first_EEPROM_data = *p;正常訪問數(shù)據(jù)EEPROM第一個字節(jié)數(shù)據(jù). 請問如何實現(xiàn). |
| 2樓: | >>參與討論 |
| 作者: caluova 于 2006/4/19 12:46:00 發(fā)布:
RE 要玩虛擬內(nèi)存,必要條件是處理器要有MMU單元,虛擬地址——》物理地址的轉(zhuǎn)換是由MMU單元進(jìn)行查表操作(地址映射表)來完成的,這個過程對于程序員來說是幾乎透明的, 若你沒有MMU單元,你發(fā)出的任何地址否則的話,處理器將按實地址進(jìn)行操作,不可能有任何轉(zhuǎn)換,除非你改寫編譯器,在編譯期間將地址轉(zhuǎn)換掉。 另外最好有cache,不然的話頻繁的查表操作將非常消耗處理器的資源。 參看你的需求,其實并不需要虛擬內(nèi)存支持,虛擬內(nèi)存是正對整個操作系統(tǒng)而言,不管任何地址,都會進(jìn)行轉(zhuǎn)換,而你這里只是需要映射數(shù)據(jù)區(qū)的一部分?jǐn)?shù)據(jù),和和虛擬內(nèi)存不能相提并論。要實現(xiàn)EEPROM到RAM的映射,要看你用的是什么處理器,若是51,可以通過動態(tài)改寫指令來完成:即當(dāng)訪問超出了2K內(nèi)存實,動態(tài)改寫掉指令機器碼,將MOV或MOVX改寫為MOVC即可。使用完再改回來。 |
|
| 3樓: | >>參與討論 |
| 作者: qjhu0433 于 2006/4/19 13:20:00 發(fā)布:
謝謝拉! |
|
| 4樓: | >>參與討論 |
| 作者: shenlan51 于 2006/5/3 21:58:00 發(fā)布:
謝謝caluova |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |