加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2016-08-11 14:59:25)
标签:

fatfs

freertos

stemwin

stm32

usb

分类: FreeRTOS

第4章        FreeRTOS操作系统介绍

本章节介绍一下FreeRTOS操作系统,让大家对FreeRTOS有一个整体的了解。FreeRTOSOpenRTOSSafeRTOS之间的区别和联系也进行了简单的介绍。

4.1 FreeRTOS简介

4.2 FreeRTOS的编程标准和命名风格

4.3 FreeRTOSOpenRTOS的区别

4.4 FreeRTOSSafeRTOS的区别

4.7总结

 

4.1   FreeRTOS简介

FreeRTOS是由Real Time Engineers Ltd出品,是一款市场领先的RTOS。现在已经支持35种处理器架构。2015年,FreeRTOS的下载量超过12万次,平均每4.2分钟就有一次下载。专业的发展,严格高质量的控制,而且商业使用的话不需要用户公开源代码,也不存在任何版权问题,开源免费

 

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

4.1 FreeRTOS Logo

FreeRTOS是从2003年才开始正式发布的,在过去的13年间,与全球众多领先的IC厂商合作 。第一时间推出各个IC厂商最新发布芯片的的Demo。下图4.2是其中一部厂商:

 

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

4.2 合作的IC厂商Logo

l  Real Time Enginerrs Ltd

这家公司的介绍可以在这里查看:http://www.freertos.org/RTOS-contact-and-support.html

l  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经过非常严格的高质量管理,不仅表现为规范的源码,还主要表现在以下几个方面:

u  在关键代码区和中断里面从不会执行像遍历列表这样的时间非确定性任务。

u  高效的软件定时器,不需要损耗额外的CPU时间,除非需要执行定时器任务。

u  任务间直接的消息传递,相对于通用的信号量、消息队列等方式,速度较快。

u  不需要定时的去查询阻塞或者挂起列表。

u  FreeRTOS的队列使用模型(消息队列、互斥信号量、信号量等都是基于此队列模式设计的)使得它简单并且灵活。

u  FreeRTOS的队列是其它通信和同步机制的基础,这种代码复用方式可以有效地降低整体代码的大小,并且反过来有助于调试,提高鲁棒性。

4.2  FreeRTOS的编码标准和命名风格

作为初学者,非常有必要了解FreeRTOS的编码标准和命名风格,这对于以后的学习大有裨益。

4.2.1     FreeRTOS的编码标准

FreeRTOS核心源码文件的编写遵循MISRA代码规则,同时支持各种编译器。但考虑到有些编译器的性能还比较弱,不支持C语言的新标准C99C11的一些特性和语法,所以FreeRTOS的源码中就没有引入C99C11的新特性,但是有一个例外,源码中有用到头文件stdint.h(这个文件是C99标准才引入的)。如果用户使用的编译器没有这个头文件的话,可以将FreeRTOS源码文件中,此路径下FreeRTOS/Source/include的一个stdint.readme文件修改为stdint.h文件后用于这个编译器。

l  MISRA

MISRA (The Motor Industry Software Reliability Association 汽车工业软件可靠性联会) 是位于英国的一个跨国汽车工业协会,其成员包括了大部分欧美汽车生产商。其核心使命是为汽车工业提供服务和协助,帮助厂方开发安全的、高可靠性的嵌入式软件。这个组织最出名的成果是所谓的MISRA C Coding Standard,这一标准中包括了127C语言编码标准,通常认为,如果能够完全遵守这些标准,那你的C代码是易读、可靠、可移植和易于维护的。现在很多嵌入式开发者都以MISRA C来衡量自己的编码风格,比如uC/OS-II就宣传99%遵守MISRA标准。

4.2.2     FreeRTOS的命名规则

初学FreeRTOS的用户对其变量和函数的命名比较迷惑,下面专门做一下介绍:

u  变量

l  uint32_t定义的变量都加上前缀ulu代表unsigned 无符号,l代表long长整型。

l  uint16_t定义的变量都加上前缀usu代表unsigned无符号,s代表short短整型。

l  uint8_t定义的变量都加上前缀ucu代表unsigned无符号,c代表char字符型。

l  stdint.h文件中未定义的变量类型,在定义变量时需要加上前缀x,比如BaseType_tTickType_t定义的变量。

l  stdint.h文件中未定义的无符号变量类型,在定义变量时要加上前缀u,比如UBaseType_t 定义的变量要加上前缀ux

l  size_t 定义的变量也要加上前缀ux

l  枚举变量会加上前缀e

l  指针变量会加上前缀p,比如uint16_t定义的指针变量会加上前缀pus

l  根据MISRA代码规则,char定义的变量只能用于ASCII字符,前缀使用c

l  根据MISRA代码规则,char *定义的指针变量只能用于ASCII字符串,前缀使用pc

u  函数

l  加上了static声明的函数,定义时要加上前缀prv,这个是单词private的缩写。

l  带有返回值的函数,根据返回值的数据类型,加上相应的前缀,如果没有返回值,即void类型

,函数的前缀加上字母v

l  根据文件名,文件中相应的函数定义时也将文件名加到函数命名中,比如tasks.c文件中函数vTaskDelete,函数中的task就是文件名中的task

u  宏定义

l  根据宏定义所在的文件,文件中的宏定义声明时也将文件名加到宏定义中,比如宏定义configUSE_PREEMPTION 是定义在文件 FreeRTOSConfig.h里面。宏定义中的config就是文件名中的config。另外注意,前缀要小写。

l  除了前缀,其余部分全部大写,同时用下划线分开。

l  char型变量无符号数和有符号数的切换方法

MDK可以在Options->C/C++选项中设置char型变量为有符号数或者无符号数,默认不选择单选框的情况下char型变量是8位无符号数,选上后就是8位有符号数:

 

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

 

IAR可以在Options->C/C++ Compiler选项中设置char型变量为有符号数或者无符号数,可以选择Signed,表示8位有符号数或者Unsigned,表示8位无符号数:

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

 

4.2.3     FreeRTOS中数据类型

FreeRTOS使用的数据类型主要分为stdint.h文件中定义的和自己定义的两种。其中charchar *定义的变量要特别注意。

FreeRTOS主要自定义了以下四种数据类型:

u  TickType_t

如果用户使能了宏定义 configUSE_16_BIT_TICKS,那么TickType_t定义的就是16位无符号数,如果没有使能,那么TickType_t定义的就是32位无符号数。对于32位架构的处理器,一定要禁止此宏定义,即设置此宏定义数值为0即可。

u  BaseType_t

这个数据类型根据系统架构的位数而定,对于32位架构,BaseType_t定义的是32位有符号数,对于16位架构,BaseType_t定义的是16位有符号数。如果BaseType_t被定义成了char型,要特别注意将其设置为有符号数,因为部分函数的返回值是用负数来表示错误类型。

u  UBaseType_t

这个数据类型是BaseType_t类型的有符号版本。

u  StackType_t

栈变量数据类型定义,这个数量类型由系统架构决定,对于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   ( 1 )

 

 

static void prvAFunction( uint32_t ulParameter );

 

 

static BaseType_t xMyVariable.

 

 

 

 

 

void vAFunction( void )

{

   

}

 

 

static UBaseType_t prvNextFunction( void )

{

   

}

 

4.3  FreeRTOSOpenRTOS的区别

FreeRTOSOpenRTOS有相同的源码,只是OpenRTOSFreeRTOS披上了商业外衣。用户从FreeRTOS升级到OpenRTOS主要考虑到以下问题:

u  为了克服FreeRTOS修改版的GPL许可证限制

u  为了获得额外的服务,如专业的技术支持、高质量的中间件、培训、咨询和相应的工具。

l  修正版GPL许可证限制主要表现在如下三个方面:

1. 公司可能有一个全面禁止在他们的项目中使用GPL授权的软件。

2. 公司可能需要IP赔偿。

3. 公司可能更愿意在他们的产品中避免FreeRTOS的许可证要求承认他们使用了FreeRTOS

 

下面是FreeRTOS的开源授权和OpenRTOS的商业授权区别:

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


4.4  FreeRTOSSafeRTOS的区别

SafeRTOS也是基于FreeRTOS的,但是和FreeRTOS不同,SafeRTOS被安全方面的专家重新做了设计,下面是SafeRTOS获得的安全认证(这些安全认证都非常重要)。

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

l  SafeRTOS

更多SafeRTOS相关的知识和Demo下载可于官方网站进行查询:https://www.highintegritysystems.com/

4.5  总结

本章节就为大家讲解这么多,对于FreeRTOS的编码标准和命名风格要熟练的掌握。另外,如果对OpenRTOSSafeRTOS感兴趣,也可以上其官网进行了解。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有