如下是ADS下的boot的MMU.c的MMU初始化代碼。在2440init.S中跳入Main,這個(gè)Main函數(shù)在U2440mom.c中實(shí)現(xiàn),這個(gè)Main函數(shù)包括了對(duì)端口,中斷服務(wù),MMU,VGA等的初始化函數(shù)的調(diào)用。MMU.c中進(jìn)行了MMU的初始化,其中調(diào)用了很多初始化函數(shù),使用匯編寫的,確切的說是用協(xié)處理指令寫的。這些函數(shù)的聲明部分在2440slib.h,實(shí)現(xiàn)在2440slib.c中。在MMU的初始化程序MMU_Init中,首先禁止了Dcache,Icache,清除了Dcache和Icache。禁止了MMU,TLB。然后對(duì)存儲(chǔ)系統(tǒng)進(jìn)行了虛擬地址到物理地址的映射。然后設(shè)置了轉(zhuǎn)化表的基地址,設(shè)置了域,開啟了MMU,Icache,Dcache。
void MMU_Init(void)
{
? ? int i,j;
? ? //========================== IMPORTANT NOTE =========================
? ? //The current stack and code area can't be re-mapped in this routine.
? ? //If you want memory map mapped freely, your own sophiscated MMU
? ? //initialization code is needed.
? ? //===================================================================
? ? MMU_DisableDCache();
? ? MMU_DisableICache();
? ? //If write-back is used,the DCache should be cleared.
? ? for(i=0;i<64;i++)
? ?? ?? ?? ?for(j=0;j<8;j++)
? ?? ?? ?? ?? ? MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
? ? MMU_InvalidateICache();
? ?
? ? #if 0
? ? //To complete MMU_Init() fast, Icache may be turned on here.
? ? MMU_EnableICache();
? ? #endif
? ?
? ? MMU_DisableMMU();
? ? MMU_InvalidateTLB();
? ? //MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr)
? ? //MMU_SetMTT(0x00000000,0x07f00000,0x00000000,RW_CNB);??//bank0
? ? if(rBWSCON&0x6)//nor啟動(dòng)
? ?? ?? ?? ?? ?? ? MMU_SetMTT(0x00000000,0x07f00000,0x00000000,RW_NCNB);? ?//bank0
? ?? ?? ???else//nand 啟動(dòng)
? ?? ?? ?? ?? ?? ? MMU_SetMTT(0x00000000,0x00001000,0/*(int)__ENTRY*/,RW_CB);? ?//bank0
? ? //MMU_SetMTT(0x04000000,0x07f00000,0,RW_NCNB);? ?? ?? ?? ?? ?? ?? ?? ???//bank0
? ? MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,RW_NCNB);??//bank1
? ? MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_NCNB); //bank2
? ? MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_NCNB); //bank3
? ? //MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_CB); //bank4
? ? MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_NCNB); //bank4 for STRATA Flash
? ? MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_NCNB); //bank5
? ? MMU_SetMTT(0x30000000,0x30100000,0x30000000,RW_CB);? ?? ?? ? //bank6-1? ?1
? ? MMU_SetMTT(0x30200000,0x33e00000,0x30200000,RW_NCNB); //bank6-2? ?? ?60
? ? //
? ? MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CB);? ?//bank6-3? ?? ???
? ? MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_NCNB); //bank7
? ?
? ? MMU_SetMTT(0x40000000,0x47f00000,0x40000000,RW_NCNB); //SFR? ?? ?? ???127
? ? MMU_SetMTT(0x48000000,0x5af00000,0x48000000,RW_NCNB); //SFR? ?? ?? ???303
? ? MMU_SetMTT(0x5b000000,0x5b000000,0x5b000000,RW_NCNB); //SFR
? ? MMU_SetMTT(0x5b100000,0xfff00000,0x5b100000,RW_FAULT);//not used
? ?
? ? MMU_SetTTBase(_MMUTT_STARTADDRESS);
? ? MMU_SetDomain(0x55555550|DOMAIN1_ATTR|DOMAIN0_ATTR);
? ?? ?? ?? ?//DOMAIN1: no_access, DOMAIN0,2"15=client(AP is checked)
? ? MMU_SetProcessId(0x0);
? ? MMU_EnableAlignFault();
? ?? ?? ?? ?
? ? MMU_EnableMMU();
? ? MMU_EnableICache();
? ? MMU_EnableDCache(); //DCache should be turned on after MMU is turned on.
}? ?
for(i=0;i<64;i++)
? ?? ?? ?? ?for(j=0;j<8;j++)
? ?? ?? ?? ?? ? MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
? ? MMU_InvalidateICache();
這里是因?yàn)?a target="_blank">ARM920T有64路,每路有8個(gè)組。所以。。。為什么要i<<26,j<<5呢,看下圖便知
這是一個(gè)MMU的虛擬地址向物理地址映射的函數(shù)。通過上邊的調(diào)用可以看到物理地址和虛擬地址的地址是相同的,那為什么還要開MMU呢,不是多此一舉嗎,Dcache的開啟必須在MMU開啟后才能開啟,Icache不受MMU影響。開啟Cache對(duì)系統(tǒng)性能會(huì)有很大提升。所以,哈哈。這里_MMUTT_STARTADDRESS是轉(zhuǎn)換表的基址,因?yàn)闆]有使用復(fù)雜的操作系統(tǒng),所以只使用了一級(jí)頁表,每個(gè)頁表項(xiàng)對(duì)應(yīng)的是一個(gè)1MB的段。pTT=(U32 *)_MMUTT_STARTADDRESS+(vaddrStart>>20);相當(dāng)于獲得相應(yīng)的頁表項(xiàng)。看一下下圖就會(huì)明白。nSec=(vaddrEnd>>20)-(vaddrStart>>20);這句是計(jì)算有幾個(gè)段。for(i=0;i<=nSec;i++)*pTT++=attr |(((paddrStart>>20)+i)<<20);分別映射每段。Attr是域。
void MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr)
{
? ? volatile U32 *pTT;
? ? volatile int i,nSec;
? ? pTT=(U32 *)_MMUTT_STARTADDRESS+(vaddrStart>>20);
? ? nSec=(vaddrEnd>>20)-(vaddrStart>>20);
? ? for(i=0;i<=nSec;i++)*pTT++=attr |(((paddrStart>>20)+i)<<20);
}
這里就不列出那些被調(diào)用的匯編代碼,這個(gè)是飛凌的boot,網(wǎng)上好多人說沒開MMU,真是誤人子弟啊。
ADS下bootloader之MMU研究
- ADS1220(125084)
- bootloader(45027)
- MMU(17888)
相關(guān)推薦
對(duì)于系統(tǒng)啟動(dòng),bootloader的功能的簡單分析
(因?yàn)闆]有去映射,直接輸出到地址線上了),mmu可以當(dāng)坐中間的翻譯,系統(tǒng)上電后,cpu自然要從某一處讀指令,那么我們要做的就是把初始化系統(tǒng)的代碼(請(qǐng)?jiān)试S我叫他bootloader)放在那,
2018-02-05 10:23:2310530
什么是Bootloader 淺談STM32中bootloader的內(nèi)存分配
1. 什么是Bootloader Bootloader是硬件啟動(dòng)的引導(dǎo)程序,是運(yùn)行操作系統(tǒng)的前提。在操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前運(yùn)行的一段小代碼。對(duì)硬件進(jìn)行相應(yīng)的初始化和設(shè)定,最終為操作系統(tǒng)
2021-02-15 06:10:0015652
為什么沒有MMU就無法運(yùn)行Linux系統(tǒng)呢?
MMU(Memory Management Unit,內(nèi)存管理單元)是一種硬件模塊,用于在CPU和內(nèi)存之間實(shí)現(xiàn)虛擬內(nèi)存管理。
2023-08-03 10:05:00473
Bootloader驅(qū)動(dòng)相關(guān)代碼
S32K144提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動(dòng)添加例如:第一章 Python 機(jī)器學(xué)習(xí)入門之pandas的使用提示:寫完文章后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助
2021-08-17 06:17:02
MMU的TabIndex的問題
*(pTtb + (va >> 20)) = (pa & 0xfff00000) | MMU_SECDESC_WB;為什么是右移20位而不是va >> 20 >
2019-06-25 05:23:33
MMU的產(chǎn)生及MMU工作過程詳解
MMU的調(diào)度下是如何進(jìn)行映射的: 在這個(gè)例子中我們有一臺(tái)可以生成16位地址的機(jī)器,它的虛擬地址范圍從0x0000~0xFFFF(64K),而這臺(tái)機(jī)器只有32K的物理地址,因此他可以運(yùn)行64K的程序,但
2018-07-03 08:19:31
研究下stm32基于BootLoader的IAP功能
近期想研究下stm32基于BootLoader的IAP功能,要想實(shí)現(xiàn)這個(gè),必須先搞明白程序跳轉(zhuǎn),在真正開搞前折騰了半晚上,完成了程序跳轉(zhuǎn)的簡單測(cè)試。stm32代碼下載到0x8000000開始的地址
2021-12-21 06:44:10
ARM 集成開發(fā)環(huán)境ADS是安裝在什么環(huán)境下?
ARM 集成開發(fā)環(huán)境ADS是安裝在什么環(huán)境下? windows下還是linux 下?
2014-04-30 20:07:01
AVR之BOOTLOADER技術(shù)詳解
本帖最后由 一只耳朵怪 于 2018-6-26 10:42 編輯
AVR之BOOTLOADER技術(shù)詳解 ATmega128具備引導(dǎo)加載支持的用戶程序自編程功能(In-System
2018-06-26 06:22:07
AVR和STM32的bootloader機(jī)制記錄和講解
基于STM32F10X系列通用OTA bootloader原理、移植與使用全指南 寫在前面這幾天我都做了什么呢?有什么感受?寫在前面從2020.1.26到2020.1.30這5天,我的較多研究精力
2021-12-09 07:37:23
STM32F407的系統(tǒng)bootloader之串口IAP固件升級(jí)
STM32F407的系統(tǒng)bootloader之串口IAP固件升級(jí),STM32F407的系統(tǒng)bootloader之串口IAP固件升級(jí)本章節(jié)為大家講解使用系統(tǒng)bootloader做程序升級(jí)的方法,即使
2021-08-10 07:26:18
STM32H7的系統(tǒng)bootloader之串口IAP固件升級(jí)
第69章 STM32H7的系統(tǒng)bootloader之串口IAP固件升級(jí)本章節(jié)為大家講解使用系統(tǒng)bootloader做程序升級(jí)的方法,即使不依賴外部boot引腳也可以方便升級(jí)。IAP的全稱是In Application Programming...
2021-08-20 06:04:02
arm_mmu詳細(xì)圖解
arm_mmu詳細(xì)圖解arm_mmu詳細(xì)圖解arm_mmu詳細(xì)圖解arm_mmu詳細(xì)圖解arm_mmu詳細(xì)圖解arm_mmu詳細(xì)圖解arm_mmu詳細(xì)圖解arm_mmu詳細(xì)圖解arm_mmu詳細(xì)圖解
2009-11-21 23:58:12
linux 下 SD卡燒寫bootloader不成功
linux 下 SD卡燒寫bootloader不成功,出現(xiàn):the bootloader size is not 264K提示卡是新買的4G卡
2013-09-26 16:32:46
vivi-bootloader
新人,正在學(xué)習(xí)arm9.裸板硬件基本都學(xué)的差不多了,正在接觸軟件,看視頻第一個(gè)就是vivi-bootloader。現(xiàn)有幾個(gè)疑問想請(qǐng)教:1.vivi程序重要嗎?如果想研究底層,需要對(duì)源碼進(jìn)行分析
2014-02-22 09:24:33
【OK210試用體驗(yàn)】簡易Bootloader的實(shí)現(xiàn)
。us5pv210.icf,IAR下鏈接文件,指定板載內(nèi)存范圍,代碼以及RAM等布局。這里筆者說明一下,在建立c運(yùn)行環(huán)境之前的Bootloader代碼均是地址無關(guān)的,CPU上電后會(huì)加載部分的Bootloader代碼到內(nèi)部
2015-07-26 12:01:24
為什么mmu代碼改成在ADS環(huán)境下編譯并下載到nandFLASH中一直出不來效果?
我把書中光盤里hardware目錄中的mmu代碼改成在ADS環(huán)境下編譯并下載到nandFLASH中一直出不來效果,現(xiàn)在有兩個(gè)疑問!請(qǐng)大家伙幫個(gè)忙哈!感激涕零哈(1)編譯led.c的時(shí)候:總是在
2019-07-11 05:45:22
使用MMU進(jìn)行多用戶場(chǎng)景下的FLASH分區(qū)保護(hù)
或修改其它用戶區(qū)的FLASH內(nèi)容。我們可以使用國民技術(shù)MCU內(nèi)置的MMU,將FLASH主存儲(chǔ)區(qū)的區(qū)域進(jìn)行劃分和設(shè)置訪問權(quán)限,同時(shí)可保護(hù)各個(gè)應(yīng)用存儲(chǔ)區(qū)域內(nèi)的代碼與數(shù)據(jù)不被非法訪問及篡改,并指示出存儲(chǔ)器
2022-11-02 06:45:02
使用系統(tǒng)bootloader做程序升級(jí)的方法
第29章 STM32F407的系統(tǒng)bootloader之USB DFU方式固件升級(jí)本章節(jié)為大家講解使用系統(tǒng)bootloader做程序升級(jí)的方法,即使不依賴外部boot引腳也可以方便升級(jí)。DFU的全稱
2021-08-10 06:31:55
使用系統(tǒng)bootloader做程序升級(jí)的方法
第29章 STM32F429的系統(tǒng)bootloader之USB DFU方式固件升級(jí)本章節(jié)為大家講解使用系統(tǒng)bootloader做程序升級(jí)的方法,即使不依賴外部boot引腳也可以方便升級(jí)。DFU的全稱
2021-08-10 08:15:24
使用系統(tǒng)bootloader做程序升級(jí)的方法
第30章 STM32F429的系統(tǒng)bootloader之串口IAP固件升級(jí)本章節(jié)為大家講解使用系統(tǒng)bootloader做程序升級(jí)的方法,即使不依賴外部boot引腳也可以方便升級(jí)。IAP的全稱
2021-08-10 06:29:51
使用系統(tǒng)bootloader做程序升級(jí)的方法
第68章 STM32H7的系統(tǒng)bootloader之USB DFU方式固件升級(jí)本章節(jié)為大家講解使用系統(tǒng)bootloader做程序升級(jí)的方法,即使不依賴外部boot引腳也可以方便升級(jí)。DFU的全稱是Device Firmware Upgrad...
2021-08-20 06:32:39
關(guān)于頁表和MMU的問題
剛開始學(xué),好多東西都云里霧里的TT為什么在bootloader里要進(jìn)行頁表初始化然后開啟MMU,然后在進(jìn)入內(nèi)核后還要?jiǎng)?chuàng)建頁表開啟MMU?這兩個(gè)有什么不一樣么?s3c2410,bootloader用的是vivi-0.1.4,kernel是linux-2.6.14望賜教。
2013-05-06 17:25:50
如何配置MMU page table walk的訪問屬性
的頁表項(xiàng)可以在cache中緩存如何配置MMU page table walk的訪問屬性如果需要在MMU enable的情況下,運(yùn)行時(shí)修改頁表項(xiàng)。如上所述,因?yàn)?b class="flag-6" style="color: red">MMU page table walk
2022-10-24 15:45:24
嵌入式Linux中的bootloader
一、bootloader: 它就是一個(gè)稍微復(fù)雜的裸板程序。但是要把這裸板程序看懂寫好一點(diǎn)都不容易。Windows下好用的工具弱化了我們的編程能力。很多人一玩嵌入式就用ADS、KEIL。你能回答這幾
2017-11-10 21:29:08
嵌入式中ARM的MMU和Cache機(jī)制
)集成了MMU是其最大的賣點(diǎn);有了MMU,高級(jí)的操作系統(tǒng)(虛擬地址空間,平面地址,進(jìn)程保護(hù)等)才得以實(shí)現(xiàn)。二者都挺復(fù)雜,并且在920T中又高度耦合,相互配合操作,所以需要結(jié)合起來研究。同時(shí),二者的操作
2017-08-19 22:42:08
有哪位大俠用過TI公司的ADS1232或ADS1230沒
新手做一個(gè)實(shí)驗(yàn)板,用TI公司的ADS1232采集信號(hào)進(jìn)入ATMEG32顯示,研究了一段時(shí)間,對(duì)程序還是無從下手,也沒法驗(yàn)證硬件是否有無問題,有做過的大俠麻煩提供個(gè)簡單例程,指導(dǎo)下,先謝過
2013-04-01 15:28:17
有對(duì)MMU比較了解的嗎?
我最近在寫一個(gè)MMU的裸機(jī)程序,但是無論怎么映射都不行,一旦開啟MMU,程序就會(huì)卡住。我想問的是寫MMU的程序?qū)︽溄幽_本和程序本身有什么特別的要求嗎?我的映射代碼如下(0~0x60000000全部
2014-01-10 21:43:32
有沒有方法單獨(dú)測(cè)試ARM920T的MMU和Cache?
ARM9的MMU和Cache運(yùn)作機(jī)理,翻閱了不少資料,也理解了一點(diǎn)原理,沒看到這方面的單獨(dú)測(cè)試方法,也沒有真正明白其原理,大部分說操作系統(tǒng)使用這功能,一直苦于沒法研究最底層運(yùn)作.不用操作系統(tǒng)就沒法
2008-07-14 14:11:03
求分享CH573F bootloader引導(dǎo)用戶app的例程
最近在學(xué)習(xí)研究BootLoader+APP燒入單片機(jī),想的是BootLoader存入地址0x00000000,APP程序地址為0x00004000,由BootLoader跳轉(zhuǎn)至地址
2022-08-24 06:56:56
淺析ARMv7-A體系架構(gòu)下的MMU的基本原理
。MMU 主要功能之一是虛擬地址到物理地址的轉(zhuǎn)換,這個(gè)需要軟件和硬件配合完成,軟件需要針對(duì)不同的硬件進(jìn)行策略。這里主要分析 ARMv7-A 體系架構(gòu)下的 MMU 的基本原理。VMSA 是針對(duì)
2022-05-24 16:54:31
請(qǐng)問誰有關(guān)于ADS1299壽命問題的相關(guān)測(cè)試研究及報(bào)告?
請(qǐng)問, 關(guān)于ADS1299的壽命,官方是否有相關(guān)測(cè)試研究及報(bào)告?能否發(fā)給一份?謝謝! e-mail:xiaochow650@qq.com
2019-06-20 12:17:45
非常不錯(cuò)的資料分享之 LLC諧振變換器研究與設(shè)計(jì)
非常不錯(cuò)的資料分享之 LLC諧振變換器研究與設(shè)計(jì)資料來自網(wǎng)絡(luò)資源分享
2021-04-15 22:50:59
基于ARM核的Bootloader代碼的分析與設(shè)計(jì)
Bootloader 是系統(tǒng)上電或復(fù)位后首先運(yùn)行的一段代碼,Bootloader 代碼(即啟動(dòng)代碼)的好壞對(duì)整個(gè)系統(tǒng)的運(yùn)行效率有著重要的影響, 而Bootloader 代碼與芯片的特性有著緊密的聯(lián)系。本
2009-08-15 09:45:3147
ADS5481/ADS5482ADS5483,pdf (16
The ADS5481/ADS5482/ADS5483 (ADS548x) is a 16-bit family of analog-to-digital converters (ADCs
2010-06-03 16:01:5719
ADS1146/ADS1147/ADS1148,pdf (1
The ADS1146, ADS1147, and ADS1148 are highly-integrated, precision, 16-bit analog-to-digital
2010-06-03 17:04:5459
ADS1113/ADS1114/ADS1115,pdf (U
The ADS1113, ADS1114, and ADS1115 are precision analog-to-digital converters (ADCs) with 16 bits
2010-06-03 17:10:2278
ADS6145/ADS6144/ADS6143/ADS614
ADS6145/ADS6144/ADS6143/ADS6142 (ADS614X) are a family of 14-bit A/D converters with sampling
2010-06-04 10:29:1920
ADS5525IRGZT:高性能模數(shù)轉(zhuǎn)換器的技術(shù)之巔
ADS5525IRGZT:高性能模數(shù)轉(zhuǎn)換器的技術(shù)之巔在數(shù)字信號(hào)處理的世界中,模數(shù)轉(zhuǎn)換器(ADC)扮演著至關(guān)重要的角色。它們是將連續(xù)的模擬信號(hào)轉(zhuǎn)換為離散的數(shù)字信號(hào)的關(guān)鍵組件。而ADS
2024-01-14 21:52:30
S3C2410內(nèi)存管理單元MMU基礎(chǔ)實(shí)驗(yàn)
(11)實(shí)驗(yàn)十一:MMU 在理論上概括或解釋MMU,這不是我能勝任的。我僅基于為了理解本實(shí)驗(yàn)中操作MMU的代碼而對(duì)MMU做些說明,現(xiàn)在先簡單地描述虛擬地址(VA)、變換后的虛擬地址(MVA)、物理地址(PA) 之間的關(guān)系: 啟動(dòng)MMU后,S3C2410的CPU核看到的、用到的只是虛擬
2009-01-01 02:29:4217
BootLoader_BootLoader是什么
ARM實(shí)現(xiàn)手指靜脈識(shí)別系統(tǒng)_本文將從 BootLoader的概念、BootLoader 的框架結(jié)構(gòu)與安裝等四個(gè)方面來討論。
2011-11-30 10:32:312979
ARM的Bootloader啟動(dòng)流程研究
講述了基于ARM 處理器的嵌入式系統(tǒng)在上電啟動(dòng)后應(yīng)用程序或操作系統(tǒng)運(yùn)行前,對(duì)處理器及其內(nèi)部功能模塊進(jìn)行初始化的過程,并結(jié)合經(jīng)過實(shí)際驗(yàn)證的代碼詳細(xì)的分析了S3C44B0 Bootloader 的
2012-02-03 14:48:0570
解鎖BootLoader
BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。本內(nèi)容介紹了BootLoader是什么及解鎖Bootloader
2012-05-30 17:00:543504
Host端MSD類的Bootloader程序
研究了一下AN4368,該AplplicationNote講述了如何基于飛思卡爾支持USB功能的Coldfire和Kinetis芯片如何開發(fā)一個(gè)Host端MSD類的Bootloader程序,以及如何修改應(yīng)用程序配置。通俗來講就是完成了通過U盤更新芯片程序代碼。
2017-09-15 17:50:0810
ARM存儲(chǔ)管理單元MMU詳解
15.5 存儲(chǔ)管理單元MMU 在創(chuàng)建多任務(wù)嵌入式系統(tǒng)時(shí),最好有一個(gè)簡單的方式來編寫、裝載及運(yùn)行各自獨(dú)立的任務(wù)。目前大多數(shù)的嵌入式系統(tǒng)不再使用自己定制的控制系統(tǒng),而使用操作系統(tǒng)來簡化這個(gè)過程。較高
2017-10-17 16:24:114
bootloader如何更新
BootLoader就是單片機(jī)啟動(dòng)時(shí)候運(yùn)行的一段小程序,這段程序負(fù)責(zé)單片機(jī)固件的更新,也就是單片機(jī)選擇性的自己給自己下程序。可以更新,也可以不更新,更新的話,BootLoader更新完程序后,跳轉(zhuǎn)到新程序運(yùn)行;不更新的話,BootLoader直接跳轉(zhuǎn)到原來的程序去運(yùn)行。
2017-11-10 08:22:537257
對(duì)MMU和頁表工作機(jī)制的簡單評(píng)析
對(duì)于一個(gè)有MMU的CPU而言,MMU開啟后,CPU是這樣尋址的:CPU任何時(shí)候,一切時(shí)候,發(fā)出的地址都是虛擬地址,這個(gè)虛擬地址發(fā)給MMU后,MMU通過頁表來在頁表里面查出來這個(gè)虛擬地址對(duì)應(yīng)的物理地址是什么,從而去訪問外面的內(nèi)存條。MMU里面的頁表地址寄存器,記錄了頁表本身的存放位置。
2018-02-02 14:08:5710515
Bootloader中LCD硬件初始化和軟件驅(qū)動(dòng)程序設(shè)計(jì)
,并不違背這一目標(biāo)。本文通過對(duì)Bootloader的原理分析和嵌入式芯片C6310中LCD控制器的研究,設(shè)計(jì)了Bootloader中LCD硬件初始化和軟件驅(qū)動(dòng)程序。該設(shè)計(jì)完善了Bootloader的擴(kuò)展功能,加快了手機(jī)動(dòng)畫的實(shí)現(xiàn),改善了客戶的使用體驗(yàn)。
2018-03-07 14:05:068517
AVR的bootloader的設(shè)置步驟教程及注意事項(xiàng)
熔絲位的燒寫:BOOTRST要進(jìn)行編程,這樣單片機(jī)在復(fù)位后自動(dòng)跳轉(zhuǎn)到bootloader區(qū)執(zhí)行bootloader的代碼,然后要根據(jù)自己bootloader的大小設(shè)置boot區(qū)的的熔絲位。
2018-05-20 09:46:006344
ADS快速入門:關(guān)于ADS的環(huán)境介紹
ADS快速入門(ADS Overview)--環(huán)境介紹(Environment)---ADS簡介
2018-07-06 01:19:007414
Bootloader是什么Bootloader的介紹和過程詳細(xì)解
本文檔的主要內(nèi)容詳細(xì)介紹的是Bootloader是什么Bootloader的介紹和過程詳細(xì)解主要內(nèi)容包括了: 1. Bootloader簡介2.幾種發(fā)布的Bootloader
2018-12-11 17:33:2044
Bootloader的詳細(xì)資料分析免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是Bootloader的詳細(xì)資料分析免費(fèi)下載。主要內(nèi)容包括了:熟悉BootLoader的實(shí)現(xiàn)原理,認(rèn)識(shí)Bootloader的主要任務(wù),熟悉BootLoader的結(jié)構(gòu)框架,I U-boot使用
2018-12-13 17:08:3942
STM32系統(tǒng)bootloader的應(yīng)用有哪些
嵌入式開發(fā)中,經(jīng)常需要bootloader進(jìn)行程序固件升級(jí)和系統(tǒng)維護(hù),所以bootloader是必不可少的功能。STM32系統(tǒng)自帶的系統(tǒng)bootloader很方便使用。大量減少了工程師開發(fā)bootloader的工作。
2020-10-22 12:19:454861
如何編寫ARM處理器的Bootloader
作者 | strongerHuang 微信公眾號(hào) | strongerHuang 之前從應(yīng)用的角度給大家分享過Bootloader相關(guān)的文章,今天從底層原理來給大家描述ARM處理器如何編寫
2020-10-27 11:02:363827
MMU的工作原理梳理
本文從內(nèi)存管理的發(fā)展歷程角度層層遞進(jìn),介紹 MMU 的誕生背景,工作機(jī)制。而忽略了具體處理器的具體實(shí)現(xiàn)細(xì)節(jié),將 MMU 的工作原理從概念上比較清晰的梳理了一遍。 MMU 誕生之前:在傳統(tǒng)的批處理
2020-12-17 16:13:5612456
MPU和MMU、MPU和MCU的區(qū)別
一、MMU vs MPU內(nèi)存是現(xiàn)代計(jì)算機(jī)最重要的組件之一。因此,它的內(nèi)容不能被任何錯(cuò)誤的應(yīng)用所篡改。這個(gè)功能可以通過MMU(Memory Management Unit)或者M(jìn)PU(Memory
2021-10-26 16:36:234
【MCU】BootLoader的簡單介紹
一、pandas是什么?在嵌入式操作系統(tǒng)中,BootLoader是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行,用來初始化硬件設(shè)備,建立內(nèi)存空間映射圖,以便為操作系統(tǒng)的啟動(dòng)做準(zhǔn)備。在嵌入式系統(tǒng)中,通常沒有想BIOS
2021-10-27 19:21:0148
MCU Bootloader總結(jié)
Bootloader本文只探討MCU(單片機(jī))下的Bootloader,對(duì)ARM系列暫不做探討。(1)bootloader是弄啥的?(2)為什么要引入bootloader(也就是加入bootloader之后起什么作用)?(3)bootloader怎么根據(jù)自己的需求去設(shè)計(jì)流程?...
2021-11-05 15:51:0332
STM32系統(tǒng)bootloader應(yīng)用
嵌入式開發(fā)中,經(jīng)常需要bootloader進(jìn)行程序固件升級(jí)和系統(tǒng)維護(hù),所以bootloader是必不可少的功能。STM32系統(tǒng)自帶的系統(tǒng)bootloader很方便使用。大量減少了工程師開...
2021-11-26 13:36:0416
STM32單片機(jī)bootloader掃盲
STM32單片機(jī)BootLoader掃盲BootLoader和APP之間的關(guān)系A(chǔ)PP就是平時(shí)寫的單片機(jī)上的應(yīng)用程序,而BootLoader本質(zhì)上和APP一樣,也是平時(shí)寫的應(yīng)用程序
2021-11-26 18:21:0476
stm32 復(fù)位到內(nèi)部bootloader
sm32的bootloader一般是通過開機(jī)時(shí)設(shè)置boot0=1來實(shí)現(xiàn)的。下面是通過程序來實(shí)現(xiàn):原來的startup文件是直接把flash的數(shù)據(jù)加載到ram里面然后跑main函數(shù)循環(huán)
2022-01-17 12:44:544
詳解MMU相關(guān)概念及工作原理
提到MMU就要提到一個(gè)概念,虛擬地址(Virtual Address)。前面的文章中反復(fù)提到過虛擬地址的概念。
2022-04-22 09:20:256051
為什么要用MMU?為什么要用虛擬地址?
既然MMU開啟后,硬件會(huì)自動(dòng)的將虛擬地址轉(zhuǎn)換成物理地址,那么還需要我們軟件做什么事情呢?即創(chuàng)建一個(gè)頁表翻譯都需要做哪些事情呢?或者說啟用一個(gè)MMU需要軟件做什么事情呢?
2022-04-26 14:37:313688
仔細(xì)研究歐盟 ADS 立法草案中的合規(guī)評(píng)估
歐盟 (EU) 于 2022 年 4 月初發(fā)布了針對(duì)配備自動(dòng)駕駛系統(tǒng) (ADS) 的車輛的立法草案。本專欄的重點(diǎn)是概述 ADS 合規(guī)性評(píng)估。 歐盟 ADS 立法草案有兩個(gè)主要部分:ADS 性能要求
2022-07-14 15:54:40894
一文解讀內(nèi)存管理單元 (MMU)
一般MMU會(huì)有一種disable的模式,即不使能MMU,所有虛擬地址都直接映射到相應(yīng)的物理地址,VA=PA。
2022-07-28 18:09:423821
RTOS多線程必須要MMU才行?
前兩天看到有人說:計(jì)算機(jī)的多線程,必須要有MMU才行,否則系統(tǒng)不能正常運(yùn)行。 MMU:Memory Management Unit,即內(nèi)存管理單元,它是一個(gè)“好東西”,在大型的操作系統(tǒng)中,起到了關(guān)鍵
2022-10-11 18:56:281767
為什么沒有MMU就無法運(yùn)行Linux系統(tǒng)
MMU(Memory Management Unit,內(nèi)存管理單元)是一種硬件模塊,用于在CPU和內(nèi)存之間實(shí)現(xiàn)虛擬內(nèi)存管理。
2023-04-23 10:48:05521
單片機(jī)BootLoader與APP如何合并
嵌入式固件一般分為BootLoader和App,BootLoader用于啟動(dòng)校驗(yàn)、App升級(jí)、App版本回滾等功能,BootLoader在cpu上電第一階段中運(yùn)行,之后跳轉(zhuǎn)至App地址執(zhí)行應(yīng)用程序。
2023-07-25 11:29:38899
ARM處理器如何編寫Bootloader
前面給大家分享過Bootloader從應(yīng)用角度執(zhí)行的相關(guān)文章,今天從底層原理來給大家描述ARM處理器如何編寫Bootloader,以及底層流程。
2023-07-26 09:10:47538
MMU內(nèi)存管理單元的工作原理和作用
MMU(Memory Management Unit,內(nèi)存管理單元)是一種硬件模塊,用于在CPU和內(nèi)存之間實(shí)現(xiàn)虛擬內(nèi)存管理。
2023-08-03 10:03:421094
什么是MMU?linux為什么需要MMU?
在內(nèi)存管理方面,MMU可以通過頁面表(Page Table)實(shí)現(xiàn)虛擬內(nèi)存管理。頁面表是一種數(shù)據(jù)結(jié)構(gòu),記錄了每個(gè)虛擬頁面和其對(duì)應(yīng)的物理頁面之間的映射關(guān)系。
2023-10-09 11:27:33419
嵌入式Linux運(yùn)行一定需要MMU嗎?為什么需要MMU?
嵌入式Linux運(yùn)行一定需要MMU嗎?為什么需要MMU?? 嵌入式Linux運(yùn)行需要MMU,這是因?yàn)?b class="flag-6" style="color: red">MMU是嵌入式系統(tǒng)中最重要的子系統(tǒng)之一,它扮演著以硬件的方式隔離不同應(yīng)用程序,為操作系統(tǒng)提供
2023-10-29 16:28:35409
MMU原理:CPU是如何訪問到內(nèi)存的?
當(dāng)CPU訪問虛擬地址0的時(shí)候,MMU會(huì)去查上面頁表的第0行,發(fā)現(xiàn)第0行沒有命中,于是無論以何種形式(R讀,W寫,X執(zhí)行)訪問,MMU都會(huì)給CPU發(fā)出page fault,CPU自動(dòng)跳到fault的代碼去處理fault。
2023-11-09 12:30:04259
MMU內(nèi)存管理單元的宏觀理解
最近一直在學(xué)習(xí)內(nèi)存管理,也知道MMU是管理內(nèi)存的映射的邏輯IP,還知道里面有個(gè)TLB。 今天剛剛好看到了幾篇前輩的文章,很是不錯(cuò),于是這里來一起學(xué)習(xí)一下吧。 PART 一:MMU 架構(gòu)篇 MMU
2023-11-26 15:21:34200
MMU包含兩個(gè)模塊是什么
后的物理地址也有兩部分:PFN和offset,PFN( Physical frame number)是物理頁框number,offset和上面虛擬地址的offset相同,是頁內(nèi)偏移。 2-MMU包含兩個(gè)
2023-11-26 15:40:58260
MMU中的頁命中、缺頁介紹
頁命中、缺頁 (1)頁命中 ? a) 處理器要對(duì)虛擬地址VA進(jìn)行訪問。 ? b) MMU的TLB沒有命中,通過TWU遍歷主存頁表中的PTEA(PTE地址)。 ? c) 主存向MMU返回PTE
2023-11-26 16:19:27364
ADS應(yīng)用技巧—如何修改ADS的home目錄?
這里說的home目錄就是啟動(dòng)ADS后,默認(rèn)打開的路徑,通常是你存放ADS工程所在的目錄。
2024-02-26 09:43:48176
評(píng)論
查看更多