前言

FreeRTOS是一款 “开源免费”的实时操作系统,遵循的是 GPLv2+的许可协议,由美国的 Richard Barry 于 2003 年发布,Richard Barry 是FreeRTOS 的拥有 者和维护者,在过去的十多年中FreeRTOS历经了 9 个版本,与众多半导体厂商合作密切, 累计开发者数百万,是目前市场占有率最高的 RTOS。
FreeRTOS于 2018 年被亚马逊收购,改名为 AWS FreeRTOS,版本号升级为 V10,且 开源协议也由原来的 GPLv2+修改为 MIT,与 GPLv2+相比,MIT 更加开放,你完全可以理解为是为所欲为的免费。V9 以前的版本还是维持原样,V10 版本相比于 V9 就是加入了一 些物联网相关的组件,内核基本不变。亚马逊收购FreeRTOS也是为了进军眼下炒的火热 的物联网和人工智能。


一、从官网下载最新版的FreeRTOS源码

官方最新源码的下载地址
本人目前使用的版本是v9.0.0, FreeRTOS源码在解压目录下的路径为FreeRTOS_V9.0.0rc2\FreeRTOS\Source

二、MDK下移植FreeRTOS

由于我使用的是野火的指南者F103,给了配套的代码这些。所以不用那么麻烦,我们直接打开。
在这里插入图片描述

在这里插入图片描述

1.修改程序

由于给的代码是执行2个点灯任务,所以我们需要在上面的基础上修改增加。
我们只需呀修改main.c就好了。
修改如下:

1、修改增加任务句柄

 /* 创建任务句柄 */
static TaskHandle_t AppTaskCreate_Handle = NULL;
/* LED1任务句柄 */
static TaskHandle_t LED1_Task_Handle = NULL;
/* PRINT任务句柄 */
static TaskHandle_t PRINT_Task_Handle = NULL;
/* AHT20任务句柄 */
static TaskHandle_t AHT20_Task_Handle = NULL;

2、修改增加任务

static void AppTaskCreate(void);/* 用于创建任务 */

static void LED1_Task(void* pvParameters);/* LED1_Task任务实现 */
static void PRINT_Task(void* pvParameters);/* PRIN_Task任务实现 */
static void AHT20_Task(void* pvParameters);/* AHT20_Task任务实现 */
static void BSP_Init(void);/* 用于初始化板载相关资源 */

3、修改创建任务

static void AppTaskCreate(void)
{
  BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
  
  taskENTER_CRITICAL();           //进入临界区
  
  /* 创建LED_Task任务 */
  xReturn = xTaskCreate((TaskFunction_t )LED1_Task, /* 任务入口函数 */
                        (const char*    )"LED1_Task",/* 任务名字 */
                        (uint16_t       )512,   /* 任务栈大小 */
                        (void*          )NULL,	/* 任务入口函数参数 */
                        (UBaseType_t    )2,	    /* 任务的优先级 */
                        (TaskHandle_t*  )&LED1_Task_Handle);/* 任务控制块指针 */
  if(pdPASS == xReturn)
    printf("创建LED1_Task任务成功!\r\n");
  
	/* 创建PRINT_Task任务 */
  xReturn = xTaskCreate((TaskFunction_t )PRINT_Task, /* 任务入口函数 */
                        (const char*    )"PRINT_Task",/* 任务名字 */
                        (uint16_t       )512,   /* 任务栈大小 */
                        (void*          )NULL,	/* 任务入口函数参数 */
                        (UBaseType_t    )3,	    /* 任务的优先级 */
                        (TaskHandle_t*  )&PRINT_Task_Handle);/* 任务控制块指针 */
  if(pdPASS == xReturn)
    printf("创建PRINT_Task任务成功!\r\n");
  
  	/* 创建AHT20_Task任务 */
  xReturn = xTaskCreate((TaskFunction_t )AHT20_Task, /* 任务入口函数 */
                        (const char*    )"AHT20_Task",/* 任务名字 */
                        (uint16_t       )512,   /* 任务栈大小 */
                        (void*          )NULL,	/* 任务入口函数参数 */
                        (UBaseType_t    )4,	    /* 任务的优先级 */
                        (TaskHandle_t*  )&PRINT_Task_Handle);/* 任务控制块指针 */
  if(pdPASS == xReturn)
    printf("创建AHT20_Task任务成功!\r\n");
  
  vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
  
  taskEXIT_CRITICAL();

4、修改和增加任务函数

static void PRINT_Task(void* parameter)
{	
    while (1)
    {
        vTaskDelay(2000);   /* 延时2000个tick */
        printf("helloworld!\r\n");
        
    }
}
/***********************************************************************/
static void AHT20_Task(void* parameter)
{	
    while (1)
    {
        vTaskDelay(5000);   /* 延时5000个tick */
		printf("目前只是框架!\r\n");
        
    }
}

三、烧录程序

1、keil设置

在这里插入图片描述

2、编译,创建hex文件

在这里插入图片描述

3、打开野火的mcusip软件

用usb线接上stm32开发板后。
在这里插入图片描述

四、查看执行结果

在这里插入图片描述

这就完美执行好了,芜湖!!!!!!

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐