微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于NXP iMX7 ARM处理器部署FreeRTOS实时操作系统

基于NXP iMX7 ARM处理器部署FreeRTOS实时操作系统

时间:08-15 来源:互联网 点击:

  1). 简介

FreeRTOS是广泛使用的开源实时操作系统, 被众多芯片厂商包括NXP所支持, 本文就展示在NXP iMX7 ARM处理器上面的M4核心上面部署FreeRTOS.

NXP iMX7 ARM处理器是NXP最新推出的异构双核处理器, 主核心为单核或者双核Cortex-A7,通常运行Linux/WinCE操作系统来作为嵌入式应用主程序界面环境; 副核心为Cortex-M4, 通常运行实时操作系统来为嵌入式应用提供高效可靠的实时应用处理. 一个简略的iMX7芯片框图如下所示.

由上图可见, 多种类型的内存可供使用, 包括M4专属的内存空间 (Tightly Coupled Memory, TCM), 虽然很小但是CPU可以无延迟访问; 多个OCRAM区域 (On-Chip RAM, 通常是SRAM), 同样访问非常快而且提供相对大的容量; 最后就是DRR3主内存空间. 出于性能考虑, 请尽可能优先使用片内内存资源.

另外, M4有两个总线连接到AXI/AHB interconnect, 一个负责数据传输,另一个负责指令传输, 因此为了最好的性能优化, 我们需要将数据放置与连接数据总线的区域,而指令代码放置与连接指令总线的区域. 例如, 对于TCM,则放置代码于TCML空间, 而放置数据于TCMU空间.

然后关于Resource Domain Controller (RDC), 对于iMX7,由于Cortex-A7和Cortex-M4核心内存和外设的访问都是共享且平等的,为了保证不产生资源冲突,通过这个控制器来从硬件层面对指定内存和外设的访问权限进行保护. RDC 允许定义最多4个resource domains, 并将不同的内存和外设资源指定到这些resource domain中. 默认情况下, A7核心和相关外设被指定于domain 0, 当FreeRTOS firmware运行后, M4核心以及相关外设最初也是domain 0, 但马上被重新指定到domain 1. 因此如果一个外设需要被M4使用, 但同时A7 Linux kernel也使用了, 就需要修改A7 Linux Device Tree来禁止这个外设 (详细操作方法请见这里).

本文就基于Toradex Colibri iMX7 (基于NXP iMX7 SoC) ARM计算机模块搭配Colibri Eva Board开发板来演示编译和部署FreeRTOS应用. 区别与传统的MCU处理器, firmware通常从内置的NOR Flash加载, Colibri iMX7则并没有这样的配置, 而是将firmware存放于外部存储设备中如SD卡或者模块上的Nand Flash, 同时这些存储并不是“memory mapped”, 因此CPU无法直接执行存储在这里的firmware, 而是要先被加载到内存区域后才能被执行.

对于Colibri iMX7, 系统总是由Cortex-A7核心来启动, 先执行内部boot ROM后启动如U-boot这样的boot loader,然后由boot loader从上述的存储设备加载firmware到内存,最后在触发Cortex-M4核心去执行这个firmware. 而如果需要更新或者替换firmware,只需要更改存储设备上面的firmware镜像即可.

  2). 准备

a). 硬件准备

./ Colibri iMX7计算机模块和Colibri Eva Board开发板

./ Ubuntu Linux开发主机

b). 软件准备

./ iMX7模块Cortex-A7核心运行Toradex Embedded Linux release V2.6 Beta2

./ Ubuntu Linux开发主机

FreeRTOS source code

交叉编译ToolChain - Linaro ARM Embedded, 4.9 2015-Q3 update - 从这里下载

  3). 配置

a). 下载FreeRTOS for Colibri iMX7

------------------------

$ git clone -b master-1.0.1 git://git.toradex.com/freertos-toradex.git freertos-colibri-imx7/

$ cd freertos-colibri-imx7/

------------------------

b). 解压缩交叉编译工具

------------------------

$ tar xjf gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2

//如果开发主机是Ubuntu 64bit 操作系统,则需要安装下面32bit支持包

$ sudo dpkg --add-architecture i386

$ sudo apt-get update

$ sudo apt-get install libc6:i386 libncurses5:i386

//测试gcc运行

$ cd .../gcc-arm-none-eabi-4_9-2015q3/bin/

$./arm-none-eabi-gcc --version

//安装 make 和 Cmake 工具

$ sudo apt-get install make cmake

------------------------

4). 编译FreeRTOS

FreeRTOS 的 examples 目录下提供了诸多例程,在编译前需要先设置叉编译工具路径的环境变量ARMGCC_DIR,然后运行armgcc子目录下准备好的编译脚本即可进行编译.

------------------------

$ export ARMGCC_DIR=.../gcc-arm-none-eabi-4_9-2015q3/

$ cd .../freertos-colibri-imx7/examples/imx7_colibri_m4/demo_apps/hello_world/armgcc

$ ./build_all.sh

------------------------

编译好的可执行文件位于armgcc下的release和debug子目录下, 可以加载到M4核心上面运行了.

5). 在M4核心上面运行Firmware

a). M4的固件程序在Colib

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top