色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S3C2440無(wú)MMU_Init不能進(jìn)中斷的原因

          S3C2440無(wú)MMU_Init不能進(jìn)中斷的原因

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
          糾結(jié)了一個(gè)下午,總算有些頭緒了,所謂MMU(虛擬內(nèi)存管理單元),無(wú)非就是把物理地址轉(zhuǎn)換為虛擬地址。所謂物理地址,用的STM32的都知道,它的RAM是從0x20000000開(kāi)始的,ROM是從0x8000000開(kāi)始的,這就是物理地址,也就是說(shuō)在0x20000000這個(gè)地址里面放的就是一個(gè)值(當(dāng)然你放的是幾,里面存放的就是幾),你給RAM一個(gè)地址0x20000000并給了讀信號(hào),數(shù)據(jù)線上就會(huì)出現(xiàn)你放進(jìn)去的值,這就是實(shí)實(shí)在在的物理地址。而虛擬地址,就和它的位段有些相似,你訪問(wèn)的地址,并不是真正的物理介質(zhì)里面的地址。你訪問(wèn)一個(gè)地址,比如0x20,可能會(huì)被MMU映射到0x80里面去了,在開(kāi)啟MMU之后,你寫了一條指令,往0x20這個(gè)地址里面寫了一個(gè)數(shù),比如8,然后MMU就會(huì)向存儲(chǔ)器發(fā)出命令,向0x80這個(gè)物理地址寫入數(shù)據(jù)8。當(dāng)然,這些你都不知道,這是MMU私下干的。當(dāng)你要求讀這個(gè)值的時(shí)候,寫了從0x20讀指令,然后MMU就會(huì)從物理地址0x80把這個(gè)數(shù)(8)讀出來(lái),并送給你,然后你并不知道他私下已經(jīng)干了那么多事,你表面看來(lái)就是往0x20這個(gè)地址寫了一個(gè)數(shù)8,然后讀出來(lái)也是8,這就對(duì)了。
            而在2440要進(jìn)中斷的時(shí)候,它會(huì)去地址0x0找中斷向量表,然后找到是哪個(gè)中斷發(fā)生了,該跳到哪個(gè)函數(shù)里面去。如果你是在SDRAM或者NAND FLASH里面調(diào)試的話,如果沒(méi)開(kāi)MMU,那么0x0就指的物理地址,這個(gè)地址在2440內(nèi)部的4K RAM里面,而這4K的RAM里面其實(shí)并沒(méi)有放中斷向量表,而是放的bootloader,bootloader把實(shí)際的程序都搬到外部的SDRAM去了,物理地址是0x30000000。所以當(dāng)中斷發(fā)生時(shí),PC指到了0x0處,這里卻沒(méi)有中斷向量表,當(dāng)然沒(méi)法執(zhí)行。如果開(kāi)啟了MMU的話,MMU會(huì)把地址0x0(這時(shí)就是指虛擬地址)映射到物理地址0x30000000去,也就是發(fā)生中斷時(shí),PC看似跳到了地址0x0處,但因?yàn)镸MU的存在,其實(shí)是跳到了物理地址的0x30000000處,中斷向量表正在此處,所以,中斷函數(shù)就順理成章的執(zhí)行了。


          關(guān)鍵詞: S3C2440MMU_Init中

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉