大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是超级下载算法开发笔记(1)之执行在不同CM内核下

  文接上篇 《RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计》,痞子衡开源的这个项目已经正式启动了。痞子衡说过会记录 RT-UFL 项目开发过程所有疑难点及其解决方法,和大家分享下载算法设计背后的奥秘。

  本篇是开发笔记第一篇,咱们重点聊聊这个项目的立身之本,即如何做到一个.FLM(其实就是最终的可执行机器码)能在所有i.MXRT芯片下均能正常运行。

一、从嵌入式程序角度看i.MXRT家族差异

  因为超级下载算法要运行于所有i.MXRT型号下,首先我们得知道i.MXRT家族一共有哪些型号、这些不同型号间差异是什么,哪些差异是影响超级下载算法的主要因素。

  下表是当前i.MXRT家族已面世的全部9款型号(注:部分型号下不止一款芯片,但仅是内部外设数量差别):

  虽然从芯片本身角度去细看差异会比较多,但我们可以从一个嵌入式程序最根本的三大要素(指令、外设操作、链接空间)来逐一定向分析:

  从上表我们可以看出i.MXRT都是基于ARM Cortex-M内核的,这其实是整个项目立项最重要的基础,它们的指令集一脉相承。不过虽然都是Cortex-M内核,但是涉及到三个内核处理器版本(M4、M7、M33),因此设计超级下载算法时第一要考虑的就是处理器版本差异。

  再从外设角度来看,超级下载算法代码可能涉及操作芯片内部的Clock(时钟)、IOMUXC(引脚)、FlexSPI(Flash控制器)等外设,这些外设会有差异,但并不重要,我们可以为不同i.MXRT型号引入不同代码处理分支。

  最后从链接空间来看,超级下载算法是要加载到内部RAM去执行的,这些i.MXRT内部RAM大小不一,并且在系统映射地址空间中的地址也略有不同,但也不重要,如果你看过痞子衡之前写的文章 《串行NOR Flash下载算法(Keil MDK工具篇) 》,你应该知道下载算法代码都是位置无关链接,其加载地址可以不固定(由配套xml文件或IDE工程设置中额外指定),因此RAM的差异也不重要。

二、解决Cortex-M处理器不同版本指令差异

  经过上一节的分析,我们知道解决超级下载算法在i.MXRT全系列下运行最重要的问题就是处理不同Cortex-M内核指令差异。

  在解决指令差异问题前,有一个重要问题痞子衡不得不澄清,那就是不同Cortex-M芯片其中断向量表序列定义并不同,前16个是系统向量,这是由ARM规定的,但后面的中断向量均是由厂商自定义的。不同芯片型号下,同一类型外设分配的向量号并不一定相同,因此对于一些异构双核下跑的嵌入式程序,需要处理中断向量表差异。但是这对于下载算法来说,不是个问题,因为下载算法不是一般的嵌入式程序,其不含中断向量表,这意味着下载算法中没有使用中断响应函数,不能开启外设中断(这是位置无关链接导致的)。

  好,我们现在来解决指令差异问题。查看ARM官方资料得知,Cortex-M家族共有10款处理器(M0、M0+、M1、M3、M23、M4、M33、M35P、M7、M55),分属四个架构规范(ARMv6-M、ARMv7-M、ARMv8-M、ARMv8.1-M),架构主要和指令集息息相关。

  再来看两张Cortex-M指令集关系图,从图里我们可以看出Cortex-M0/M0+/M1处理器基于ARMv6-M架构,这是一个只支持56条指令的小指令集(蓝色粗框标出),所有Cortex-M处理器都支持这个56条指令的指令集。

  看到这你是不是有所领悟?ARM公司其实为了能让Cortex-M用户的软件能重用,特地在设计Cortex-M处理器时为其赋予了处理器向下兼容、软件二进制向上兼容特性。通俗地说就是在较低版本Cortex-M处理器上编译出来的机器码可以在较高版本Cortex-M处理器上直接执行。

  因此为了实现超级下载算法在i.MXRT全系列上(M4、M7、M33)运行,我们只需要做一件事,那就是编译生成算法文件的源MDK工程设置里选择Cortex-M0处理器就行,是不是超级简单?如果你下载了CMSIS_5包,里面的下载算法模板工程默认处理器就是ARMCM0,这并不只是个偶然!

  至此,超级下载算法开发笔记(1)之执行在不同CM内核下痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

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

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

痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(1) - 执行在不同CM内核下的更多相关文章

  1. 痞子衡嵌入式:恩智浦LPC系列MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是恩智浦LPC系列微控制器相关知识. 恩智浦半导体最早于2003年便开始推出LPC系列MCU,但早期的产品LPC2000/3000系列属 ...

  2. 痞子衡嵌入式:超级下载算法RT-UFL v1.0发布,附J-Link下安装教程

    痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> 历时 8 个月终于迎来了 v1.0 版发布,因为是第一个正式版,为了保证质 ...

  3. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(2) - 识别当前i.MXRT型号

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(2)之识别当前i.MXRT型号. 文接上篇 <超级下载算法(RT-UFL)开发笔记(1) - 执行在不同CM ...

  4. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash X ...

  5. 痞子衡嵌入式:RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的开源项目 RT-UFL. 痞子衡在近两年多的i.MXRT客户项目支持过程中,遇到的一个相当高频的问题就是制作i.MXRT下载算法.我们 ...

  6. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(3) - 统一FlexSPI驱动访问

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(3)之统一FlexSPI驱动访问. 文接上篇 <超级下载算法(RT-UFL)开发笔记(2) - 识别当前i. ...

  7. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(4) - 轮询Flash配置参数

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(4)之轮询Flash配置参数. 文接上篇 <超级下载算法(RT-UFL)开发笔记(3) - 统一FlexSP ...

  8. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记番外(1) - JLinkScript妙用

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记番外篇之JLinkScript妙用. JLinkScript 文件是配套 J-Link 调试器使用的脚本,这个脚本适 ...

  9. 痞子衡嵌入式:轻松为i.MXRT设计更新Segger J-Link Flash下载算法文件

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是为i.MXRT设计更新Segger J-Link Flash下载算法文件. 想要在Flash中调试,基本是离不开Flash下载算法的,毕 ...

随机推荐

  1. 原创 C++应用程序在Windows下的编译、链接:第三部分 静态链接(二)

    3.5.2动态链接库的创建 3.5.2.1动态链接库的创建流程 动态链接库的创建流程如下图所示: 在系统设计阶段,主要的设计内容包括:类结构的设计以及功能类之间的关系,动态链接库的接口.在动态链接库中 ...

  2. python ftplib,smtplib,poplib学习

    一.ftplib from ftplib import FTP ftpobj = FTP(IP或域名)     #实例化对象 ftpobj.login('username','passwd')  ## ...

  3. set集合_变长

    //set可变集合 //便利初始化函数分配大小 NSMutableSet *mutableSet1 = [[NSMutableSet alloc] initWithCapacity:3]; NSMut ...

  4. HW3.1

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  5. 线段树+dp+贪心 Codeforces Round #353 (Div. 2) E

    http://codeforces.com/contest/675/problem/E 题目大意:有n个车站,每个车站只能买一张票,这张票能从i+1到a[i].定义p[i][j]为从i到j所需要买的最 ...

  6. Memcache缓存

    memcache 是服务器缓存系统,以键值对方式保存数据到内存中,把对象序列化后,理论上可支持所有的数据类型.使用情景:怎么用都可以,注意的是它只把数据保存到内存中,重启memcache 服务后丢失, ...

  7. Android AutoCompleteTextView和MultiAutocompleteTextView实现动态自动匹配输入的内容

    AutoCompleteTextView MultiAutocompleteTextView 这两个控件长的很相似,功能也很相似. AutoCompleteTextView 功能: 动态匹配输入的内容 ...

  8. 【RF库XML测试】Element Attribute Should Be

    Name:Element Attribute Should BeSource:XML <test library>Arguments:[ source | name | expected ...

  9. Velocity学习4

    Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloci ...

  10. WPF WebBrowser+TabControl MVVM模式 简单应用 提供源码下载

    源代码下载 这个程序是TabControl和Webbrowser的练手小程序 可达到练手目的有: MVVM设计模式的基本使用 Binding(包括相对源[RelativeSource]绑定)的基本使用 ...