点击上方”蓝字”关注我们
01、什么是FreeRTOS?
02、获取资源
03、FreeRTOS的特点
04、为何选择FreeRTOS
FreeRTOS的文档非常全面,官方网站上提供了所有需要的资料。FreeRTOS是免费且开源的,可以免费用于商业产品。开源特性使学习操作系统原理、掌握FreeRTOS运行机制以及对操作系统进行深度裁剪以适应硬件变得更加容易。2017年底,FreeRTOS的作者加入亚马逊,担任首席工程师,FreeRTOS也由亚马逊管理。用户许可证进行了修改,使FreeRTOS更加开放和自由。依靠亚马逊的支持,FreeRTOS的未来发展将更加稳定可靠。此外,以前价格昂贵的《实时内核指南》和《参考手册》现在也免费开放下载,这使得学习更加便捷。
05、FreeRTOS代码规范
06、FreeRTOS代码结构
FreeRTOS的内核代码文件非常简洁,主要包括以下几个:
event_groups.c / event_groups.h
事件组的实现
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; <p>PRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority = tskIDLE_PRIORITY; </p><p>// 例如在list.h中 struct xLIST_ITEM{ configLIST_VOLATILE TickType_t xItemValue; struct xLIST_ITEM <em> configLIST_VOLATILE pxNext; struct xLIST_ITEM </em> configLIST_VOLATILE pxPrevious; void <em> pvOwner; // 指针以p打头 struct xLIST </em> configLIST_VOLATILE pxContainer; };</p><p>// 对于c语言的基本数据类型,进行了可移植的定义:</p><h1>define portCHAR char</h1><h1>define portFLOAT float</h1><h1>define portDOUBLE double</h1><h1>define portLONG long</h1><h1>define portSHORT short</h1><h1>define portSTACK_TYPE uint32_t</h1><h1>define portBASE_TYPE long
代码语言:javascript
代码运行次数:0
运行复制
// ux表示无符号portBASE_TYPE返回值 // List表示该函数所属文件 // Remove函数名 UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION; <p>// 例如prv表示模块内函数 static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty ) PRIVILEGED_FUNCTION;
总结
本节内容获取链接:https://www.php.cn/link/df03af942339bf722676fd2f752f2a1f 提取码:a2v3 — 来自百度网盘超级会员V1的分享