注:此条博客仅用于回忆之前所学的移植操作系统的过程,以及消除好久不学习的罪恶感
一. 什么是FreeRTOS
首先理解操作系统的概念,就像鸿蒙操作系统应用于华为,IOS系统用于苹果一样,操作系统是一种基于CPU的可操作的软件系统。
而FreeRTOS就是一种在X86,Xilinx,Altera等硬件平台的系统,而我们在stm32上面玩,就像是在安卓手机上面玩安卓一样。
作为一个轻量级的系统,FreeRTOS提供的功能包括任务管理、时间管理、信号量、消息队列、内存管理、功能记录等。
二. 为什么要学习FreeRTOS
- 我学FreeRTOS只是想给最后的32一个终结,32的操作系统学完差不多就可以结束了,后面就做做东西熟练一下就可以了,接下来可能会更新FPGA(虽然学了很久没明白但我要死磕到底)和一些linux(学硬件必备)的博客了
- 再来说为什么学这个,因为它开源且简单,一个又简单又开源的东西,只要你找到资源,那肯定是要学习一下的,而且你学单片机只会裸机开发,那你学个P呀,而且学完这个RTOS的操作系统,其他也一通百通了
重点来了
基于stm32的FreeRTOS移植全过程
链接: https://pan.baidu.com/s/1To7ii6Zvgdio7acQSC69kw
提取码: zmvg
以上是FreeRTOS以及移植好的标本资源源码包
当然,你也可以从官网上找http://www.freertos.org/
里面包含Demo例程和内核源码
source文件夹里面就是我们需要移植的freertos内核源码
// 修改stm32f10x_it.c
SysTick中断服务函数,FreeRTOS所有跟时间相关的事情都在里面处理
创建任务
/* FreeRTOS头文件 */
#include "FreeRTOS.h"
#include "task.h"
/* 开发板硬件bsp头文件 */
#include "bsp_led.h"
static void AppTaskCreate(void);/* AppTask任务 */
/* 创建任务句柄 */
static TaskHandle_t AppTask_Handle = NULL;
int main(void)
{
BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
/* 开发板硬件初始化 */
BSP_Init();
/* 创建AppTaskCreate任务 */
xReturn = xTaskCreate((TaskFunction_t )AppTask, /* 任务入口函数 */
(const char* )"AppTask",/* 任务名字 */
(uint16_t )512, /* 任务栈大小 */
(void* )NULL,/* 任务入口函数参数 */
(UBaseType_t )1, /* 任务的优先级 */
(TaskHandle_t* )&AppTask_Handle);/* 任务控制块指针 */
/* 启动任务调度 */
if(pdPASS == xReturn)
vTaskStartScheduler(); /* 启动任务,开启调度 */
else
return -1;
while(1); /* 正常不会执行到这里 */
}
static void AppTask(void* parameter)
{
while (1)
{
LED1_ON;
vTaskDelay(500); /* 延时500个tick */
LED1_OFF;
vTaskDelay(500); /* 延时500个tick */
}
}}
三. 具体操作
1.
打开FreeRTOSv202107文件里面的FreeRTOS
Demo文件夹是例程代码
这个我们之后会用到
license 是一个文件说明
sourece文件夹里面的文件很重要,我们之后会用到,后面细说
test 文本
打开固件库版本
链接: https://pan.baidu.com/s/1KDyEV6D27z8JX2ecLUghkw 提取码: x1b7
直接操作
添加FreeRTOS文件夹
将source里面的源码放在RTOS文件夹里面
然后在portable文件夹里面保留keil、MemMang、和RVDS,其他删除
(也可以直接看pdf文件)
链接: https://pan.baidu.com/s/1ZelDElRl9-CbRbQxPlafRQ 提取码: 3x9p
记得把SYSTEM文件夹里面的delay,sys,usart移植到文件夹里面,没有就创建
在基础工程中新建分组 FreeRTOS_CODE 和FreeRTOS_PORTABLE,并且添加 .c文件,添加头文件.h的路径
打开固件库文件
点击添加文件
从demo中复制 FreeRTOSConfig.h 文件
移植SYSTEM文件,里面包括sys.c usar.c delay.c
port.c文件在RVDS里面找(根据自己的内核选,我用的是M3的内核)
如这般添加文件
记得修改后添加头文件(有.c必有.h)
把这个文件放在FreeRTOS的include 文件夹里面
然后运行一下keil文件,看有没有问题,有问题一定是配置文件有问题,自己百度
下面开始点灯(点灯基操)
把上面网盘的FreeRTOS里面的文件夹打开,然后把mian函数里面的内容复制到固件库模板里面
然后运行
我是在stm32c8t6上面烧录的,如果其他板子可能晶振不一样要修改时钟频率