以下转载自安富莱电子: http://forum.armfly.com/forum.php

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. 免版权费。


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

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

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。 另外注意,前缀要小写。
 除了前缀,其余部分全部大写,同时用下划线分开。

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 位变量。


移植前准备工作说明
1. 本章节的 IDE 开发环境使用 MDK,用 MDK4.7X 或者 MDK5.XX 均可,保证支持 STM32F103,F407
和 F429 即可(不可以使用 MDK4.7X 以下版本,一方面是不支持 F429,另外就是 FreeRTOS V8.2.3
要用到 C 代码中嵌套汇编代码,MDK4.7X 以下版本是不支持的)。
2. 找一个简单的工程,最好是跑马灯之类的,越简单越好,我们就在这个简单的工程上面移植即可。
3. 大家使用的简单工程里面不能有 SysTick,PendSV 和 SVC 三个系统中断的使用,因为 FreeRTOS 系
统要使用这三个中断。


free-rtos地移植算是比较简单的了,作为一般应用,能够调用API就够了。

以上转载自安富莱电子PDF资料。

FreeRTOS——1的更多相关文章

  1. FREERTOS 手册阅读笔记

    郑重声明,版权所有! 转载需说明. FREERTOS堆栈大小的单位是word,不是byte. 根据处理器架构优化系统的任务优先级不能超过32,If the architecture optimized ...

  2. FreeRTOS 中断优先级嵌套错误引发HardFault异常解决(转)

      最近在使用FreeRTOS的时候,突然发现程序在运行了几分钟之后所有的任务都不再调用了,只有几个中断能正常使用,看来是系统挂掉了,连续测试了几次想找出问题,可是这个真的有点不知所措.      我 ...

  3. Keil环境中建立带FreeRTOS的STM32L项目

    本文是网上转载,版权所有. Keil环境中建立带FreeRTOS的STM32L项目 1.先把source文件夹复制至project目录,然后在keil中添加RTOS文件,如图: 其中heap_2.c按 ...

  4. FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS

    上一次,我们简单的测试了FreeRTOS的基于IAR EWARM v6.4和STM32F103VET6平台的Demo,对其有了一个基本认识.接下来我们开始自己移植FreeRTOS的过程. 1.创建一个 ...

  5. FreeRTOS学习及移植笔记之一:开始FreeRTOS之旅

    1.必要的准备工作 工欲善其事,必先利其器,在开始学习和移植之前,相应的准备工作必不可少.所以在开始我们写要准备如下: 测试环境:我准备在STM32F103平台上移植和测试FreeRTOS系统 准备F ...

  6. STM32与FreeRTOS实现低功耗

    在工作过程中,遇到这样一个产品,它基于 Cortex-M7 内核的 STM32F769 芯片,同时使用了 FreeRTOS 实时操作系统. 由于该产品使用电池供电,因此有着低功耗的需求. 接下来,我将 ...

  7. 了解FreeRTOS源文件目录结构

    参考文献: Understanding the FreeRTOS directory structure. 从官网下载下来的FreeRTOS源文件包,对于每一个已经移植完成的处理器,都有一个与之对应的 ...

  8. 用STM32CubeMX创建FreeRTOS项目

    1. 目标, PG13,PG14双线程双闪灯. 2. 测试平台 stm32f429i-disco keil v5.13.0.0 CubeMx 4.8.0 3. 步骤 3.1 打开cube, PG13, ...

  9. STM32F429i-DISCO FreeRTOS keil STM32CubeMX

    目标: 在STM32F429 Disco开发板上用FreeRTOS双线程点亮双闪led. 准备: 0. STM32F429i-DISCO 1. keil ARMMDK 5.13 2. STM32Cub ...

  10. FreeRTOS知识点

    特点: FreeRTOS任务不容许以任何方式从  任务中 实现函数中返回--绝对不能有return语句,也不能执行到函数末尾.如果任务不再需要,可以显示的删除. 一个任务函数可以用来创建若干个任何-- ...

随机推荐

  1. Centos7 启动 python脚本

    假设文件夹\home\sks\python3_crawl下面有个test.py 文件 打开terminal终端:转到root模式 进入cd /hom/sks/python3_crawl 执行:pyth ...

  2. curl教程

    转载自:http://inspire.twgg.org/c/programming/php-curl-teaching.html 目前最完整的CURL中文说明,学PHP的要好好掌握,有很多的参数,大部 ...

  3. JSP2.0自定义标签

    JSP1.0中可以通过继承TagSupport或者BodyTagSupport来实现自定义的tag处理方法. JSP2.0中也支持另外一种更为简单的自定tag的方法,那就是直接讲JSP代码保存成*.t ...

  4. Understanding the JavaScript Engine—— two phase

    Understanding the JavaScript Engine — Part 1   I have been a Ruby on Rails developer for the last 2 ...

  5. (转)AS3 中,Function.apply、call中第一个参数的作用;与什么时候用

    http://blog.csdn.net/linjf520/article/details/8746064 大家在使用Function.apply或是call时,是否发现,第一个参数不知道怎么用,赋值 ...

  6. LIBSVM与LIBLINEAR

    对于多分类问题以及核函数的选取,以下经验规则可以借鉴: 如果如果特征数远远大于样本数的情况下,使用线性核就可以了. 如果特征数和样本数都很大,例如文档分类,一般使用线性核, LIBLINEAR比LIB ...

  7. C#基础视频教程7.2 如何编写简单游戏

    前面一小节我们实现了简单的碰撞检测,但是实际上游戏的对象并不是一个标准的矩形(小鸟是一个不规则的物体,其实碰撞的管道也是不规则物体),所以如果真的要做的比较完美,我们自己要写一个方法,能够导入一个图像 ...

  8. oracle 三表关联查询

      oracle 三表关联查询 CreationTime--2018年7月4日17点52分 Author:Marydon 左连接实现三表关联 表A--------------------------- ...

  9. HBase建立二级索引的一些解决方式

    HBase的一级索引就是rowkey,我们仅仅能通过rowkey进行检索. 假设我们相对hbase里面列族的列列进行一些组合查询.就须要採用HBase的二级索引方案来进行多条件的查询. 常见的二级索引 ...

  10. JDBC 事务(二)回滚到保存点

    public class SavePointTest { /**      * @param args      * @throws SQLException      */     public s ...