1.认识FreeRTOS操作系统
FreeRTOS 是一款流行的开源实时操作系统(RTOS),广泛应用于嵌入式系统领域。它以其小巧的内核、高效的任务调度和丰富的同步机制而闻名,能够在资源受限的嵌入式设备上提供可靠的实时性能。
FreeRTOS 的核心特性
-
多任务处理:FreeRTOS 支持多任务并发执行,每个任务都有自己的优先级,可以根据需要进行调整。
-
任务调度:采用抢占式和时间片轮转的调度策略,确保高优先级任务能够及时执行,同时也允许相同优先级的任务公平共享CPU时间。
-
同步和通信机制:提供信号量、互斥量、事件组和消息队列等机制,方便任务间的同步和数据交换。
-
内存管理:FreeRTOS 提供多种内存管理方案,允许开发者根据应用需求选择最合适的内存分配策略。
-
软件定时器:允许创建定时任务,用于周期性执行或延时操作。
2.移植的软件实现
2.1了解工程结构
这里我构造了一份最基础的工程模板,使用该基础模板实现freertos操作系统的移植,方便各位读者更好的理解freertos的系统该如何实现。
工程目录的框架图如下:
工程图结构图如下:此图是已完成RTOS移植后的工程目录图。
2.2软件移植
2.2.1FreeRTOS的源码获取
方式1:通过官网进行下载:FreeRTOS™ - FreeRTOS™https://www.freertos.org/zh-cn-cmn-s 方式2:博主会移植成功的压缩包给各位读者
在此处给大家一个关于FreeRTOS源码库函数相关的API中文手册,以帮助大家更好的使用FreeRTOS进行项目开发:项目文件预览 - FreeRTOSV9.0.0API中文手册下载:FreeRTOS V9.0.0 API 中文手册下载本仓库提供了一个资源文件的下载,文件名为“FreeRTOS V9.0.0 API 中文手册.pdf” - GitCodehttps://gitcode.com/Open-source-documentation-tutorial/119e0/blob/main/FreeRTOS%20V9.0.0%20API%20%E4%B8%AD%E6%96%87%E6%89%8B%E5%86%8C.pdf
2.2.2了解RTOS源码的文件框架
源码移植只用到了DEMO,Source两个文件夹
这里博主在移植时并没有将这两个文件直接复制,而是将整个rtos的源码放到了对应的工程文件中,在向工程中添加文件时,只添加需要使用到的即可。
2.2.3移植实现
以下内容是rtos操作系统的详细移植步骤:
首先将下图目录中相关的.c文件添加至工程属组中的rtos/
然后将,下图目录中的port.c文件添加至 上图rtos/port属组中,由于N32G457REL7这款MCU是cortex-M4F内核的cpu,由此将ARM_CM4F该文件夹下的port.c添加到上图rtos/port属组中
选择对应的配置文件,并将其添加到工程项目中user的属组下,具体的文件目录如下图:
文件添加完成后,在项目中添加对应文件的头文件路径,具体的只需要添加下方的三个路径即可
完成此步操作后,打开下图所示的文件夹
将此文件中的内容修改为如下图所示的数值
屏蔽此文件中的系统定时器的中断服务函数
再将下图文件中的三个中断服务函数屏蔽,否则会程序会报重复定义中断服务函数的错误
由于操作系统的延时是通过系统定时器的节拍作为心跳,由此需要初始化系统定时器,并开启系统定时器的中断等,具体内容如下图:
到此处再去编译以下工程,会报一个栈溢出的钩子函数未定义的错误,在main中定义此钩子函数即可,具体如下图:
到此再编译工程,工程无报错,具体入下图:
至此,FreeRTOS实时操作系统的移植就已完成
3.验证FreeRTOS的移植
在main中编写如下程序,验证rtos是否移植成功,具体如下图:
程序运行的结果如下图:
由此日志得出,当前程序为,led1任务和led2任务交替运行,但led1的任务优先级又比led2的任务优先级高,所以led的任务会抢占led2,故此有时led1的任务执行两次,led2的任务执行一次。
验证结果:
根据日志得出,FreeRTOS操作系统移植成功.