点击上方"蓝字"关注我们
01、什么是FreeRTOS?

02、获取资源

03、FreeRTOS的特点

04、为何选择FreeRTOS

FreeRTOS的文档非常全面,官方网站上提供了所有需要的资料。FreeRTOS是免费且开源的,可以免费用于商业产品。开源特性使学习操作系统原理、掌握FreeRTOS运行机制以及对操作系统进行深度裁剪以适应硬件变得更加容易。2017年底,FreeRTOS的作者加入亚马逊,担任首席工程师,FreeRTOS也由亚马逊管理。用户许可证进行了修改,使FreeRTOS更加开放和自由。依靠亚马逊的支持,FreeRTOS的未来发展将更加稳定可靠。此外,以前价格昂贵的《实时内核指南》和《参考手册》现在也免费开放下载,这使得学习更加便捷。
05、FreeRTOS代码规范

06、FreeRTOS代码结构

FreeRTOS的内核代码文件非常简洁,主要包括以下几个:
事件组的实现
heap_x.c
内核堆实现,FreeRTOS提供了heap_1.c ~ heap_5.c 5种堆管理器,各有优缺点,需要根据应用进行选择。
list.c/list.h
链表实现,为调度器提供数据结构算法支持服务,如任务链表。
port.c/portmacro.h
硬件相关层级可移植抽象,包括SysTick中断、上下文切换、中断管理,具体实现依赖于平台(单片机体系硬件内核和编译器工具集),通常使用汇编语言实现。
queue.c/queue.h/semphr.h
信号量、互斥体的实现
tasks.c/task.h
任务管理器的实现
timers.c/timers.h
软件定时器的实现
FreeRTOS.h
选编译配置文件,用于汇总所有源文件的编译选择控制
FreeRTOSConfig.h
FreeRTOS内核配置,包括Tick时钟和irq中断配置
07、FreeRTOS代码规范
代码语言:javascript
代码运行次数:0
运行 复制// x表示portBASE_TYPE, u表示无符号型 PRIVILEGED_DATA static volatile TickType_t xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;PRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority = tskIDLE_PRIORITY;
// 例如在list.h中 struct xLIST_ITEM{ configLIST_VOLATILE TickType_t xItemValue; struct xLIST_ITEM configLIST_VOLATILE pxNext; struct xLIST_ITEM configLIST_VOLATILE pxPrevious; void pvOwner; // 指针以p打头 struct xLIST configLIST_VOLATILE pxContainer; };
// 对于C语言的基本数据类型,进行了可移植的定义:
define portCHAR char
define portFLOAT float
define portDOUBLE double
define portLONG long
define portSHORT short
define portSTACK_TYPE uint32_t
define portBASE_TYPE long
代码语言:javascript
代码运行次数:0
运行复制// ux表示无符号portBASE_TYPE返回值 // List表示该函数所属文件 // Remove函数名 UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION;// 例如prv表示模块内函数 static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty ) PRIVILEGED_FUNCTION;
总结

本节内容获取链接:https://www.php.cn/link/df03af942339bf722676fd2f752f2a1f 提取码:a2v3 -- 来自百度网盘超级会员V1的分享










