FreeRTOS源码解析
第一章 FreeRTOS 整体架构
第二章 FreeRTOS 编程规范
第三章 FreeRTOS 内存管理
第四章 FreeRTOS 任务管理
第五章 FreeRTOS 消息队列
第六章 FreeRTOS 软件定时器
第七章 FreeRTOS 信号量
第八章 FreeRTOS 互斥量
第九章 FreeRTOS 任务通知
第十章 FreeRTOS 事件组
FreeRTOS源码解析——第一章 整体架构
- FreeRTOS源码解析
- 前言
- 一、FreeRTOS简介
- 二、FreeRTOS架构框图
- 三、FreeRTOS支持的主要平台
- 四、移植简要说明
- 1、基于stm32f412的移植框图
- 2、增加的代码目录
- 3、测试代码
- 4 、硬件运行结果
- 总结
前言
本章主要介绍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官网
四、移植简要说明
本节主要对FreeRTOS的移植进行一个大概的说明,详细教程可以百度,有很多很好的例程。
1、基于stm32f412的移植框图
2、增加的代码目录
3、测试代码
TaskHandle_t TaskPrintTestHandle = NULL;
void PrintTestTask(void *arg)
{
uint32_t udwPrintTaskCnt = 0;
while(1)
{
udwPrintTaskCnt ++;
log_info("PrintTaskCnt:%d\n",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\n", xReturn);
}
else
{
log_info("Create Task (print_test) Success!\n");
}
vTaskStartScheduler();
}
}
4 、硬件运行结果
FreeRTOS 在Stm32f412上的移植例程,点击跳转下载