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

  两年前痞子衡写过一篇《i.MXRT1170下在线联合调试双核工程的三种方法(IAR篇)》,那篇文章详细介绍了 IAR 下调试 RT1170 双核工程的几种方法。现如今,免费的 MCUXpresso IDE 用户越来越多,而且说实话,MCUXpresso IDE 也确实功能越来越完善,日常嵌入式开发的几乎所有需求都能够满足。今天痞子衡就继续给大家介绍 MCUXpresso IDE 下双核工程联调的三种方法:

一、测试准备

  按 《i.MXRT1170下在线联合调试双核工程的三种方法(IAR篇)》 一文里第一节的测试准备,痞子衡这次的环境如下:

  • 集成开发环境: MCUXpresso IDE v11.10.x,点此下载
  • 软件开发包: SDK_2_16_000_MIMXRT1170-EVKB(Toolchain要包含MCUXpresso IDE),点此下载
  • 软件驱动: J-Link driver v7.96k,点此下载
  • 硬件工具: J-Link Plus调试器
  • 硬件开发板: MIMXRT1170-EVKB (Rev.A),含板载 DAP-Link 调试器

二、在MCUXpresso IDE下调试

2.1 通用办法:双核工程无关联,调试器分别加载

  第一种方法依旧是单纯借助外部调试器来做加载,主核工程和从核工程之间无任何依赖关系(一般情况下主核是 XIP 工程,从核是 Non-XIP 工程)。我们选择 SDK 包里如下两个 hello_world 普通工程来做测试(SDK 包里并没有现成的 MCUXpresso IDE 工程文件,需要自己导出,详情参考 《MCUXpresso IDE下SDK工程导入与workspace管理机制》 一文):

主核例程导出源路径:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkbmimxrt1170\demo_apps\hello_world\cm7
从核例程导出源路径:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkbmimxrt1170\demo_apps\hello_world\cm4

  上次测试 IAR 工具链时,SDK 版本还是 2.11,如今已经演化到了 2.16,现在配套脚本设计得更完善了,主核工程和从核工程下载先后顺序无限制。痞子衡使用了板载 DAP-Link 调试器分别调试双核工程,过程非常丝滑。这主要得益于如下两个 .scp 脚本文件(完成主从核连接与激活工作):

  有小伙伴可能会疑惑,这两个 .scp 文件到底是放在哪里的?因为在 MCUXpresso IDE 安装目录下以及导出的 hello world 工程目录下都找不到它们的身影,其实它们就藏在安装 MCUXpresso IDE 时自动同步安装的 LinkServer 驱动里面(\LinkServer_1.6.114\binaries\Scripts),这些脚本是共用的,如果你想修改为专用脚本,可以拷贝到工程目录下,然后启用下图里的 Custom Path

2.2 专用方法:双核工程有关联,IDE多核组件链接,主核加载从核

  第二种方法需要借助主核代码来给从核做加载,此时主核工程和从核工程之间有互相链接关系(依旧为主核 XIP 工程,从核 Non-XIP 工程),这里需要借助 MCUXpresso IDE 软件里自带的多核组件。我们首先从 SDK 里导出 hello world 多核例程:

主核例程导出源路径:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkmimxrt1170\multicore_examples\hello_world\cm7
从核例程导出源路径:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkmimxrt1170\multicore_examples\hello_world\cm4

  可以分别打开主核和从核例程的工程选项,找到 Multicore 设置,可以看到从核配置为 M4SLAVE,主核勾选了 M4SLAVE 工程对应的 axf 文件路径,此为两个工程的链接关系:

  至于从核代码加载过程,可以打开主核工程的链接文件,相比一般独立工程链接文件,其多了对从核工程编译出来的二进制数据(包含text和data)的链接处理,拷贝动作是在主核工程 startup_mimxrt1176_cm7.c 文件 ResetISR() 函数中的 data bss 段初始化过程中一起完成的,激活从核动作则是 main 函数里 MCMGR_StartCore() 函数实现的。

2.3 通用方法:双核工程无关联,主核激活从核

  目前 v2.16 SDK 包里相比之前增加了如下两个 hello_world_secondary_core_boot 多核例程,以往的多核例程,从核均是 Non-XIP 工程,而这个新增例程里从核工程也是 XIP 例程:

主核例程导出源路径:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkmimxrt1170\demo_apps\hello_world_secondary_core_boot\cm7
从核例程导出源路径:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkmimxrt1170\demo_apps\hello_world_secondary_core_boot\cm4

  因为主从核工程均是 XIP 工程,在调试时需要先将从核工程下载进 Flash,然后再下载主核工程进 Flash 并且沿用主核工程里的 XIP 头做启动配置。因为代码加载是调试器完成的,所以两个工程间并无直接关联,不过因为最终还是需要主核执行代码去完成从核激活工作,因此从核程序存放地址(CORE1_BOOT_ADDRESS)是需要 hardcode 在主核代码里的。

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

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:MCUXpresso IDE下在线联合调试i.MXRT1170双核工程的三种方法的更多相关文章

  1. 痞子衡嵌入式:MCUXpresso IDE下将应用程序RW段分散链接的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下将应用程序RW段分散链接的几种方法. 早期的 MCU 芯片,一般都会嵌入内部 Flash 和 RAM,并且 ...

  2. 痞子衡嵌入式:大话双核i.MXRT1170之在线联合调试双核工程的三种方法(IAR篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170下在线联合调试双核工程的方法(基于IAR). 前段时间痞子衡写过一篇<双核i.MXRT1170之单独在线调试从 ...

  3. 痞子衡嵌入式:ARM Cortex-M文件那些事(3)- 工程文件(.ewp)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的project文件. 前面两节课里,痞子衡分别给大家介绍了嵌入式开发中的两种典型input文件:源文件(.c/.h/.s). ...

  4. 痞子衡嵌入式:探析开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序问题. 痞子衡之前写了一篇 <在IAR开发环境下为工程开启CRC ...

  5. 痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(2) - 在Flash调试及离线启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1062 TencentOS Tiny EVB_AIoT开发板在Flash调试与离线启动. 腾讯 TencentOS 团队于 ...

  6. 痞子衡嵌入式:嵌入式Cortex-M裸机环境下临界区保护的三种实现

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Cortex-M裸机环境下临界区保护的三种实现. 搞嵌入式玩过 RTOS 的朋友想必都对 OS_ENTER_CRITICAL().OS_ ...

  7. 详解linux下批量替换文件内容的三种方法(perl,sed,shell)

    在建设本网站的时候,发现新建了很多的网页,突然发现,每个文件都需要进行修改一样的内容,一个一个打开很是麻烦,所以,总结了一下如何快速修改一个目录下多个文件进行内容替换.第三种方法用的不多 方法一 使用 ...

  8. 痞子衡嵌入式:MCUXpresso IDE下SDK工程导入与workspace管理机制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下SDK工程导入与workspace管理机制. MCUXpresso IDE是恩智浦软件团队倾注很大心血研发 ...

  9. 痞子衡嵌入式:MCUXpresso IDE下SDK工程在Build配置上与IAR,MDK差异

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下SDK工程在Build配置上与IAR,MDK差异. 恩智浦 SW 团队每个季度都会公布 SDK.Tool ...

  10. 痞子衡嵌入式:超级下载算法RT-UFL v1.0在恩智浦MCUXpresso IDE下的使用

    痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...

随机推荐

  1. gin 使用 jwt

    作用 JWT 的主要作用是方便客戶端與伺服器之間的身份驗證. 使用JWT 可以在不需要每次登入的情況下,在客戶端與伺服器之間安全地傳遞封裝身份信息. 它還可以用於許多其他用途,例如串接多個服務,並將數 ...

  2. Asp.Net 单点登录(SSO)|禁止重复登陆|登录强制下线

    背景: 先上个图,看一下效果: SSO英文全称Single Sign On(单点登录).SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其 ...

  3. react this指向问题

    在JSX事件函数方法中的 this,默认不会绑定 this指向.如果你忘记绑定,当你调用这个函数的时候 this 的值为 undefined.所以使用时一定要绑定好this的指向. 构造方法中绑定 c ...

  4. SpringBoot系列(三)元注解

    元注解,注解的注解,SpringBoot有四个元注解,分别是@Target.@Retention.@Documented.@Inherited.下面就是对元注解的详细讲解和源码展示. @Taget 该 ...

  5. ABC336

    E 数位 dp. 定义 \(dp_{pos,s,t,0/1}\) 为在第 \(pos\) 位,当前数字和是 \(s\),这个数模规定的数字和为 \(t\),是 \(/\) 不是极限的情况数. 于是我们 ...

  6. INFINI Labs 产品更新 | Easysearch 新增分词插件、Gateway 支持邮件发送等功能

    INFINI Labs 产品又更新啦~,本次更新概要如下:Easysearch 新增了分词插件.优化了生命周期管理功能等:Gateway 新增 smtp 过滤器来支持邮件的发送,支持自动跳过因为异常关 ...

  7. 使用spark-sql处理Doris大表关联

    背景 最近项目上有一个需求,需要将两张表(A表和B表)的数据进行关联并回写入其中一张表(A表),两张表都是分区表,但是关联条件不包括分区字段. 分析过程 方案一 最朴素的想法,直接关联执行,全表关联, ...

  8. CUDA程序优化-1.基础介绍

    简介 本合集主要介绍我在开发分布式异构训练框架时的CUDA编程实践和性能优化的相关内容.主要包含以下几个部分: 介绍CUDA的基本概念和架构,帮助读者建立对CUDA的初步认识,包括硬件架构/CUDA基 ...

  9. Android系统启动:1-综述

    Android系统启动:综述 原文:http://gityuan.com/2016/02/01/android-booting/ 基于Android 6.0的源码剖析, Android启动过程概述 概 ...

  10. (转载)linux命令英文缩写的含义(方便记忆)

    linux常用命令的英文单词缩写 命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户rpm:redhat packa ...