一、FreeRTOS源码的下载
1、官网下载
FreeRTOS官方链接
官方下载速度慢,需要翻墙,一般选择第一个
2、直接通过仓库下载
仓库地址链接
同样很慢,甚至打不开网页,也不建议使用这种方法。
3、百度网盘
链接:https://pan.baidu.com/s/1es7_uEmDFgis1sDYENnkBw?pwd=6688
提取码:6688
二、FreeRTOS源码介绍
参考博客:【FreeRTOS】详细目录结构和作用_freertos代码目录结构-CSDN博客
三、FreeRTOS系统移植
参考博客:【FreeRTOS】FreeRTOS移植stm32详细步骤介绍_freertos 202212.01下载-CSDN博客
四、代码
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "FreeRTOS.h"
#include "task.h"
TaskHandle_t task1Handler;
TaskHandle_t task2Handler;
static void task1(void *arg)
{
while(1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
vTaskDelay(500);
GPIO_SetBits(GPIOA, GPIO_Pin_1);
vTaskDelay(500);
}
}
static void task2(void *arg)
{
while(1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_2);
vTaskDelay(1500);
GPIO_SetBits(GPIOA, GPIO_Pin_2);
vTaskDelay(1500);
}
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
xTaskCreate(task1,"task1",512,NULL,2,&task1Handler);
xTaskCreate(task2,"task1",512,NULL,3,&task1Handler);
vTaskStartScheduler();
while (1)
{
}
}
五、测试结果
创建了两个不同频率的LED闪烁任务