FreeRTOS——初识

1、如何学习

市面上流行多款RTOS嵌入式操作系统,学习FreeRTOS需要我们掌握其API函数,要能够读懂FreeRTOS的源码,再对底层实现原理加以了解,最后会通过学会的FreeRTOS知识学习其他的RTOS。

FreeRTOS官网:FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

2、编码规范

2.1 数据类型

只有stdint.h和RTOS自己定义的数据类型可以使用,但也有例外情况,如下所示:

①. char:与MISRA编码标准指南一致,char类型变量仅被允许保存ASCII字符 ②. char *:与MISRA编码标准指南一致,char *类型变量仅允许指向ASCII字符串。当标准库函数期望一个char *参数时,这样做可以消除一些编译器警告;特别是考虑到有些编译器将char类型当做signed类型,还有些编译器将char类型当做unsigned类型。

2.1.1 三种类型在移植层被定义

①. TickType_t:如果configUSE_16_BIT_TICKS为非零(条件为真),TickType_t定义为无符号16位类型。如果configUSE_16_BIT_TICKS为零(条件为假),TickType_t定义为无符号32位类型。注:32位架构的微处理器应设置configUSE_16_BIT_TICKS为零。

②. BaseType_t:定义为微处理器架构效率最高的数据类型。比如,在32位架构处理器上,BaseType_t应该定义为32位类型。在16位架构处理器上,BaseType_t应该定义为16位类型。如果BaseType_t定义为char,对于函数返回值一定要确保使用的是signed char,否则可能造成负数错误。

③. UbaseType_t:这是一个无符号BaseType_t类型

2.2 变量名

全称前缀—缩写
unsigned longul
unsigned shortus
unsigned charuc
基本的Type_t和TickType_t类型x(非stdint类型变量)
UbaseType_t(unsigned BaseType_t)ux
size_t类型x
枚举类型变量e
指针类型变量在类型基础上附加前缀p,如pus为指向uint16_t
与MISRA编码标准指南一致,charl类型变量仅允许保存ASCII字符c
与MISRA编码标准指南一致,char *类型变量仅允许指向ASCII字符pc

2.3 函数名

①. 在文件作用域范围的函数前缀为prv;

②. API函数的前缀为它们的返回类型,当返回为空时,前缀为v;

③. API函数名字起始部分为该函数所在的文件名。比如vTaskDelete函数定义在tasks.c,并且该函数返回空。

2.4 宏

①. 宏的名字起始部分为该宏定义所在的文件名的一部分。比如configUSE_PREEMPTION定义在FreeRTOSConfig.h文件中;

②. 除了前缀,宏剩下的字母全部为大写,两个单词间用下划线(’_’)隔开。eRTOS项目文件结构。

2.5 风格指南

①. 缩进:缩进使用制表符,一个制表符等于4个空格。

②. 注释:注释单行不超过80列,特殊情况除外。不使用C++风格的双斜线(//)注释

③. 布局:FreeRTOS的源代码被设计成尽可能的易于查看和阅读。下面的代码片中,第一部分展示文件布局,第二部分展示C代码设计格式。。

3、FreeRTOS源码结构

源码下载地址:FreeRTOS Real Time Kernel (RTOS) download | SourceForge.net

4、FreeRTOS项目文件

分析以FreeRTOSv9.0.0版本的为例:

选择分析FreeRTOS文件夹下的文件。FreeRTOS-Plus比起FreeRTOS多了一些功能。

FreeRTOS文件夹下有三个文件夹:DemoLicenseSource

Demo:是官方提供的相关例程。

License:是相关许可信息。

Source:FreeRTOS的文件。文件包含的如下图:

其中,include是一些头文件。.c文件就是FreeRTOS的源码,portable文件是支持编译环境的文件。

文件名描述是否必须
croutine.c可选,过时了。类似tasks.c ,可以进行多任务调度,另一种方式进行调试
event_groups.c可选、提供 event group 功能事件标志组,初级理解,对任务管理的一种补充
list.c必须、列表
queue.c必须、提供队列操作、信号量(semaphore)操作
stream_buffer.c10以后出的,缓冲区
tasks.c必须、任务操作
timers.c可选、software timer

5、FreeRTOS移植到STM32F103C8T6

参考博客:

FreeRTOS介绍-CSDN博客

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值