FreeRTOS——1
以下转载自安富莱电子: 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的更多相关文章
- FREERTOS 手册阅读笔记
郑重声明,版权所有! 转载需说明. FREERTOS堆栈大小的单位是word,不是byte. 根据处理器架构优化系统的任务优先级不能超过32,If the architecture optimized ...
- FreeRTOS 中断优先级嵌套错误引发HardFault异常解决(转)
最近在使用FreeRTOS的时候,突然发现程序在运行了几分钟之后所有的任务都不再调用了,只有几个中断能正常使用,看来是系统挂掉了,连续测试了几次想找出问题,可是这个真的有点不知所措. 我 ...
- Keil环境中建立带FreeRTOS的STM32L项目
本文是网上转载,版权所有. Keil环境中建立带FreeRTOS的STM32L项目 1.先把source文件夹复制至project目录,然后在keil中添加RTOS文件,如图: 其中heap_2.c按 ...
- FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
上一次,我们简单的测试了FreeRTOS的基于IAR EWARM v6.4和STM32F103VET6平台的Demo,对其有了一个基本认识.接下来我们开始自己移植FreeRTOS的过程. 1.创建一个 ...
- FreeRTOS学习及移植笔记之一:开始FreeRTOS之旅
1.必要的准备工作 工欲善其事,必先利其器,在开始学习和移植之前,相应的准备工作必不可少.所以在开始我们写要准备如下: 测试环境:我准备在STM32F103平台上移植和测试FreeRTOS系统 准备F ...
- STM32与FreeRTOS实现低功耗
在工作过程中,遇到这样一个产品,它基于 Cortex-M7 内核的 STM32F769 芯片,同时使用了 FreeRTOS 实时操作系统. 由于该产品使用电池供电,因此有着低功耗的需求. 接下来,我将 ...
- 了解FreeRTOS源文件目录结构
参考文献: Understanding the FreeRTOS directory structure. 从官网下载下来的FreeRTOS源文件包,对于每一个已经移植完成的处理器,都有一个与之对应的 ...
- 用STM32CubeMX创建FreeRTOS项目
1. 目标, PG13,PG14双线程双闪灯. 2. 测试平台 stm32f429i-disco keil v5.13.0.0 CubeMx 4.8.0 3. 步骤 3.1 打开cube, PG13, ...
- STM32F429i-DISCO FreeRTOS keil STM32CubeMX
目标: 在STM32F429 Disco开发板上用FreeRTOS双线程点亮双闪led. 准备: 0. STM32F429i-DISCO 1. keil ARMMDK 5.13 2. STM32Cub ...
- FreeRTOS知识点
特点: FreeRTOS任务不容许以任何方式从 任务中 实现函数中返回--绝对不能有return语句,也不能执行到函数末尾.如果任务不再需要,可以显示的删除. 一个任务函数可以用来创建若干个任何-- ...
随机推荐
- Linux系统配置VSFTP软件详解
Linux系统配置VSFTP软件详解 出处 http://www.sudu.cn/service/detail.php?id=11656 vsftpd.conf 是vsftpd的配置文件,用来控制vs ...
- DD_belatedPNG
我们知道IE6是不支持透明的PNG的,这无疑限制了网页设计的发挥空间. 然而整个互联网上解决这个IE6的透明PNG的方案也是多不胜数,从使用IE特有的滤镜或是expression,再到javascr ...
- Tetris
he Tetris game is one of the most popular computer games ever created. The original game was designe ...
- PotPlayer 如何设置多屏幕全屏播放
如何在播放器中,设置扩展播放模式? 全屏设置/主全屏显示设备:Display2 如何使视频播放时,没有黑边并且全屏充满? 高宽比/处理方式:保持全屏宽高比 如果取消掉视频上方的文字提示信息 ...
- Struts2之文件上传(单文件/多文件)
<一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...
- ant design pro (九)引入外部模块
一.概述 原文地址:https://pro.ant.design/docs/import-cn 除了 antd 组件以及脚手架内置的业务组件,有时我们还需要引入其他外部模块,这里以引入富文本组件 re ...
- 在Jquery validation里验证通过后,自定义提交不同的action路径,适合一个窗口既可以作为添加对话框也可以作为编辑对话框
$("#myform").validate({ debug: true, //调试模式取消submit的默认提交功能 ignore: '#Password,#ConfirmPass ...
- SQL数据库异地备份
服务器:windows sever 2008(简称为A) 数据库:SQL server 2008 R2(安装在A上) 普通台式机:windows 7(简称为B) 目的:将A中的数据定时自动备份到B中 ...
- MySQL 添加外键约束,不检查现有数据
这可能是MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHE ...
- C# ManualResetEvent
文章转载自:C# ManualResetEvent ManualResetEvent被用于在两个或多个线程间进行线程信号发送. 多个线程可以通过调用ManualResetEvent对象的WaitOne ...