0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是雙內(nèi)存映射?能解決什么問(wèn)題?

麥克泰技術(shù) ? 來(lái)源:麥克泰技術(shù) ? 2023-12-01 11:06 ? 次閱讀

J-Link調(diào)試器支持將程序下載到RAM或Flash中,并通過(guò)設(shè)置無(wú)限斷點(diǎn)、查看內(nèi)存寄存器等方式實(shí)現(xiàn)在線調(diào)試。如果沒(méi)有這種調(diào)試能力,我們需要反復(fù)試錯(cuò)。

當(dāng)調(diào)試過(guò)程停止,沒(méi)有辦法繼續(xù)時(shí),系統(tǒng)被“鎖定”或“調(diào)試掛起”。引起異常的一種情況是程序或調(diào)試器在外部RAM控制器配置之前訪問(wèn)了外部?jī)?nèi)存。

為了解決該問(wèn)題,J-Link增加了新功能-雙內(nèi)存映射。

01什么是雙內(nèi)存映射?能解決什么問(wèn)題?

應(yīng)用程序從main()開(kāi)始,main()之前的啟動(dòng)過(guò)程,我們通常默認(rèn)其正常工作。因此,在main()之前出現(xiàn)的問(wèn)題,特別是鎖定調(diào)試邏輯并阻止進(jìn)一步調(diào)試,是一個(gè)大問(wèn)題。其中一個(gè)問(wèn)題是在外部RAM控制器配置之前訪問(wèn)外部?jī)?nèi)存。

使用J-Link的雙內(nèi)存映射,一個(gè)內(nèi)存映射用于處理啟動(dòng)階段的內(nèi)存訪問(wèn),第二個(gè)內(nèi)存映射在初始化完成后使用。第一個(gè)內(nèi)存映射阻止對(duì)外部?jī)?nèi)存的訪問(wèn),第二個(gè)內(nèi)存映射允許全內(nèi)存訪問(wèn),消除了在配置完成之前訪問(wèn)外部?jī)?nèi)存的可能性和問(wèn)題。

02問(wèn)題發(fā)現(xiàn)

在更新一些代碼時(shí),我們注意到一些用戶界面代碼中的錯(cuò)誤,重寫(xiě)了它,并像往常一樣下載到目標(biāo)中。在重置應(yīng)用程序時(shí),我們得到了目標(biāo)連接丟失的消息。我們檢查了所有的物理連接,然后再試一次……

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

…但它又失敗了。

對(duì)目標(biāo)重新上電,再次下載應(yīng)用程序,但結(jié)果相同。

03罪魁禍?zhǔn)?/strong>

通過(guò)J-Link日志文件:

JLINK_ReadMem(0x0033D4C0, 0x340 Bytes,…)

CPU_ReadMem(832字節(jié)@ 0x0033D4C0)

failed

- 40.959ms returns 1

Embedded Studio告訴J-Link從目標(biāo)的地址0x0033D4C0讀取832字節(jié),在XC7Z010平臺(tái)上該地址位于外部DDR RAM中的內(nèi)存。DDR RAM在訪問(wèn)之前必須被初始化。而Embedded Studio在啟動(dòng)目標(biāo)應(yīng)用程序之后讓J-Link立即讀取內(nèi)存,該操作在DDR RAM初始化之前。

我們沒(méi)有添加任何會(huì)影響DDR RAM初始化的代碼。為什么這一切突然發(fā)生了呢?

一個(gè)打開(kāi)的內(nèi)存窗口,顯示了外部DDRRAM中的數(shù)組“aMyArrInExtDDRRAM”內(nèi)容。

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

我們沒(méi)有考慮到打開(kāi)的內(nèi)存窗口是問(wèn)題所在,內(nèi)存窗口僅在調(diào)試會(huì)話期間可見(jiàn),增加了這種情況的隱蔽性,

調(diào)試會(huì)話開(kāi)始時(shí)不打開(kāi)內(nèi)存窗口并不是一個(gè)解決辦法。例如,第三方調(diào)試器可能默認(rèn)打開(kāi)內(nèi)存窗口,或者不允許用戶關(guān)閉它等。同樣的,使用單內(nèi)存映射解決方案,通過(guò)J-Link腳本文件指定某些區(qū)域?yàn)榉欠▍^(qū)域,在這種情況下也不起作用。

04解放方案

使用兩個(gè)內(nèi)存映射:一個(gè)用于處理啟動(dòng)完成之前的內(nèi)存訪問(wèn),另一個(gè)用于處理啟動(dòng)完成之后的內(nèi)存訪問(wèn)。用戶可以向每個(gè)映射中添加自定義區(qū)域。

第一個(gè)內(nèi)存映射的訪問(wèn)限制就像一個(gè)安全模式。一旦應(yīng)用安全通過(guò)了這個(gè)階段,就會(huì)動(dòng)態(tài)切換到第二個(gè)內(nèi)存映射。

05易于實(shí)現(xiàn)

使用J-Link Control Panel,現(xiàn)在可以很容易地將“excluded”區(qū)域添加到第一個(gè)內(nèi)存映射中,J-Link在目標(biāo)應(yīng)用程序啟動(dòng)完成之前使用該映射。

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

單擊“Add region…”將彈出如下對(duì)話框:

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

配置之后,J-Link在初始化完成之前不會(huì)訪問(wèn)外部DDR RAM。

針對(duì)XC7Z010平臺(tái),我們?cè)贘-Link軟件中添加了XC7Z010的通用設(shè)置步驟。此配置中,XC7Z010的外部DDR RAM區(qū)域在默認(rèn)情況下會(huì)在啟動(dòng)完成之前被排除。未來(lái)我們可能對(duì)所有支持的芯片執(zhí)行此工作。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3223

    瀏覽量

    57504
  • 調(diào)試器
    +關(guān)注

    關(guān)注

    1

    文章

    297

    瀏覽量

    23630
  • J-Link
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    22082
  • 內(nèi)存映射
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    7403
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    示波器的FFT能解什么問(wèn)題?

    本文將教你用五種方法把示波器上的FFT做成極致! 一、示波器上的FFT是什么? 二、示波器的FFT能解什么問(wèn)題? 三、示波器的FFT 經(jīng)常變成用戶手里的雞肋,問(wèn)題在哪? 四、我們把示波器上的頻譜
    的頭像 發(fā)表于 08-23 09:31 ?1.8w次閱讀

    Linux內(nèi)核之內(nèi)存映射原理分析

    Linux 內(nèi)核采用延遲分配物理內(nèi)存的策略,在進(jìn)程第一次訪問(wèn)虛擬頁(yè)的時(shí)候,產(chǎn)生缺頁(yè)異常。如果是文件映射,那么分配物理頁(yè),把文件指定區(qū)間的數(shù)據(jù)讀到物理頁(yè)中,然后在頁(yè)表中把虛擬頁(yè)映射到物理頁(yè);如果是匿名
    發(fā)表于 07-21 17:06 ?2324次閱讀

    拆解mmap內(nèi)存映射的本質(zhì)!

    mmap 內(nèi)存映射里所謂的內(nèi)存其實(shí)指的是虛擬內(nèi)存,在調(diào)用 mmap 進(jìn)行匿名映射的時(shí)候(比如進(jìn)行堆內(nèi)存
    的頭像 發(fā)表于 01-24 14:30 ?1164次閱讀
    拆解mmap<b class='flag-5'>內(nèi)存</b><b class='flag-5'>映射</b>的本質(zhì)!

    FPGA能解什么問(wèn)題看了就知道

    了解FPGA?首先,如果你從未接觸過(guò)FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列),或者有過(guò)一點(diǎn)基礎(chǔ)想要繼續(xù)深入了解這個(gè)行業(yè),在這個(gè)小節(jié),我會(huì)向你介紹FPGA,并且向你解釋FPGA都能解什么問(wèn)題,如何解決這些問(wèn)題,并討論如何將設(shè)計(jì)進(jìn)行優(yōu)化等等。
    發(fā)表于 10-21 13:32

    eplan_路徑功能文本能解什么問(wèn)題

    eplan_路徑功能文本是什么?eplan_路徑功能文本能解什么問(wèn)題?eplan_路徑功能文本可能存在哪些問(wèn)題?
    發(fā)表于 09-06 07:24

    內(nèi)存映射的相關(guān)資料推薦

    一、介紹首先我們需要了解一個(gè)內(nèi)存映射:stm32的flash地址起始于0x0800 0000,結(jié)束地址是0x0800 0000加上芯片實(shí)際的flash大小,不同的芯片flash大小不同。RAM起始
    發(fā)表于 12-03 06:24

    Linux的mmap文件內(nèi)存映射機(jī)制

    的某個(gè)部分, 使用簡(jiǎn)單的內(nèi)存訪問(wèn)指令讀寫(xiě)文件;另一方面, 它也可以用于內(nèi)核的基本組織模式, 在這種模式種, 內(nèi)核將整個(gè)地址空間視為諸如文件之類(lèi)的一組不同對(duì)象的映射. 中的傳統(tǒng)文件訪問(wèn)方式是, 首先
    發(fā)表于 04-02 14:35 ?408次閱讀

    淺析linux內(nèi)存映射原理

    內(nèi)存映射,簡(jiǎn)而言之就是將用戶空間的一段內(nèi)存區(qū)域映射到內(nèi)核空間,映射成功后,用戶對(duì)這段內(nèi)存區(qū)域的修
    發(fā)表于 08-24 09:35 ?1586次閱讀
    淺析linux<b class='flag-5'>內(nèi)存</b><b class='flag-5'>映射</b>原理

    STM32(CM3內(nèi)核) 內(nèi)存映射

    這里寫(xiě)目錄標(biāo)題STM32(CM3內(nèi)核) 內(nèi)存映射一.CM3內(nèi)核簡(jiǎn)介二.CM3內(nèi)核地址映射三.搭建代碼,實(shí)現(xiàn)映射STM32(CM3內(nèi)核) 內(nèi)存
    發(fā)表于 12-07 19:21 ?9次下載
    STM32(CM3內(nèi)核) <b class='flag-5'>內(nèi)存</b><b class='flag-5'>映射</b>

    將Zynq PS和PL與內(nèi)存映射寄存器集成

    電子發(fā)燒友網(wǎng)站提供《將Zynq PS和PL與內(nèi)存映射寄存器集成.zip》資料免費(fèi)下載
    發(fā)表于 12-06 15:14 ?2次下載
    將Zynq PS和PL與<b class='flag-5'>內(nèi)存</b><b class='flag-5'>映射</b>寄存器集成

    訪問(wèn)CXL 2.0設(shè)備中的內(nèi)存映射寄存器

    計(jì)算快速鏈接 (CXL) 1.1 和 CXL 2.0 規(guī)范在內(nèi)存映射寄存器的放置和訪問(wèn)方式上有所不同。CXL 1.1 規(guī)范將內(nèi)存映射寄存器放置在 RCRB(根復(fù)合寄存器塊)中,而 CX
    的頭像 發(fā)表于 05-25 16:56 ?1783次閱讀
    訪問(wèn)CXL 2.0設(shè)備中的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>映射</b>寄存器

    單片機(jī)的內(nèi)存映射圖解析

    一、如何控制單片機(jī)? 單片機(jī)的內(nèi)存映射圖解析 這里以STM32F429芯片為例,講解下單片機(jī)芯片內(nèi)存映射圖。從此圖中可以看到芯片的外設(shè)被分配了512M的空間,然而真正的外設(shè)其實(shí)沒(méi)有使用
    的頭像 發(fā)表于 06-22 10:33 ?1111次閱讀
    單片機(jī)的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>映射</b>圖解析

    單片機(jī)的內(nèi)存映射圖解析

    一、如何控制單片機(jī)? 單片機(jī)的內(nèi)存映射圖解析 這里以STM32F429芯片為例,講解下單片機(jī)芯片內(nèi)存映射圖。從此圖中可以看到芯片的外設(shè)被分配了512M的空間,然而真正的外設(shè)其實(shí)沒(méi)有使用
    的頭像 發(fā)表于 06-22 10:18 ?1598次閱讀
    單片機(jī)的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>映射</b>圖解析

    內(nèi)存是怎么映射到物理地址空間的?內(nèi)存是連續(xù)分布的嗎?

    如果我們將兩個(gè)4G內(nèi)存插入內(nèi)存插槽,得到的內(nèi)存地址空間是0到8G嗎?是不是0到4G是第一根內(nèi)存,4到8G是第二根內(nèi)存呢?實(shí)際情況相差甚遠(yuǎn),
    的頭像 發(fā)表于 06-30 15:59 ?2996次閱讀
    <b class='flag-5'>內(nèi)存</b>是怎么<b class='flag-5'>映射</b>到物理地址空間的?<b class='flag-5'>內(nèi)存</b>是連續(xù)分布的嗎?

    pcb仿真能解什么問(wèn)題?

    pcb仿真能解什么問(wèn)題?? PCB(Printed Circuit Board,印刷電路板)是一種在電氣和電子設(shè)備中應(yīng)用廣泛的基礎(chǔ)元件。隨著技術(shù)的不斷發(fā)展,PCB設(shè)計(jì)也進(jìn)入了數(shù)字化和智能化的時(shí)代
    的頭像 發(fā)表于 08-29 16:40 ?1369次閱讀