1、前言

本文记录了本人使用Keil V5.28向Cortex M33处理器下的一款MCU进行FreeRTOS V10.2.0的移植操作,过程中描述如存在不当或错误之处欢迎指正。

2、FreeRTOS V10.2.0简介

2.1、关于FreeRTOS 的详细介绍建议直接去官网查看,在这里就不再翻译。官网链接如下:

https://www.freertos.org/

2.2、本文简单描述一下,我对FreeRTOS 系统文件结构的理解,详细如下:

1.1、基础的目录结构(Basic Directory Structure)+---FreeRTOS-Plus   //包含FreeRTOS+的组件及demo例程
|
+---FreeRTOS       //包含FreeRTOS的实时内核代码的源文件及demo例程|+---Demo        //包含demo应用例程|   +---Common //The demo application files that are used by all the demos|+---Dir x  //The demo application build files for port x|+---Dir y    //The demo application build files for port y|+---Source       //包含实时内核源代码|+---include    //FreeRTOS内核代码所需头文件|+---Portable   //Processor specific code|+---Compiler x   //All the ports supported for compiler x|+---Compiler y    //All the ports supported for compiler y|+---MemMang       //The sample heap implementations1.2、FreeRTOS内核代码的核心由三个文件包含+---Source|+---tasks.c     //|+---queue.c     //|+---list.c      //+---Source|+---timer.c      //software timer|+---croutine.c        //co-rountine 功能1.3、FreeRTOS针对每一个处理器架构分别需要一些特定的依赖于架构的代码,这些代码就是RTOS的portable层,这部分代码位于 FreeRTOS/Source/Portable/[compiler]/[architecture] 。|+---[compiler]     //编译器用于创建port|+---[architecture]       //架构就是port代码最终要运行的平台1.4、为了有效管理内存,FreeRTOS也提供了堆(heap)操作相关的代码,此部分代码位于:|+---FreeRTOS/Source/portable/MemMang

2.3 FreeRTOS V10.2.0 pack包的下载

2.3.1、可以使用keil自带的Pack Installer,具体界面如下:

2.3.2、可以再通过如下链接下载:

http://www.keil.com/pack/

https://keilpack.azureedge.net/pack/ARM.CMSIS-FreeRTOS.10.2.0.pack

2.3.3、FreeRTOS V10.2.0的安装

直接双击pack文件包即可。

3、FreeRTOS的移植操作

3.1借助KEIL的RTE(Run-Time Enviroment)安装

(1)创建新的项目;

(2)配置运行时环境(RTE)时加入如下选项;

(3)然后单击确定即可;

(4)

注:上述操作简单,但代码编译时可能会出现一些error或warning需要针对性的处理一下。通常主要是修改FreeRTOSConfig.h文件中的一些宏定义。

(A)如果实际项目中需要使用Timers,即在配置运行环境时加入了Timers选项,那么需要对FreeRTOSConfig.h中的configUSE_TIMERS宏做如下修改:

//[Demon]0-->1 configUSE_TIMERS must be set to 1 to make the xTimerPendFunctionCall() function available.

#define configUSE_TIMERS  1

如果实际项目中不需要使用Timers,那么此宏不需要调整。

(B)另外,针对不同Port再操作是如果使用非安全模式,那么需要对FreeRTOSConfig.h中的configENABLE_TRUSTZONE做如下修改:

#define configENABLE_TRUSTZONE                0//[Demon]1-->0

如果configENABLE_TRUSTZONE定义为1,那么则默认为打开TRUSTZONE功能(关于此功能的详细介绍,可以单独搜索确认)

3.2手动方式移植FreeRTOS V10.2.0

(1)新建项目

(2)配置项目运行时环境时不加入于RTOS相关的选项;

(3)将FreeRTOS V10.2.0下的文件(源文件、头文件)加入到项目中,具体操作如下

(A)加入系统内核源文件(主要是list.c/task.c/queue.c),这些文件在

FreeRTOS 10.2.0\Source目录下

(B)加入内存管理(heap相关)文件,heap1.c ~heap5.c

\FreeRTOS 10.2.0\Source\portable\MemMang 目录下

(C) 加入接口(Port)平台相关文件

\FreeRTOS 10.2.0\Source\portable\GCC\ARM_CM33_NTZ\non_secure

其中ARM_CM33_NTZ中的NTZ表示:No Trust Zone

(D)通常需要加入的源文件主要有:

(E)需要加入的头文件如下

  1. FreeRTOS 10.2.0\Source\portable\GCC\ARM_CM33_NTZ\non_secure

==》portasm.h   and  portmacro.h

2.\FreeRTOS 10.2.0\Config\ARMCM

==》FreeRTOSConfig.h文件

3.FreeRTOS 10.2.0\Source\include

==》文件较多,不再列举

4.\FreeRTOS 10.2.0\CMSIS\RTOS2\FreeRTOS\Include

==》freertos_evr.h文件

(F)挂接中断
      在Cortex-M3硬件下,FreeRTOS使用SysTick作为系统节拍时钟,使用SVC和PendSVC进行上下文切换。异常中断服务代码位于port.c文件中,FreeRTOS的作者已经为各种架构的CPU写好了这些代码,可以直接拿来用,需要用户做的,仅仅是将这些异常中断入口地址挂接到启动代码中。

在startup_ADuCMxxx.s中,使用IMPORT关键字声明要挂接的异常中断服务函数名,然后将:

DCD     SVC_Handler            换成:   DCD     vPortSVCHandler
         DCD     PendSV_Handler         换成:   DCD     xPortPendSVHandler
         DCD     SysTick_Handler        换成:   DCD     xPortSysTickHandler
(G)设置节拍时钟
      这里我们使用SysTick定时器作为系统的节拍时钟,设定每隔10ms产生一次节拍中断。由于FreeRTOS对移植做了非常多的工作,以至于我们只需要在FreeRTOSConfig.h中配置好以下两个宏定义即可:

configCPU_CLOCK_HZ     (/*你的硬件平台CPU系统时钟,Fcclk*/)
configTICK_RATE_HZ       ((portTickType)100)         
      第一个宏定义CPU系统时钟,也就是CPU执行时的频率。第二个宏定义FreeRTOS的时间片频率,这里定义为100,表明RTOS一秒钟可以切换100次任务,也就是每个时间片为10ms。

在prot.c中,函数vPortSetupTimerInterrupt()设置节拍时钟。该函数根据上面的两个宏定义的参数,计算SysTick定时器的重装载数值寄存器,然后设置SysTick定时器的控制及状态寄存器,设置如下:使用内核时钟源、使能中断、使能SysTick定时器。另外,函数vPortSetupTimerInterrupt()由函数vTaskStartScheduler()调用,这个函数用于启动调度器。

4、以上就是FreeRTOS V10.2.0的整个移植过程的简述,后续实际应用中如有此方面的应用,则会对此文章进行更新。

参考链接:https://blog.csdn.net/zhzht19861011/article/details/50072033

Cortex M33处理器下移植FreeRTOS V10.2.0的操作记录相关推荐

  1. STM32系列单片机标准库移植FreeRTOS V10.4.6详解

      文中所用到的资料下载地址 https://download.csdn.net/download/qq_20222919/87370679   最近看正点原子新录制了手把手教你学FreeRTOS的视 ...

  2. FreeRTOS V10.4.0更新了哪些功能?

    前几天,FreeRTOS 从V10.3.1 升级到了 V10.4.0,其中更新并增强了不少内容. FreeRTOS源码Github地址: https://github.com/freertos/fre ...

  3. Win7操作系统下安装Visual C++6.0详细操作手册(亲验有效)

    Win7操作系统下安装Visual C++6.0详细操作手册(亲验有效) 一.所需软件及下载地址: Visual C++6.0(win7适用版) https://download.csdn.net/d ...

  4. STM32F4移植FreeRTOS V10.3.1

                                                                            STM32F429移植FreeRTOS 一.环境 Win ...

  5. 转发:stm32 移植 freertos

    原链接:http://www.51hei.com/bbs/dpj-106526-1.html 看到一篇stm32移植freertos的文章,讲述的最完整. 前言: 由于之前听过太多人抱怨移植FreeR ...

  6. freeRTOS V10.0.1移植到STM32F407标准库 - 环境Keil5

    最近因为工作需要用到FreeRTOS,其实开始本人内心是拒绝的因为自己只学习过UCOSIII还没实际上过什么大又复杂的工程,但是谁让FreeRTOS他是Free的呢公司成本考虑肯定是不会选择USOS的 ...

  7. GD32F303移植FreeRTOS

    GD32F303移植FreeRTOS 一.移植环境 系统:WIN7 MDK:keil v5.26 开发板:GD32F303C-EVAL 固件库:V1.0.2 FreeRTOS版本:V10.4.0 二. ...

  8. GD32F407 移植FreeRTOS+Lwip

    文章目录 移植过程 移植FreeRTOS 源码拷贝 FreeRTOSConfig.h 注意事项 移植LWIP 源码拷贝与编译 初始化 移植过程 freeRTOS V10.4.5 下载 https:// ...

  9. STM32F407霸天虎FreeRTOS学习笔记——移植FreeRTOS到开发板上

    STM32F407霸天虎FreeRTOS学习笔记--移植FreeRTOS到开发板上 FreeRTOS源码获取 移植第一步:创建文件夹 Keil main.c 实验效果 FreeRTOS源码获取 在移植 ...

最新文章

  1. c语言逆序输出字符串指针,菜鸟求助-如何用指针法将一串字符按单词的倒序输出?如:i love yo...
  2. 再深一点:面试工作两不误,源码级理解Spring事务
  3. CMake2:版本号配置与头文件生成
  4. todo文件说明已停止工作_番茄ToDo,一款颜值功能兼备的番茄钟。
  5. 这种个性化可视化图也太可爱了吧!
  6. linux编译安装madam,linux 下 使用 mdadm 创建阵列
  7. spark和HSQL的连接join方式
  8. Secret Passwords CodeForces - 1263D(并查集)
  9. OpenJudge NOI 1.8 25:螺旋加密
  10. 坐标转换计算七参数matlab代码,坐标系转换:已知控制点计算七参数并对数据批量转换...
  11. java万年历算法_寿星万年历---java算法实现
  12. 北京筑龙出席安徽省《电子招标投标办法》修订意见研讨会并发言
  13. oracle全量增量_数据同步:全量与增量
  14. 用SQL来校验证件号码是否合法
  15. 双系统还是虚拟机 linux系统时间,mac装双系统好还是虚拟机好_mac装虚拟机好还是双系统-系统城...
  16. Google Chrome最强鼠标手势插件面世
  17. 《github精选系列》——非常有趣实用的python爬虫例子
  18. 攻克弹唱第七课(如何弹奏neon)
  19. (简单)华为P20 EML-AL00的USB调试模式在哪里打开的步骤
  20. apahce2+tomcat6整合 2010-06-28

热门文章

  1. 如何使用cmake生成除.exe之外的可执行文件如RTX的.rtss文件【每日一个小技巧】
  2. 品牌对比 | 优衣库 VS UR
  3. 淘宝网正式宣布向全球开放淘宝原始数据
  4. 30个RPA常见应用场景解析
  5. 基于Vue2实现的仿手机QQapp(支持对话功能,滑动删除....)—— 聊聊开发过程中踩到的一些坑与解决方案,以及个人感悟...
  6. 编译ffmpeg例程时,报错:undefined reference
  7. 聊聊Pandas的前世今生
  8. MQTT协议之 Apache Apollo服务搭建
  9. ThinkPHP6.0 反序列化漏洞
  10. RK3588,6大亮点、8大应用方向