FreeRTOS 入门学习(一) 为什么学习FreeRTOS

  为什么要学习 RTOS
 
   在裸机系统中,所有的程序基本都是自己写的,所有的操作都是在一个无限的大循环 里面实现。
但是为什么还要学习 RTOS 编程,单纯的裸机系统已经不能够完美地解决问题,反而会使编程变得 更加复杂,如果想降低编程的难度,我们可以考虑引入 RTOS 实现多任务管理,这是使用 RTOS 的最大优势。
 
首先关于数据类型
FreeRTOS 中,使用的数据类型虽然都是标准 C 里面的数据类型,但是针对不同的 处理器,对标准 C 的数据类型又进行了重定义,给它们取了一个新的名字,比如 char 重新 定义了一个名字 portCHAR ,这里面的 port 表示接口的意思,就是 FreeRTOS 要移植到这些 处理器上需要这些接口文件来把它们连接在一起。但是用户在写程序的时候并非一定要遵 循 FreeRTOS 的风格,我们还是可以直接用 C 语言的标准类型。在 FreeRTOS 中, int 型从 不使用,只使用 short long 型。在 Cortex-M 内核的 MCU short 16 位, long 32 位
 
 
新定义的数据类型
实际的数据类型( C 标准类型)
portCHAR          char
portSHORT        short
portLONG           long
 
#define portCHAR char
2 #define portFLOAT float
3 #define portDOUBLE double
4 #define portLONG long
5 #define portSHORT short
6 #define portSTACK_TYPE uint32_t
7 #define portBASE_TYPE long
8
9 typedef portSTACK_TYPE StackType_t;
 
 
 
10 typedef long BaseType_t;
11 typedef unsigned long UBaseType_t;
12
13 #if( configUSE_16_BIT_TICKS == 1 )
14 typedef uint16_t TickType_t;
15 #define portMAX_DELAY ( TickType_t ) 0xffff
16 #else
17 typedef uint32_t TickType_t;
18 #define portMAX_DELAY ( TickType_t ) 0xffffffffUL
 
 
 
 
FreeRTOS 中,定义变量的时候往往会把变量的类型当作前缀加在变量上,这样的 好处是让用户一看到这个变量就知道该变量的类型。比如 char 型变量的前缀是 c short 型 变量的前缀是 s long 型变量的前缀是 l portBASE_TYPE 类型变量的前缀是 x 。还有其他 的数据类型,比如数据结构,任务句柄,队列句柄等定义的变量名的前缀也是 x
如果一个变量是无符号型的那么会有一个前缀 u ,如果是一个指针变量则会有一个前 缀 p 。因此,当我们定义一个无符号的 char 型变量的时候会加一个 uc 前缀,当定义一个 char 型的指针变量的时候会有一个 pc 前缀。
 
  1. portBASE_TYPE 根据处理器架构决定位数,如果是 32/16/8bit 的处理器,则是 32/26/8bit 的数据类型,一般用于定义函数的返回值或者布尔类型。
本地工程文件夹说明
 
Doc
 
 
用于存放对整个工程的说明文件,如 readme.txt。通常情况下,我们都要对整个工程实现的功能,如何编译,如
何使用等做一个简要的说明。
 
 
 
 
代码清单 7-3 定义任务栈
1 #define TASK1_STACK_SIZE 128 (2)
2 StackType_t Task1Stack[TASK1_STACK_SIZE]; (1)
3
4 #define TASK2_STACK_SIZE 128
5 StackType_t Task2Stack[TASK2_STACK_SIZE];
代码清单 7-3 (1) :任务栈其实就是一个预先定义好的全局数据,数据类型为
StackType_t ,大小由 TASK1_STACK_SIZE 这个宏来定义,默认为 128 ,单位为字,即 512
字节,这也是 FreeRTOS 推荐的最小的任务栈。在 FreeRTOS 中,凡是涉及到数据类型的
地方, FreeRTOS 都会将标准的 C 数据类型用 typedef 重新取一个类型名。这些经过重定义
的数据类型放在 portmacro.h rtdef.h 第一次使用需要在 include 文件夹下面新建然后添加到
工程 freertos/source 这个组文件)这个头文件,
 

拥有该节点的内核对象,通常是 TCB

调用 pxPortInitialiseStack()函数初始化任务栈

 
 
 
 
 

猜你喜欢

转载自blog.csdn.net/qq_36958104/article/details/104689475