0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是双内存映射?能解决什么问题?

麦克泰技术 来源:麦克泰技术 2023-12-01 11:06 次阅读

J-Link调试器支持将程序下载到RAM或Flash中,并通过设置无限断点、查看内存寄存器等方式实现在线调试。如果没有这种调试能力,我们需要反复试错。

当调试过程停止,没有办法继续时,系统被“锁定”或“调试挂起”。引起异常的一种情况是程序或调试器在外部RAM控制器配置之前访问了外部内存。

为了解决该问题,J-Link增加了新功能-双内存映射。

01什么是双内存映射?能解决什么问题?

应用程序从main()开始,main()之前的启动过程,我们通常默认其正常工作。因此,在main()之前出现的问题,特别是锁定调试逻辑并阻止进一步调试,是一个大问题。其中一个问题是在外部RAM控制器配置之前访问外部内存。

使用J-Link的双内存映射,一个内存映射用于处理启动阶段的内存访问,第二个内存映射在初始化完成后使用。第一个内存映射阻止对外部内存的访问,第二个内存映射允许全内存访问,消除了在配置完成之前访问外部内存的可能性和问题。

02问题发现

在更新一些代码时,我们注意到一些用户界面代码中的错误,重写了它,并像往常一样下载到目标中。在重置应用程序时,我们得到了目标连接丢失的消息。我们检查了所有的物理连接,然后再试一次……

5a1d05d0-8ff6-11ee-939d-92fbcf53809c.png

…但它又失败了。

对目标重新上电,再次下载应用程序,但结果相同。

03罪魁祸首

通过J-Link日志文件:

JLINK_ReadMem(0x0033D4C0, 0x340 Bytes,…)

CPU_ReadMem(832字节@ 0x0033D4C0)

failed

- 40.959ms returns 1

Embedded Studio告诉J-Link从目标的地址0x0033D4C0读取832字节,在XC7Z010平台上该地址位于外部DDR RAM中的内存。DDR RAM在访问之前必须被初始化。而Embedded Studio在启动目标应用程序之后让J-Link立即读取内存,该操作在DDR RAM初始化之前。

我们没有添加任何会影响DDR RAM初始化的代码。为什么这一切突然发生了呢?

一个打开的内存窗口,显示了外部DDRRAM中的数组“aMyArrInExtDDRRAM”内容。

5a2f3566-8ff6-11ee-939d-92fbcf53809c.png

我们没有考虑到打开的内存窗口是问题所在,内存窗口仅在调试会话期间可见,增加了这种情况的隐蔽性,

调试会话开始时不打开内存窗口并不是一个解决办法。例如,第三方调试器可能默认打开内存窗口,或者不允许用户关闭它等。同样的,使用单内存映射解决方案,通过J-Link脚本文件指定某些区域为非法区域,在这种情况下也不起作用。

04解放方案

使用两个内存映射:一个用于处理启动完成之前的内存访问,另一个用于处理启动完成之后的内存访问。用户可以向每个映射中添加自定义区域。

第一个内存映射的访问限制就像一个安全模式。一旦应用安全通过了这个阶段,就会动态切换到第二个内存映射。

05易于实现

使用J-Link Control Panel,现在可以很容易地将“excluded”区域添加到第一个内存映射中,J-Link在目标应用程序启动完成之前使用该映射。

5a44859c-8ff6-11ee-939d-92fbcf53809c.png

单击“Add region…”将弹出如下对话框:

5a57ffb4-8ff6-11ee-939d-92fbcf53809c.png

配置之后,J-Link在初始化完成之前不会访问外部DDR RAM。

针对XC7Z010平台,我们在J-Link软件中添加了XC7Z010的通用设置步骤。此配置中,XC7Z010的外部DDR RAM区域在默认情况下会在启动完成之前被排除。未来我们可能对所有支持的芯片执行此工作。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 应用程序
    +关注

    关注

    37

    文章

    3237

    浏览量

    57541
  • 调试器
    +关注

    关注

    1

    文章

    299

    浏览量

    23665
  • J-Link
    +关注

    关注

    0

    文章

    83

    浏览量

    22093
  • 内存映射
    +关注

    关注

    0

    文章

    14

    浏览量

    7408
收藏 人收藏

    评论

    相关推荐

    示波器的FFT能解什么问题

    本文将教你用五种方法把示波器上的FFT做成极致! 一、示波器上的FFT是什么? 二、示波器的FFT能解什么问题? 三、示波器的FFT 经常变成用户手里的鸡肋,问题在哪? 四、我们把示波器上的频谱
    的头像 发表于 08-23 09:31 1.8w次阅读

    Linux内核之内存映射原理分析

    Linux 内核采用延迟分配物理内存的策略,在进程第一次访问虚拟页的时候,产生缺页异常。如果是文件映射,那么分配物理页,把文件指定区间的数据读到物理页中,然后在页表中把虚拟页映射到物理页;如果是匿名
    发表于 07-21 17:06 2335次阅读

    拆解mmap内存映射的本质!

    mmap 内存映射里所谓的内存其实指的是虚拟内存,在调用 mmap 进行匿名映射的时候(比如进行堆内存
    的头像 发表于 01-24 14:30 1358次阅读
    拆解mmap<b class='flag-5'>内存</b><b class='flag-5'>映射</b>的本质!

    FPGA能解什么问题看了就知道

    了解FPGA?首先,如果你从未接触过FPGA(现场可编程门阵列),或者有过一点基础想要继续深入了解这个行业,在这个小节,我会向你介绍FPGA,并且向你解释FPGA都能解什么问题,如何解决这些问题,并讨论如何将设计进行优化等等。
    发表于 10-21 13:32

    eplan_路径功能文本能解什么问题

    eplan_路径功能文本是什么?eplan_路径功能文本能解什么问题?eplan_路径功能文本可能存在哪些问题?
    发表于 09-06 07:24

    内存映射的相关资料推荐

    一、介绍首先我们需要了解一个内存映射:stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同。RAM起始
    发表于 12-03 06:24

    Linux的mmap文件内存映射机制

    的某个部分, 使用简单的内存访问指令读写文件;另一方面, 它也可以用于内核的基本组织模式, 在这种模式种, 内核将整个地址空间视为诸如文件之类的一组不同对象的映射. 中的传统文件访问方式是, 首先
    发表于 04-02 14:35 420次阅读

    浅析linux内存映射原理

    内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修
    发表于 08-24 09:35 1600次阅读
    浅析linux<b class='flag-5'>内存</b><b class='flag-5'>映射</b>原理

    STM32(CM3内核) 内存映射

    这里写目录标题STM32(CM3内核) 内存映射一.CM3内核简介二.CM3内核地址映射三.搭建代码,实现映射STM32(CM3内核) 内存
    发表于 12-07 19:21 9次下载
    STM32(CM3内核) <b class='flag-5'>内存</b><b class='flag-5'>映射</b>

    将Zynq PS和PL与内存映射寄存器集成

    电子发烧友网站提供《将Zynq PS和PL与内存映射寄存器集成.zip》资料免费下载
    发表于 12-06 15:14 2次下载
    将Zynq PS和PL与<b class='flag-5'>内存</b><b class='flag-5'>映射</b>寄存器集成

    访问CXL 2.0设备中的内存映射寄存器

    计算快速链接 (CXL) 1.1 和 CXL 2.0 规范在内存映射寄存器的放置和访问方式上有所不同。CXL 1.1 规范将内存映射寄存器放置在 RCRB(根复合寄存器块)中,而 CX
    的头像 发表于 05-25 16:56 1820次阅读
    访问CXL 2.0设备中的<b class='flag-5'>内存</b><b class='flag-5'>映射</b>寄存器

    单片机的内存映射图解析

    一、如何控制单片机? 单片机的内存映射图解析 这里以STM32F429芯片为例,讲解下单片机芯片内存映射图。从此图中可以看到芯片的外设被分配了512M的空间,然而真正的外设其实没有使用
    的头像 发表于 06-22 10:33 1140次阅读
    单片机的<b class='flag-5'>内存</b><b class='flag-5'>映射</b>图解析

    单片机的内存映射图解析

    一、如何控制单片机? 单片机的内存映射图解析 这里以STM32F429芯片为例,讲解下单片机芯片内存映射图。从此图中可以看到芯片的外设被分配了512M的空间,然而真正的外设其实没有使用
    的头像 发表于 06-22 10:18 1651次阅读
    单片机的<b class='flag-5'>内存</b><b class='flag-5'>映射</b>图解析

    内存是怎么映射到物理地址空间的?内存是连续分布的吗?

    如果我们将两个4G内存插入内存插槽,得到的内存地址空间是0到8G吗?是不是0到4G是第一根内存,4到8G是第二根内存呢?实际情况相差甚远,
    的头像 发表于 06-30 15:59 3113次阅读
    <b class='flag-5'>内存</b>是怎么<b class='flag-5'>映射</b>到物理地址空间的?<b class='flag-5'>内存</b>是连续分布的吗?

    pcb仿真能解什么问题

    pcb仿真能解什么问题?  PCB(Printed Circuit Board,印刷电路板)是一种在电气和电子设备中应用广泛的基础元件。随着技术的不断发展,PCB设计也进入了数字化和智能化的时代
    的头像 发表于 08-29 16:40 1398次阅读