共2条
1/1 1 跳转至页
向各位大侠请教几个存储器映射方面的问题!
问
请教:
问题1:
1:为什么要存储器映射控制,一般是在什么情况下发生存储器映射控制呢?
问题2
2:存储器映射控制,是不是专用中断的?
问题3:
3:书上原文:“
列如,每当产生一个软件中断请求,ARM 内核就从 0x00000008 处取出 32 位数。这就意味着:
当 MEMMAP[1:0]=10 (用户 ARM 模式)时,从 0x00000008 的读数/取指是对 0x40000008
单元进行操作。”
请教,是不是芯片规定了当发生中断时,ARM 就是从 0x00000008 处取出 32 位数?
问题4
4:书上原文“
用户程序需要随时更改异常向量表,可以将异常向量表(64字节)复制到片内 RAM 的 0x40000000 地址上,
然后设置 MEMMAP=2 进行重新映射,0x40000000 地址上的向量表就可以更改了。”
请教,为什么要将 异常向量表(64字节)复制到片内 RAM 的 0x40000000 地址上呢?
是不是因为 片内 RAM 的其始地址就是 0x40000000 啊?
还有 然后设置 MEMMAP=2 进行重新映射,0x40000000 地址上的向量表就可以更改了
各位大哥详细解释一下,好吗?
辛苦各位大侠了!谢谢!
答 1: 随便说说我觉得存储器重映射其实很简单:我们知道,复位和发生中断时,CPU是从固定地址读取复位和中断向量.
系统复位时,MCU一般是从0x0处开始指向,这样一来,在0x0处一般就只能是ROM了,以后发生中断,一般也是在这随近取指.这样一来,有时不是太灵活,比如bootloader中用到中断(这个在ARM中好像还好弄一点,在纯ROM的MCU中更麻烦),同时像ARM之类的,在ROM中执行有许多不方便的地方.
于是就有了存储器重映射的方法:就是通过程序控制,把非0x0处的存储器,映射到0x0处.这样一来,这部分存储器对于CPU而言,跟在0x0处没有分别,于是发生中断时,中断向量就从这儿取了.
至于能干什么用,就是各显神通了,比如你可以在0x0处放一个bootloader,执行完相关初始化程序后(在8位MCU中可以方便的用来进行IAP),然后重映射主程序,这样很方便的.在ARM中的话,可以先将代码copy到RAM中,重映射以后,代码全在ram中执行(发生中断后,也从RAM中取指),速度会快不少的:)
也不知道说得有没有不妥的地方,其实你问的问题我也不知道是这是指这个. 答 2: hiberhe 大哥,谢谢!hiberhe 大哥:
您好!
我要的就是您说的啊
我还是有几个地方没懂:
问题1:
您说:“ 把非0x0处的存储器,映射到0x0处”
这件工作是 芯片自己做的,还是要程序员做的啊?
如果是需要程序做的话,那要怎么写程序啊
hiberhe 大哥,举个具体的列子,好吗?
问题2:
于能干什么用,就是各显神通了,比如你可以在0x0处放一个bootloader,执行完相关初始化程序后(在8位MCU中可以方便的用来进行IAP),然后重映射主程序,这样很方便的.在ARM中的话,可以先将代码copy到RAM中,重映射以后,代码全在ram中执行(发生中断后,也从RAM中取指),速度会快不少的:)
hiberhe 大哥,重映射主程序,到底做了哪些工作呢?
还有,请大哥帮我看看:
“ 请教:各位大侠,帮我看看下面这段程序,我有几个地方不理解!”
这个帖子。
谢谢大哥!
答 3: 别称大哥啦,叫hiber就好了重映射不同的MCU不用.当然不是芯片自己做的,芯片不知道你需不需要重映射,以不知道你将哪块存储器得映射到0x0.通过在程序中设置MCU的寄存器来实现的.这个不同的MCU有不同的寄存器.看MCU的文档就知道了.我知道4510是可以重映射的(自己没实际用过,初学ARM,还是超级菜鸟),我用的44B0X不可以重映射,所以也不好给例子.
看一下CPU的文档就知道了,很简单的.也要注意重映射时对一些注意事项,这个在CPU的文档里都有的.
说白了,重映射就是要CPU将非0x0处的存储器当作0x0处来用,就这么简单,具体CPU是怎么实现的,根本不用关心.设置了重映射以后,在你的程序中,就要把那片区域当作0x0的.
要完成重映射,反正就是操作一下寄存器而已.
不知道自己有没有说清楚.
问题1:
1:为什么要存储器映射控制,一般是在什么情况下发生存储器映射控制呢?
问题2
2:存储器映射控制,是不是专用中断的?
问题3:
3:书上原文:“
列如,每当产生一个软件中断请求,ARM 内核就从 0x00000008 处取出 32 位数。这就意味着:
当 MEMMAP[1:0]=10 (用户 ARM 模式)时,从 0x00000008 的读数/取指是对 0x40000008
单元进行操作。”
请教,是不是芯片规定了当发生中断时,ARM 就是从 0x00000008 处取出 32 位数?
问题4
4:书上原文“
用户程序需要随时更改异常向量表,可以将异常向量表(64字节)复制到片内 RAM 的 0x40000000 地址上,
然后设置 MEMMAP=2 进行重新映射,0x40000000 地址上的向量表就可以更改了。”
请教,为什么要将 异常向量表(64字节)复制到片内 RAM 的 0x40000000 地址上呢?
是不是因为 片内 RAM 的其始地址就是 0x40000000 啊?
还有 然后设置 MEMMAP=2 进行重新映射,0x40000000 地址上的向量表就可以更改了
各位大哥详细解释一下,好吗?
辛苦各位大侠了!谢谢!
答 1: 随便说说我觉得存储器重映射其实很简单:我们知道,复位和发生中断时,CPU是从固定地址读取复位和中断向量.
系统复位时,MCU一般是从0x0处开始指向,这样一来,在0x0处一般就只能是ROM了,以后发生中断,一般也是在这随近取指.这样一来,有时不是太灵活,比如bootloader中用到中断(这个在ARM中好像还好弄一点,在纯ROM的MCU中更麻烦),同时像ARM之类的,在ROM中执行有许多不方便的地方.
于是就有了存储器重映射的方法:就是通过程序控制,把非0x0处的存储器,映射到0x0处.这样一来,这部分存储器对于CPU而言,跟在0x0处没有分别,于是发生中断时,中断向量就从这儿取了.
至于能干什么用,就是各显神通了,比如你可以在0x0处放一个bootloader,执行完相关初始化程序后(在8位MCU中可以方便的用来进行IAP),然后重映射主程序,这样很方便的.在ARM中的话,可以先将代码copy到RAM中,重映射以后,代码全在ram中执行(发生中断后,也从RAM中取指),速度会快不少的:)
也不知道说得有没有不妥的地方,其实你问的问题我也不知道是这是指这个. 答 2: hiberhe 大哥,谢谢!hiberhe 大哥:
您好!
我要的就是您说的啊
我还是有几个地方没懂:
问题1:
您说:“ 把非0x0处的存储器,映射到0x0处”
这件工作是 芯片自己做的,还是要程序员做的啊?
如果是需要程序做的话,那要怎么写程序啊
hiberhe 大哥,举个具体的列子,好吗?
问题2:
于能干什么用,就是各显神通了,比如你可以在0x0处放一个bootloader,执行完相关初始化程序后(在8位MCU中可以方便的用来进行IAP),然后重映射主程序,这样很方便的.在ARM中的话,可以先将代码copy到RAM中,重映射以后,代码全在ram中执行(发生中断后,也从RAM中取指),速度会快不少的:)
hiberhe 大哥,重映射主程序,到底做了哪些工作呢?
还有,请大哥帮我看看:
“ 请教:各位大侠,帮我看看下面这段程序,我有几个地方不理解!”
这个帖子。
谢谢大哥!
答 3: 别称大哥啦,叫hiber就好了重映射不同的MCU不用.当然不是芯片自己做的,芯片不知道你需不需要重映射,以不知道你将哪块存储器得映射到0x0.通过在程序中设置MCU的寄存器来实现的.这个不同的MCU有不同的寄存器.看MCU的文档就知道了.我知道4510是可以重映射的(自己没实际用过,初学ARM,还是超级菜鸟),我用的44B0X不可以重映射,所以也不好给例子.
看一下CPU的文档就知道了,很简单的.也要注意重映射时对一些注意事项,这个在CPU的文档里都有的.
说白了,重映射就是要CPU将非0x0处的存储器当作0x0处来用,就这么简单,具体CPU是怎么实现的,根本不用关心.设置了重映射以后,在你的程序中,就要把那片区域当作0x0的.
要完成重映射,反正就是操作一下寄存器而已.
不知道自己有没有说清楚.
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |