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 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)需要加入的头文件如下
- 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的操作记录相关推荐
- STM32系列单片机标准库移植FreeRTOS V10.4.6详解
文中所用到的资料下载地址 https://download.csdn.net/download/qq_20222919/87370679 最近看正点原子新录制了手把手教你学FreeRTOS的视 ...
- FreeRTOS V10.4.0更新了哪些功能?
前几天,FreeRTOS 从V10.3.1 升级到了 V10.4.0,其中更新并增强了不少内容. FreeRTOS源码Github地址: https://github.com/freertos/fre ...
- Win7操作系统下安装Visual C++6.0详细操作手册(亲验有效)
Win7操作系统下安装Visual C++6.0详细操作手册(亲验有效) 一.所需软件及下载地址: Visual C++6.0(win7适用版) https://download.csdn.net/d ...
- STM32F4移植FreeRTOS V10.3.1
STM32F429移植FreeRTOS 一.环境 Win ...
- 转发:stm32 移植 freertos
原链接:http://www.51hei.com/bbs/dpj-106526-1.html 看到一篇stm32移植freertos的文章,讲述的最完整. 前言: 由于之前听过太多人抱怨移植FreeR ...
- freeRTOS V10.0.1移植到STM32F407标准库 - 环境Keil5
最近因为工作需要用到FreeRTOS,其实开始本人内心是拒绝的因为自己只学习过UCOSIII还没实际上过什么大又复杂的工程,但是谁让FreeRTOS他是Free的呢公司成本考虑肯定是不会选择USOS的 ...
- GD32F303移植FreeRTOS
GD32F303移植FreeRTOS 一.移植环境 系统:WIN7 MDK:keil v5.26 开发板:GD32F303C-EVAL 固件库:V1.0.2 FreeRTOS版本:V10.4.0 二. ...
- GD32F407 移植FreeRTOS+Lwip
文章目录 移植过程 移植FreeRTOS 源码拷贝 FreeRTOSConfig.h 注意事项 移植LWIP 源码拷贝与编译 初始化 移植过程 freeRTOS V10.4.5 下载 https:// ...
- STM32F407霸天虎FreeRTOS学习笔记——移植FreeRTOS到开发板上
STM32F407霸天虎FreeRTOS学习笔记--移植FreeRTOS到开发板上 FreeRTOS源码获取 移植第一步:创建文件夹 Keil main.c 实验效果 FreeRTOS源码获取 在移植 ...
最新文章
- c语言逆序输出字符串指针,菜鸟求助-如何用指针法将一串字符按单词的倒序输出?如:i love yo...
- 再深一点:面试工作两不误,源码级理解Spring事务
- CMake2:版本号配置与头文件生成
- todo文件说明已停止工作_番茄ToDo,一款颜值功能兼备的番茄钟。
- 这种个性化可视化图也太可爱了吧!
- linux编译安装madam,linux 下 使用 mdadm 创建阵列
- spark和HSQL的连接join方式
- Secret Passwords CodeForces - 1263D(并查集)
- OpenJudge NOI 1.8 25:螺旋加密
- 坐标转换计算七参数matlab代码,坐标系转换:已知控制点计算七参数并对数据批量转换...
- java万年历算法_寿星万年历---java算法实现
- 北京筑龙出席安徽省《电子招标投标办法》修订意见研讨会并发言
- oracle全量增量_数据同步:全量与增量
- 用SQL来校验证件号码是否合法
- 双系统还是虚拟机 linux系统时间,mac装双系统好还是虚拟机好_mac装虚拟机好还是双系统-系统城...
- Google Chrome最强鼠标手势插件面世
- 《github精选系列》——非常有趣实用的python爬虫例子
- 攻克弹唱第七课(如何弹奏neon)
- (简单)华为P20 EML-AL00的USB调试模式在哪里打开的步骤
- apahce2+tomcat6整合 2010-06-28
热门文章
- 如何使用cmake生成除.exe之外的可执行文件如RTX的.rtss文件【每日一个小技巧】
- 品牌对比 | 优衣库 VS UR
- 淘宝网正式宣布向全球开放淘宝原始数据
- 30个RPA常见应用场景解析
- 基于Vue2实现的仿手机QQapp(支持对话功能,滑动删除....)—— 聊聊开发过程中踩到的一些坑与解决方案,以及个人感悟...
- 编译ffmpeg例程时,报错:undefined reference
- 聊聊Pandas的前世今生
- MQTT协议之 Apache Apollo服务搭建
- ThinkPHP6.0 反序列化漏洞
- RK3588,6大亮点、8大应用方向