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

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 implementations
			
			
1.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

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只特立独行的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值