精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

IAR 開發環境下調試從核工程的方法(IAR篇)

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2022-05-26 17:27 ? 次閱讀

兩年前我寫過一篇《雙核i.MXRT1170之Cortex-M7與Cortex-M4互相激活之道》,那篇文章從離線啟動的角度介紹了跑雙核應用的基本方法,基本上把雙核啟動的細節都介紹到了。 在應用開發的階段,很多時候我們還是需要在線調試的,主核的調試沒什么特別要注意的地方,從核的調試大家估計就有點陌生了,今天就給大家介紹下 IAR 開發環境下調試從核工程的方法。

一、測試準備

首先需要準備好測試環境,包含必要的軟件和硬件,我的環境如下:

集成開發環境:IAR EW for Arm v9.10.2,(https://www.iar.com/products/architectures/

軟件開發包:SDK_2.11.0_MIMXRT1170-EVK(Toolchain要包含IAR),點此下載

軟件驅動:J-Link driver v7.56b,點此下載

硬件工具:J-Link Plus調試器

硬件開發板:MIMXRT1170-EVK (Rev.C),含板載 DAP-Link 調試器

我們知道i.MX RT1170 其實主從核是在 Fuse 里可配的,我們就以默認配置(Cortex-M7 為主,Cortex-M4 為從)為例來介紹,選取的測試工程是SDK_2.11.0_MIMXRT1170-EVKoardsevkmimxrt1170demo_appshello_worldcm4。

二、在IAR下調試

使用IAR 打開hello_world_demo_cm4.eww 工程,切換到 debug build (就是在 RAM 中執行)。

2.1 工程選項處理器選 Cortex-M4 核調試情況

我們先來看一下工程選項里處理器選擇 Cortex-M4,并且不使能任何額外腳本時調試情況。也就是說在明知主核Cortex-M7 處于激活狀態而 Cortex-M4 處于未激活狀態時,IAR C-SPY 調試組件能否工作。

7ed24dd8-dc8b-11ec-ba43-dac502259ad0.png

分別測試了板載 DAP-Link 調試器以及外接 J-Link 調試器,測試結果均是不能直接調試,DAP-Link 下提示 "Failed to connect toCPU",J-Link 下提示"Select core is not same as the target core"。

7ef7bf96-dc8b-11ec-ba43-dac502259ad0.png

2.2 工程選項處理器選 NXP MIMXRT1176xxxA_M4 調試情況

再來看一下工程選項里處理器選擇 NXP MIMXRT1176xxxA_M4 時調試情況(會調用相關腳本,在IAR/J-Link 里已經做好)。也就是雖然 Cortex-M4 處于未激活狀態,但是有配套腳本會負責激活工作。

J-Link下是可以直接調試的,在 Debug Log 窗口,我們可以看到有 .jlinkscript 腳本執行的痕跡,腳本打印信息里顯示其識別到Cortex-M4 未激活,并且會做激活相關工作。

Note: 這個跟 NXP MIMXRT1176xxxA_M4 選擇相關的 .jlinkscript 腳本在 JLink 驅動安裝目錄下,由于 log 里沒有直接顯示路徑,那大概率已經被打包進 DLL 文件里了,我們看不到具體腳本代碼實現。

7f250c6c-dc8b-11ec-ba43-dac502259ad0.png

DAP-Link下也是可以直接調試的,在 Debug Log 窗口,我們可以看到 iMXRT_1170.dmac 腳本被執行了,腳本打印信息里顯示其識別到 Cortex-M4未激活,并且會做激活相關工作。

Note: 這個跟 NXP MIMXRT1176xxxA_M4 選擇相關的 iMXRT_1170.dmac 腳本在 IAR 安裝目錄下,具體路徑已經在 log 里顯示出來了,我們可以看到其具體腳本代碼實現。

7f5f5502-dc8b-11ec-ba43-dac502259ad0.png

如果你細心觀察,你會發現 DAP-Link 下必須要在工程選項 Debugger / ExtraOptions里加 “--macro_paramenable_core=1” 語句才能正常調試,這是因為 iMXRT_1170.dmac 腳本需要接受這個參數才能正常激活從核 Cortex-M4。

7f99bb84-dc8b-11ec-ba43-dac502259ad0.png

2.3 自己實現用于從核調試的腳本

現在我們知道了調試從核 Cortex-M4 工程必須要有專門腳本來負責激活從核才行,雖然 IAR/J-Link里已經做好這個腳本,但是兩者行為是否統一我們不清楚(畢竟看不見 J-Link 下腳本源碼),而且這個腳本是隨著 IAR/J-Link 版本而變化的,具有一定的不可控性。

為了完全掌控從核調試的主動性與確定性,最好我們自己重新實現 IAR/J-Link 下的調試腳本,在線調試時直接指定使用我們自己寫的腳本,這樣即使工程選項里處理器選擇 Cortex-M4 我們也能正常調試。

對于DAP-Link,我們新建一個 mimxrt1170_connect_cm4_user.mac 文件(具體內容見附錄一)放到工程目錄下,并且在 IAR 選項里指定使用這個 mac 文件。這個 mac 文件語法詳見 《IAR內部C-SPY調試組件配套宏文件(.mac)用法介紹》,其中最重要的是 execUserCoreConnect() 保留宏函數里要做激活 Cortex-M4 工作。

Note: 如果希望調試從核 Cortex-M4 時,主核 Cortex-M7 依然在跑,可以注釋掉mimxrt1170_connect_cm4_user.mac 文件里的 execUserSetup() 函數。

7fd0b986-dc8b-11ec-ba43-dac502259ad0.png

對于J-Link,我們新建一個 mimxrt1170_connect_cm4_user.jlinkscript 文件(具體內容見附錄二)放到工程目錄下,并且在 IAR 選項里指定使用這個 jlinkscript 文件。這個 jlinkscript 文件語法詳見 《JLink Script文件基礎及其在IAR下調用方法》,其中最重要的是 InitTarget() 用戶自定義動作函數里要做激活 Cortex-M4 工作。

Note: 如果希望調試從核 Cortex-M4 時,主核 Cortex-M7 依然在跑,可以注釋掉mimxrt1170_connect_cm4_user.jlinkscript 文件里的AfterResetTarget() 函數。

80103b2e-dc8b-11ec-ba43-dac502259ad0.png

附錄一、IAR腳本(用于DAP-Link)

prepare_core_spin_code(cmVersion)
{
    __var start;
    if (cmVersion == 7)
    {
        start = 0x2021FF00;
        __writeMemory32(start >> 7, 0x40c0c068,  "AP0_Memory");
    }
    if (cmVersion == 4)
    {
        start = 0x20200000;
        __writeMemory32(start & 0xFFFF, 0x40c0c000,  "AP0_Memory");
        __writeMemory32(start >> 16,    0x40c0c004,  "AP0_Memory");
    }
    __writeMemory32(start + 0x20, start, "AP0_Memory");
    __writeMemory32(0x223105, start + 0x4, "AP0_Memory");
}

release_core(cmVersion)
{
    if (cmVersion == 7)
    {
        __writeMemory32(0x2, 0x40c04000, "AP0_Memory");
    }
    if (cmVersion == 4)
    {
        __writeMemory32(0x1, 0x40c04000, "AP0_Memory");
    }
}

reset_core(cmVersion)
{
    __var reg;
    __var ctrlAddr;
    __var statAddr;
    if (cmVersion == 7)
    {
        ctrlAddr = 0x40c042a4;
        statAddr = 0x40c042b0;
    }
    if (cmVersion == 4)
    {
        ctrlAddr = 0x40c04284;
        statAddr = 0x40c04290;
    }
    __writeMemory32(0x1, ctrlAddr, "AP0_Memory");
    do
    {
        reg = __readMemory32(statAddr, "AP0_Memory");
        __delay(10);
    }while(reg & 0x1);
}

//_ExecDeviceCoreConnect()
execUserCoreConnect()
{
    __probeCmd("j.i swd /force");
    // dummy read
    __readAPReg(2);
    __delay(10);
    // Disable system reset caused by sysrstreq from each core
    __writeMemory32(0x3c00, 0x40C04004, "AP0_Memory");
    prepare_core_spin_code(4);
    release_core(4);
    // switch to AP1
    __writeDPReg(1<<24, 2);
}

execUserPreReset()
{
    reset_core(4);
    release_core(4);
    __writeDPReg(1<<24, 2);
}

execUserSetup()
{
    __var reg;
    reg = __readMemory32(0x40c04000, "AP0_Memory");
    if((reg & 0x2) == 0)
    {
        prepare_core_spin_code(7);
        reset_core(7);
    }
}

附錄二、J-Link 腳本

void prepare_core_spin_code(unsigned int cmVersion) 
{
    unsigned int start;
    if (cmVersion == 7)
    {
        start = 0x2021FF00;
        MEM_WriteU32(0x40c0c068,  start >> 7);
    }
    if (cmVersion == 4)
    {
        start = 0x20200000;
        MEM_WriteU32(0x40c0c000,  start & 0xFFFF);
        MEM_WriteU32(0x40C0c004,  start >> 16);
    }
    MEM_WriteU32(start,       start + 0x20);
    // BootROM go_fatal_mode()
    MEM_WriteU32(start + 0x4, 0x223105);
}

void release_core(unsigned int cmVersion)
{
    if (cmVersion == 7)
    {
        MEM_WriteU32(0x40C04000, 0x2);
    }
    if (cmVersion == 4)
    {
        MEM_WriteU32(0x40C04000, 0x1);
    }
}

void reset_core(unsigned int cmVersion)
{
    unsigned int reg;
    unsigned int ctrlAddr;
    unsigned int statAddr;

    if (cmVersion == 7)
    {
        ctrlAddr = 0x40c042a4;
        statAddr = 0x40c042b0;
    }
    if (cmVersion == 4)
    {
        ctrlAddr = 0x40c04284;
        statAddr = 0x40c04290;
    }

    MEM_WriteU32(ctrlAddr, 1);
    do
    {
        reg = MEM_ReadU32(statAddr);
        SYS_Sleep(10);
    }while (reg & 0x1);
}

void InitTarget(void) 
{
    CPU = CORTEX_M7;
    // Manually configure AP
    JLINK_CORESIGHT_AddAP(0, CORESIGHT_AHB_AP);
    JLINK_CORESIGHT_AddAP(1, CORESIGHT_AHB_AP);
    JLINK_CORESIGHT_AddAP(2, CORESIGHT_APB_AP);
    // Dummy read
    JLINK_CORESIGHT_ReadAP(JLINK_CORESIGHT_AP_REG_IDR);
    SYS_Sleep(10);
    // Disable system reset caused by sysrstreq from each core
    MEM_WriteU32(0x40C04004, 0x3c00);
    prepare_core_spin_code(4);
    release_core(4);
    // Switch to AP1
    CPU = CORTEX_M4;
    CORESIGHT_IndexAHBAPToUse = 1;
}

void ResetTarget(void)
{
    CORESIGHT_IndexAHBAPToUse = 0;
    reset_core(4);
    release_core(4);
    CORESIGHT_IndexAHBAPToUse = 1;
}

void AfterResetTarget(void)
{
    unsigned int reg;
    reg = MEM_ReadU32(0x40c04000);
    if((reg & 0x2) == 0)
    {
        prepare_core_spin_code(7);
        reset_core(7);
    }
}

編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19169

    瀏覽量

    229153
  • IAR
    IAR
    +關注

    關注

    5

    文章

    345

    瀏覽量

    36625
  • 調試器
    +關注

    關注

    1

    文章

    300

    瀏覽量

    23691

原文標題:雙核i.MX RT1170之單獨在線調試從核工程的方法(IAR篇)

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    請問LAUNCHXL-CC1310開發板可以在IAR下調試開發嗎?支持CJTAG嗎?

    想買LAUNCHXL-CC1310這個板子,是否支持在IAR下調試開發?是否支持CJTAG?
    發表于 05-15 07:08

    請問有在IAR5.5環境下調試STM32的文檔說明嗎?

    有在IAR5.5環境下調試STM32的文檔說明嗎?怎么設置IAR5.5?
    發表于 05-22 02:19

    IAR調試中不同復位類型的介紹

    IAR調試中不同復位類型的介紹在IAR 環境下調試有不同的復位類型,其中一些只復位內核不復位MCU 外設的復位方式在特定情況下可能會造成仿真
    發表于 10-19 07:54

    最新IAR集成開發環境文件下載

    最新IAR集成開發環境文件下載
    發表于 08-12 11:18 ?223次下載

    Kinetis實戰開發--用IAR創建工程

    IAR 開發環境中可以使用兩種方法新建工程。一是 開發環境中可以使用兩種
    發表于 09-25 14:52 ?31次下載

    K60芯片IAR及CW例程和開發環境使用

    K60芯片IAR及CW例程和開發環境使用
    發表于 05-03 16:42 ?44次下載

    IAR 在線調試查看各種變量的不同方法

    IAR在線調試查看各種變量的不同方法
    的頭像 發表于 03-12 10:00 ?1.3w次閱讀

    IAR ARM集成開發環境學習教程

    IAR Embedded Workbench for ARM 是IAR Systems 公司為ARM 微處理器開發的一個集成開發環境(下面簡
    發表于 08-24 16:47 ?32次下載
    <b class='flag-5'>IAR</b> ARM集成<b class='flag-5'>開發</b><b class='flag-5'>環境</b>學習教程

    JLinkScript文件基礎及其在IAR下調方法的PDF文件

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是 JLink Script 文件基礎及其在 IAR 下調方法。 JLink 可以說是 MCU 開發者最熟悉的
    發表于 12-11 00:02 ?5次下載
    JLinkScript文件基礎及其在<b class='flag-5'>IAR</b><b class='flag-5'>下調</b>用<b class='flag-5'>方法</b>的PDF文件

    STM32開發,使用IAR軟件建立工程

    STM32開發,使用IAR軟件建立工程1 概述1.1 資源概述1.2 在IAR中建立工程2 IAR
    發表于 12-03 10:51 ?14次下載
    STM32<b class='flag-5'>開發</b>,使用<b class='flag-5'>IAR</b>軟件建立<b class='flag-5'>工程</b>

    IAR for 8051 開發環境的安裝

    IAR for 8051 開發環境的安裝
    發表于 12-03 11:21 ?17次下載
    <b class='flag-5'>IAR</b> for 8051 <b class='flag-5'>開發</b><b class='flag-5'>環境</b>的安裝

    IAR開發環境下調試核工程方法

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是i.MXRT1170下在線聯合調試核工程方法(基于IAR)。
    的頭像 發表于 06-20 11:32 ?3822次閱讀

    IAR下調試信息輸出機制之硬件UART外設

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是IAR下調試信息輸出機制之硬件UART外設。
    的頭像 發表于 08-24 10:03 ?2085次閱讀

    IAR下調試信息輸出機制之半主機

    軟件上 PC 這邊就需要 IAR 開發環境即可,這里在編譯目標板 MCU 應用程序時,除了需要包含打印輸出相關代碼(標準 I/O 庫接口),底層接口實現必須選用 IAR 的 Semih
    發表于 08-24 11:30 ?806次閱讀

    基于IAR for arm9.30.1在VS Code調試仿真RA

    開發環境 IDE:IAR for arm9.30.1 +VS Code 仿真器:J-Link V9 芯片型號:R7FA2L1AB2DFM 本文檔是基于芯片R7FA2L1AB2DFM,理論所有ARM
    的頭像 發表于 01-16 13:20 ?2488次閱讀