请选择 进入手机版 | 继续访问电脑版
查看: 105|回复: 1

[分享] 3个妙招-IAR下在线联合调试双核MCU工程

[复制链接]
  • TA的每日心情
    开心
    4 天前
  • 签到天数: 176 天

    [LV.7]常住居民III

    2560

    主题

    5031

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    23968
    最后登录
    2022-8-5
    发表于 2022-6-20 12:32:07 | 显示全部楼层 |阅读模式
    3个妙招-IAR下在线联合调试双核MCU工程

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是i.MXRT1170下在线联合调试双核工程的方法(基于IAR)。

    前段时间痞子衡写过一篇《双核i.MXRT1170之单独在线调试从核工程的方法》,那篇文章介绍了如何单独在线调试从核工程的方法。当我们把主核工程和从核工程分别调稳定之后,底下便开始需要双核联调,验证双核通信交互相关功能。今天痞子衡就给大家介绍下 IAR 开发环境下双核工程联调的三种方法:

    一、测试准备
    首先需要准备好测试环境,包含必要的软件和硬件,痞子衡的环境如下:

    集成开发环境:IAR EW for Arm v9.10.2,点此下载
    软件开发包:SDK_2.11.0_MIMXRT1170-EVK(Toolchain要包含IAR),点此下载
    软件驱动:J-Link driver v7.56b,点此下载
    硬件工具:J-Link Plus调试器
    硬件开发板:MIMXRT1170-EVK (Rev.C),含板载 DAP-Link 调试器
    我们知道 i.MXRT1170 其实主从核是在 Fuse 里可配的,我们就以默认配置(Cortex-M7 为主,Cortex-M4 为从)为例来介绍。


    二、在IAR下调试
    2.1 通用办法:双核工程无关联,调试器分别加载
    第一种方法就是单纯借助外部调试器来做加载,主核工程和从核工程之间无依赖关系。我们选择 SDK 包里如下两个  hello_world 普通工程来做测试:

    主核工程:\SDK_2.11.0_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm7\iar
    从核工程:\SDK_2.11.0_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm4\iar
    首先将 hello_world_demo_cm7 工程(选择 flexspi_nor_debug build)调试起来(菜单栏 Download and Debug 按钮),断点停在 main 即可。然后继续将 hello_world_demo_cm4 工程(选择 debug build)也调试起来(菜单栏 Download and Debug 按钮),过程很顺利,底下在两个工程下可以分别单步或者设断点进行调试。
    Note1: 调试顺序不一定非要主核工程在先,从核工程在后,调换顺序一样可以,但是后调试的工程复位类型必须选 Core 复位(建议两个工程均选择这种复位)。
    Note2: 调试从核工程 hello_world_demo_cm4 需借助 《双核i.MXRT1170之单独在线调试从核工程的方法》 一文里的脚本激活从核,并且脚本里不要挂起主核。
    Note3: 对于 J-Link 调试器,双核工程分别调试没有问题;但是对于 DAP-Link 调试器,当第一个工程正在调试时,第二个工程无法直接调试(会提示找不到可用的 DAP-Link 调试器)。

    11.png
    痞子衡将两个 hello world 工程主函数稍稍修改了一下,打印出不同内容,并且增加了一些延时,从结果来看,两个核都在正常跑。不过这里要提醒一句,i.MXRT1170 内部大部分外设对于两个核都是共享的,建议合理分配资源,尽量不要像本次测试这样,两个核都通过同一个 UART 来打印信息(除非代码里刻意做了资源共享设计)。
    12.png
    2.2 专用方法:双核工程无关联,IAR多核组件加载
    第二种方法依然是借助外部调试器来做加载,主核工程和从核工程之间还是无需依赖关系。不过这一次我们要借助 IAR 软件里自带的多核组件,具体设置在工程选项 Debugger/Multicore 里面,在这里填上另外一个核工程(也叫 Partner 工程)文件(.eww)路径以及 build 即可,然后点击菜单栏 Download and Debug 按钮,IAR 会自动完成全部加载工作并返回给用户两个工程的调试界面:
    Note1: 多核组件的设置既可以在主核工程里,也可以在从核工程里。我们既可以从主核工程开始调试,也可以从从核工程开始调试。
    Note2: 多核组件仅仅是自动去打开 Partner 工程完成下载调试,并不包含从核激活功能,因此从核工程还是需要保留从核激活脚本。
    Note3: 多核组件功能仅在 DAP-Link 调试器(或者 I-Jet)下有效,在 J-Link 调试器下不适用。
    13.png
    2.3 通用方法:双核工程有关联,主核加载从核
    前两种方法本质上都是借助调试器完成从核工程加载的,其实除了调试器,我们也可以利用主核工程里的代码来加载从核,步骤都在《双核i.MXRT1170之Cortex-M7与Cortex-M4互相激活之道》 一文里,我们以 SDK 包里如下两个  hello_world 多核例程来做测试:
    主核工程:\SDK_2.11.0_MIMXRT1170-EVK\boards\evkmimxrt1170\multicore_examples\hello_world\cm7\iar
    从核工程:\SDK_2.11.0_MIMXRT1170-EVK\boards\evkmimxrt1170\multicore_examples\hello_world\cm4\iar

    在多核示例里,从核工程选项 Output Converter / Output 里会指定生成 hello_world_cm4.bin,然后主核工程选项 Linker / Input 里会输入 hello_world_cm4.bin 的路径,这样主核工程直接把从核可执行机器码当作源文件数组,用于后续复制加载从核程序(具体代码在主核工程 hello_world_core0.c 文件里)。
    14.png
    多核示例主要是为了展示双核通信交互,而本文主要介绍双核调试,因此我们可以将原始工程里关于 MCMGR 相关代码全部去掉(主核工程代码里要添加从核激活语句),主核工程里多核组件的设置也去掉。
    Note1: 此方法不依赖从核工程的激活脚本,因为激活工作在主核工程代码里做掉了。
    Note2: 此方法适用 J-Link 调试器,不适用 DAP-Link 调试器,原因与 2.1 节 Note 3 类似。

    两个工程修改完之后,先调试主核工程(菜单栏 Download and Debug 按钮),跑到从核激活语句全部执行完毕,然后再调试从核工程(菜单栏 Attach to Running Target 按钮),至此也可以愉快地进行双核调试。

    至此,i.MXRT1170下在线联合调试双核工程的方法痞子衡便介绍完毕了,掌声在哪里~~~

    跟着日天混,天天饱九顿
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 09:47
  • 签到天数: 310 天

    [LV.8]以坛为家I

    1

    主题

    2988

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    3098
    最后登录
    2022-8-8
    发表于 2022-6-20 15:03:31 | 显示全部楼层
    都是干货
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2022-8-9 03:43 , Processed in 0.069925 second(s), 17 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表