【FreeRTOS操作系统教程】第4章 FreeRTOS操作系统介绍

标签:
fatfsfreertosstemwinstm32usb |
分类: FreeRTOS |
第4章
FreeRTOS操作系统介绍
本章节介绍一下FreeRTOS操作系统,让大家对FreeRTOS有一个整体的了解。FreeRTOS,OpenRTOS和SafeRTOS之间的区别和联系也进行了简单的介绍。
4.1 FreeRTOS简介
4.2 FreeRTOS的编程标准和命名风格
4.3 FreeRTOS和OpenRTOS的区别
4.4 FreeRTOS和SafeRTOS的区别
4.7总结
4.1
FreeRTOS 简介
FreeRTOS是由Real Time Engineers Ltd出品,是一款市场领先的RTOS。现在已经支持35种处理器架构。2015年,FreeRTOS的下载量超过12万次,平均每4.2分钟就有一次下载。专业的发展,严格高质量的控制,而且商业使用的话不需要用户公开源代码,也不存在任何版权问题,开源免费。
图4.1 FreeRTOS Logo
FreeRTOS是从2003年才开始正式发布的,在过去的13年间,与全球众多领先的IC厂商合作 。第一时间推出各个IC厂商最新发布芯片的的Demo。下图4.2是其中一部厂商:
图4.2 合作的IC厂商Logo
l
这家公司的介绍可以在这里查看:http://www.freertos.org/RTOS-contact-and-support.html
l
FreeRTOS项目是由Richard Barry创建的,Rcichard Barry毕业的时候获得了实时系统方面的一等荣誉。他同时直接参与了多家公司的创业,主要工作是工业自动化,航空航天和仿真。现在他是Reel Time Enginerrs Ltd的董事以及FreeRTOS项目的拥有者和维护者。
4.1.1
FreeRTOS的特点
FreeRTOS的主要特点如下:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10. 优先级继承方式的互斥信号量。
11. 高效的软件定时器。
12. 强大的跟踪执行函数。
13. 堆栈溢出检查。
14. 提供丰富的,配置好的工程例子。
15. 提供论坛技术支持,有可选的商业支持和许可版本。
16. 任务的数量不限。
17. 任务优先级数量不限。
18. 多个任务可以分配相同优先级,即支持时间片调度。
19. 免费的开发工具。
20. 免费的嵌入式软件源码。
21. 免版权费。
4.1.2
高质量的管理机制
FreeRTOS经过非常严格的高质量管理,不仅表现为规范的源码,还主要表现在以下几个方面:
u
u
u
u
u
u
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文件后用于这个编译器。
l
MISRA
4.2.2
FreeRTOS的命名规则
初学FreeRTOS的用户对其变量和函数的命名比较迷惑,下面专门做一下介绍:
u
l
l
l
l
l
l
l
l
l
l
u
l
l
,函数的前缀加上字母v。
l
u
l
l
l
MDK中可以在Options->C/C++选项中设置char型变量为有符号数或者无符号数,默认不选择单选框的情况下char型变量是8位无符号数,选上后就是8位有符号数:
IAR中可以在Options->C/C++ Compiler选项中设置char型变量为有符号数或者无符号数,可以选择Signed,表示8位有符号数或者Unsigned,表示8位无符号数:
4.2.3
FreeRTOS中数据类型
FreeRTOS使用的数据类型主要分为stdint.h文件中定义的和自己定义的两种。其中char和char *定义的变量要特别注意。
FreeRTOS主要自定义了以下四种数据类型:
u
如果用户使能了宏定义
u
这个数据类型根据系统架构的位数而定,对于32位架构,BaseType_t定义的是32位有符号数,对于16位架构,BaseType_t定义的是16位有符号数。如果BaseType_t被定义成了char型,要特别注意将其设置为有符号数,因为部分函数的返回值是用负数来表示错误类型。
u
这个数据类型是BaseType_t类型的有符号版本。
u
栈变量数据类型定义,这个数量类型由系统架构决定,对于16位系统架构,StackType_t定义的是16位变量,对于32位系统架构,StackType_t定义的是32位变量。
4.2.4
FreeRTOS的排版和注释
u
Tab制表符用于缩进,Tab一次缩进4个字符空间。
u
FreeRTOS中注释不会超过80个字符宽度,除非对函数的参数进行注释时。源码中主要是采用的形式进行注释,不采用C++中的双斜杠风格来注释。
u
FreeRTOS的源码被设计的尽可能易于阅读和查看,实际效果如下:
#include
#include "FreeRTOS.h"
#include "HardwareSpecifics.h"
#define A_DEFINITION
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主要考虑到以下问题:
u
u
l
1. 公司可能有一个全面禁止在他们的项目中使用GPL授权的软件。
2. 公司可能需要IP赔偿。
3. 公司可能更愿意在他们的产品中避免FreeRTOS的许可证要求承认他们使用了FreeRTOS。
下面是FreeRTOS的开源授权和OpenRTOS的商业授权区别:
4.4
FreeRTOS和SafeRTOS的区别
SafeRTOS也是基于FreeRTOS的,但是和FreeRTOS不同,SafeRTOS被安全方面的专家重新做了设计,下面是SafeRTOS获得的安全认证(这些安全认证都非常重要)。
l
更多SafeRTOS相关的知识和Demo下载可于官方网站进行查询:https://www.highintegritysystems.com/
4.5
总结
本章节就为大家讲解这么多,对于FreeRTOS的编码标准和命名风格要熟练的掌握。另外,如果对OpenRTOS和SafeRTOS感兴趣,也可以上其官网进行了解。