注:此条博客仅用于回忆之前所学的移植操作系统的过程,以及消除好久不学习的罪恶感
一. 什么是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所有跟时间相关的事情都在里面处理
创建任务
#include "FreeRTOS.h"
#include "task.h"
#include "bsp_led.h"
static void AppTaskCreate(void);
static TaskHandle_t AppTask_Handle = NULL;
int main(void)
{
BaseType_t xReturn = pdPASS;
BSP_Init();
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);
LED1_OFF;
vTaskDelay(500);
}
}}
三. 具体操作 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上面烧录的,如果其他板子可能晶振不一样要修改时钟频率
|