FreeRTOS源码解析——第一章 整体架构
FreeRTOS源码解析
第四章 FreeRTOS 任务管理 第五章 FreeRTOS 消息队列 第六章 FreeRTOS 软件定时器 第七章 FreeRTOS 信号量 第八章 FreeRTOS 互斥量 第九章 FreeRTOS 任务通知 第十章 FreeRTOS 事件组
前言
本章主要介绍FreeRTOS的整体框架,给出一个简要的移植示例,文末有示例下载链接。
一、FreeRTOS简介
FreeRTOS是在微控制器上使用的具有市场领先的实时操作系统,与世界领先的芯片公司合作开发了18年,目前每170秒就会被下载一次。FreeRTOS在MIT开源许可下进行免费分发和使用:包括一个内核和一个不断增长和丰富的IOT库,可以适用于所有的行业。FreeRTOS主打的是可靠性和易用性。 备注:翻译于FreeRTOS官网
二、FreeRTOS架构框图
FreeRTOS支持市面上的多种芯片架构,如Cortex-M 、Cortex-R 、Cortex-A、RISC-V等,可以通过官方提供的Demo快速完成移植。 除基础内核外,FreeRTOS包含了丰富的组件和第三方库,还有专门应用于物联网的AWS版本等。主要包含以下组成部分:
-
基础内核:包括不可裁剪的最小内核和可裁剪模块。最小内核包含任务管理、内存管理、中断管理、异常管理和系统时钟。可裁剪模块包括队列、信号量、互斥量、软件定时器、任务通知、事件组。 内核增强:在内核基础功能之上,进一步提供增强功能,包括低功耗模式、cpu的使用率、Trace事件跟踪、TCP/IP、CLI、POSIX等。 协议:提供的一系列独立于FreeRTOS内核的库,只和标准C库相关。比如MQTT、JSON、HTTP等 第三方组件:一般和具体应用场景相关的组件或者第三方提供的组件,比如GUI、为 AWS IoT 特定的增值云服务等。
本系列文章集中在基础内核的各个模块。
三、FreeRTOS支持的主要平台
四、移植简要说明
本节主要对FreeRTOS的移植进行一个大概的说明,详细教程可以百度,有很多很好的例程。
1、基于stm32f412的移植框图
2、增加的代码目录
3、测试代码
TaskHandle_t TaskPrintTestHandle = NULL;
void PrintTestTask(void *arg)
{
uint32_t udwPrintTaskCnt = 0;
while(1)
{
udwPrintTaskCnt ++;
log_info("PrintTaskCnt:%d
",udwPrintTaskCnt);
vTaskDelay(1000);
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
while (1)
{
BaseType_t xReturn = xTaskCreate( PrintTestTask, "print_test", 128, NULL, 1, &TaskPrintTestHandle ) ;
if (TaskPrintTestHandle == NULL)
{
log_info("Create Task (print_test) Fail, reason:%ld
", xReturn);
}
else
{
log_info("Create Task (print_test) Success!
");
}
vTaskStartScheduler();
}
}
