没有合适的资源?快使用搜索试试~ 我知道了~
首页FreeRTOS入门与移植详解:开源免费RTOS教程
FreeRTOS操作详细系统教程是一份全面的嵌入式开发指南,旨在帮助开发者理解和利用FreeRTOS这个开源免费的实时操作系统。该教程首先强调了FreeRTOS的优势,包括其开源性质使得商业使用无需公开源代码且不存在版权问题,全球嵌入式市场中FreeRTOS的高使用率,特别是在2013、2014和2015年连续三年占据小型嵌入式操作系统市场份额的前茅。移植FreeRTOS相对简单,只需少量的源码调整和三个宏定义,使得新手也能快速上手。 教程的结构严谨,从第1章开始,探讨了FreeRTOS移植的易用性和其在实时操作系统市场的流行度。官方提供的丰富文档和API示例有助于新用户快速掌握基础知识。此外,官方还发布了FreeRTOS-FAT文件系统和FreeRTOS-TCP网络协议栈,进一步扩展了FreeRTOS的功能。 第2章深入介绍了嵌入式实时操作系统的概念,包括嵌入式系统的基础,如时间触发系统,以及当前流行的解决方案,如STM32嵌入式实时操作系统。作者推荐了一些入门资源,比如邵贝贝老师的《嵌入式实时操作系统uCOS-II》和embOS用户手册,以便于读者对相关概念有更深入的理解。 在本教程中,嵌入式系统被定义为能迅速处理外界事件和数据,并在规定时间内给出结果的系统。尽管没有统一的定义,但教程提供了几种常见的理解角度。通过这份教程,无论是初学者还是经验丰富的开发人员都能找到适合自己的学习路径,进行FreeRTOS的高效开发和应用。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/10043369/bg10.jpg)
图 4.2 合作的 IC 厂商 Logo
Real Time Enginerrs Ltd
这家公司的介绍可以在这里查看:http://www.freertos.org/RTOS-contact-and-support.html
FreeRTOS 的创建者
FreeRTOS 项目是由 Richard Barry 创建的,Rcichard Barry 毕业的时候获得了实时系统方面的一等荣誉。他同
时直接参与了多家公司的创业,主要工作是工业自动化,航空航天和仿真。现在他是 Reel Time Enginerrs Ltd
的董事以及 FreeRTOS 项目的拥有者和维护者。
4.1.1 FreeRTOS 的特点
FreeRTOS 的主要特点如下:
1. 支持抢占式调度,合作式调度和时间片调度。
2. SafeRTOS 作为 FreeRTOS 的衍生品大大提高了 FreeRTOS 在代码完整性方面的信心。
3. 用于低功耗的 Tickless 模式。
4. 支持 35 种系统架构。
5. FreeRTOS-MPU 支持 M3/M4/M7 内核的 MPU(内存保护单元)。
6. 设计的简单易用,典型的内核使用大小在 4k-9k。
7. 移植非常简单,代码主要用 C 编写。
8. 同时支持合作式和抢占式任务。
9. 支持消息队列、二值信号量、计数信号量、递归信号量和互斥信号量,可用于任务与任务间的消息传递和
同步,任务与中断间的消息传递和同步。
10. 优先级继承方式的互斥信号量。
11. 高效的软件定时器。
12. 强大的跟踪执行函数。
13. 堆栈溢出检查。
14. 提供丰富的,配置好的工程例子。
15. 提供论坛技术支持,有可选的商业支持和许可版本。
16. 任务的数量不限。
17. 任务优先级数量不限。
18. 多个任务可以分配相同优先级,即支持时间片调度。
19. 免费的开发工具。
20. 免费的嵌入式软件源码。
21. 免版权费。
4.1.2 高质量的管理机制
FreeRTOS 经过非常严格的高质量管理,不仅表现为规范的源码,还主要表现在以下几个方面:
在关键代码区和中断里面从不会执行像遍历列表这样的时间非确定性任务。
高效的软件定时器,不需要损耗额外的 CPU 时间,除非需要执行定时器任务。
任务间直接的消息传递,相对于通用的信号量、消息队列等方式,速度较快。
![](https://csdnimg.cn/release/download_crawler_static/10043369/bg11.jpg)
不需要定时的去查询阻塞或者挂起列表。
FreeRTOS 的队列使用模型(消息队列、互斥信号量、信号量等都是基于此队列模式设计的)使得它简单并且
灵活。
FreeRTOS 的队列是其它通信和同步机制的基础,这种代码复用方式可以有效地降低整体代码的大小,并且反
过来有助于调试,提高鲁棒性。
4.2 FreeRTOS 的编码标准和命名风格
作为初学者,非常有必要了解 FreeRTOS 的编码标准和命名风格,这对于以后的学习大有裨益。
4.2.1 FreeRTOS 的编码标准
FreeRTOS 核心源码文件的编写遵循 MISRA 代码规则,同时支持各种编译器。但考虑到有些编译器的性能还比较
弱,不支持 C 语言的新标准 C99 和 C11 的一些特性和语法,所以 FreeRTOS 的源码中就没有引入 C99 和 C11 的新特
性,但是有一个例外,源码中有用到头文件 stdint.h(这个文件是 C99 标准才引入的)。如果用户使用的编译器没
有这个头文件的话,可以将 FreeRTOS 源码文件中,此路径下 FreeRTOS/Source/include 的一个 stdint.readme 文
件修改为 stdint.h 文件后用于这个编译器。
MISRA
MISRA (The Motor Industry Software Reliability Association 汽车工业软件可靠性联会) 是位于英国
的一个跨国汽车工业协会,其成员包括了大部分欧美汽车生产商。其核心使命是为汽车工业提供服务和协助,
帮助厂方开发安全的、高可靠性的嵌入式软件。这个组织最出名的成果是所谓的 MISRA C Coding Standard,
这一标准中包括了 127 条 C 语言编码标准,通常认为,如果能够完全遵守这些标准,那你的 C 代码是易读、可
靠、可移植和易于维护的。现在很多嵌入式开发者都以 MISRA C 来衡量自己的编码风格,比如 uC/OS-II 就宣
传 99%遵守 MISRA 标准。
4.2.2 FreeRTOS 的命名规则
初学 FreeRTOS 的用户对其变量和函数的命名比较迷惑,下面专门做一下介绍:
变量
uint32_t 定义的变量都加上前缀 ul。u 代表 unsigned 无符号,l 代表 long 长整型。
uint16_t 定义的变量都加上前缀 us。u 代表 unsigned 无符号,s 代表 short 短整型。
uint8_t 定义的变量都加上前缀 uc。u 代表 unsigned 无符号,c 代表 char 字符型。
stdint.h 文件中未定义的变量类型,在定义变量时需要加上前缀 x,比如 BaseType_t 和 TickType_t 定
义的变量。
stdint.h 文件中未定义的无符号变量类型,在定义变量时要加上前缀 u,比如 UBaseType_t 定义的变
量要加上前缀 ux。
size_t 定义的变量也要加上前缀 ux。
枚举变量会加上前缀 e。
指针变量会加上前缀 p,比如 uint16_t 定义的指针变量会加上前缀 pus。
根据 MISRA 代码规则,char 定义的变量只能用于 ASCII 字符,前缀使用 c。
根据 MISRA 代码规则,char *定义的指针变量只能用于 ASCII 字符串,前缀使用 pc。
函数
加上了 static 声明的函数,定义时要加上前缀 prv,这个是单词 private 的缩写。
带有返回值的函数,根据返回值的数据类型,加上相应的前缀,如果没有返回值,即 void 类型
,函数的前缀加上字母 v。
根据文件名,文件中相应的函数定义时也将文件名加到函数命名中,比如 tasks.c 文件中函数
vTaskDelete,函数中的 task 就是文件名中的 task。
宏定义
根据宏定义所在的文件,文件中的宏定义声明时也将文件名加到宏定义中,比如宏定义
configUSE_PREEMPTION 是定义在文件 FreeRTOSConfig.h 里面。宏定义中的 config 就是文件名中的
config。另外注意,前缀要小写。
除了前缀,其余部分全部大写,同时用下划线分开。
char 型变量无符号数和有符号数的切换方法
MDK 中可以在 Options->C/C++选项中设置 char 型变量为有符号数或者无符号数,默认不选择单选框的情况下
char 型变量是 8 位无符号数,选上后就是 8 位有符号数:
![](https://csdnimg.cn/release/download_crawler_static/10043369/bg13.jpg)
4.2.3 FreeRTOS 中数据类型
FreeRTOS 使用的数据类型主要分为 stdint.h 文件中定义的和自己定义的两种。其中 char 和 char *定义的变
量要特别注意。
FreeRTOS 主要自定义了以下四种数据类型:
TickType_t
如果用户使能了宏定义 configUSE_16_BIT_TICKS,那么 TickType_t 定义的就是 16 位无符号数,如果没有使
能,那么 TickType_t 定义的就是 32 位无符号数。对于 32 位架构的处理器,一定要禁止此宏定义,即设置此
宏定义数值为 0 即可。
BaseType_t
这个数据类型根据系统架构的位数而定,对于 32 位架构,BaseType_t 定义的是 32 位有符号数,对于 16 位架
构,BaseType_t 定义的是 16 位有符号数。如果 BaseType_t 被定义成了 char 型,要特别注意将其设置为有符
号数,因为部分函数的返回值是用负数来表示错误类型。
UBaseType_t
这个数据类型是 BaseType_t 类型的有符号版本。
StackType_t
栈变量数据类型定义,这个数量类型由系统架构决定,对于 16 位系统架构,StackType_t 定义的是 16 位变量,
对于 32 位系统架构,StackType_t 定义的是 32 位变量。
4.2.4 FreeRTOS 的排版和注释
缩进
Tab 制表符用于缩进,Tab 一次缩进 4 个字符空间。
注释
FreeRTOS 中注释不会超过 80 个字符宽度,除非对函数的参数进行注释时。源码中主要是采用的形式进行注释,
不采用 C++中的双斜杠风格来注释。
![](https://csdnimg.cn/release/download_crawler_static/10043369/bg14.jpg)
代码效果
FreeRTOS 的源码被设计的尽可能易于阅读和查看,实际效果如下:
#include
#include "FreeRTOS.h"
#include "HardwareSpecifics.h"
#define A_DEFINITION ( 1 )
static void prvAFunction( uint32_t ulParameter );
static BaseType_t xMyVariable.
void vAFunction( void )
{
}
static UBaseType_t prvNextFunction( void )
{
}
4.3 FreeRTOS 和 OpenRTOS 的区别
FreeRTOS 和 OpenRTOS 有相同的源码,只是 OpenRTOS 为 FreeRTOS 披上了”商业外衣”。用户从 FreeRTOS 升级
到 OpenRTOS 主要考虑到以下问题:
为了克服 FreeRTOS 修改版的 GPL 许可证限制。
为了获得额外的服务,如专业的技术支持、高质量的中间件、培训、咨询和相应的工具。
修正版 GPL 许可证限制主要表现在如下三个方面:
1. 公司可能有一个全面禁止在他们的项目中使用 GPL 授权的软件。
剩余625页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/8eb635888d544a008f110c41439c9cbd_kycle.jpg!1)
kycle
- 粉丝: 4
- 资源: 19
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 电力电子系统建模与控制入门
- SQL数据库基础入门:发展历程与关键概念
- DC/DC变换器动态建模与控制方法解析
- 市***专有云IaaS服务:云主机与数据库解决方案
- 紫鸟数据魔方:跨境电商选品神器,助力爆款打造
- 电力电子技术:DC-DC变换器动态模型与控制
- 视觉与实用并重:跨境电商产品开发的六重价值策略
- VB.NET三层架构下的数据库应用程序开发
- 跨境电商产品开发:关键词策略与用户痛点挖掘
- VC-MFC数据库编程技巧与实现
- 亚马逊新品开发策略:选品与市场研究
- 数据库基础知识:从数据到Visual FoxPro应用
- 计算机专业实习经验与项目总结
- Sparkle家族轻量级加密与哈希:提升IoT设备数据安全性
- SQL数据库期末考试精选题与答案解析
- H3C规模数据融合:技术探讨与应用案例解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)