- 移植步骤
- 任务特性
- FreeRTOS任务状态
- FreeRTOS任务优先级
- 任务实现
- FreeRTOS任务控制块
- FreeRTOS任务堆栈
- 任务创建和删除API
- 任务挂起和恢复API
官网: www.freertos.org
解压后的文件目录
发现有一个FreeRTOS和一个FreeRTOS-Plus,Plus是手机那块的,我们不用,进去FreeRTOS文件发现有几个目录,分别是Demo例程,License许可证,Source源码,Test文本
1.在基础工程种新建Freertos文件夹,并且将Source源码添加到这个文件夹中。
2.在poertable文件夹中保留keil、MemMang和RVDS,其他删除
3.在基础工程中新建分组FreeRTOS_CODE和FreeRTOS_PORTTABLE,并且添加.c文件添加头文件.h路径。
都在FreeRTOS那个文件夹中有,我的芯片是CM3的
heap_4.c:FreeRTOS\portable\MemMang\heap_4.c
port:FreeRTOS\portable\RVDS\ARM_CM3\port.c
4.从demo中复制FreeRTOSConfig.h文件到自己的工程目录FreeRTOS\include中
5.移植SYSTEM文件,里面包括sys.c,usart.c,delay.c
1.任务简单
2.任务没有数量使用限制
3.任务支持抢占(抢占式内核)
4.任务支持优先级
5.每个任务都拥有堆栈导致了RAM使用量增大
6.如果使用抢占的话请必须仔细的考虑重入问题
任务优先级决定了任务的执行优先级别,在FreeRTOS中优先级可选范围位:
0 ~ configMAX_PRIORITIES-1
数字越大,优先级越高
最大优先级限制通常为32
描述任务属性的数据结构称为任务控制块,称为TCB_t.
typedef struct tskTaskControlBlock
{
volatile StackType_t * pxTopOfStack;
#if ( portUSING_MPU_WRAPPERS == 1 )
xMPU_SETTINGS xMPUSettings;
#endif
ListItem_t xStateListItem;
ListItem_t xEventListItem; UBaseType_t uxPriority;
StackType_t * pxStack;
} tskTCB
typedef tskTCB TCB_t;
FreeRTOS任务堆栈
任务堆栈用来保存任务现场(CPU寄存器值),创建任务的时候需要指定任务堆栈,
任务堆栈的变量类型为 StackType_t ,此变量类型如下:
#define portSTACK_TYPE uint32_t
#define portBASK_TYPE long
#define portSTACK_TYPE StackType_t
FreeRTOS之静态创建任务和动态创建任务的区别
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)