FreeRTOS | 原理介绍和资源get(第十四天)

点击上方”蓝字”关注我们

01、什么是FreeRTOS?

FreeRTOS | 原理介绍和资源get(第十四天)

02、获取资源

FreeRTOS | 原理介绍和资源get(第十四天)

03、FreeRTOS的特点

FreeRTOS | 原理介绍和资源get(第十四天)

04、为何选择FreeRTOS

FreeRTOS | 原理介绍和资源get(第十四天)

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

05、FreeRTOS代码规范

FreeRTOS | 原理介绍和资源get(第十四天)

06、FreeRTOS代码结构

FreeRTOS | 原理介绍和资源get(第十四天)

FreeRTOS的内核代码文件非常简洁,主要包括以下几个:

croutine.c/croutine.h 协程,适用于8位/16位平台,在32位平台上建议使用任务。

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;

总结

FreeRTOS | 原理介绍和资源get(第十四天)

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

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享