freeRTOS总结(一)

前一阵说学习freeRTOS,项目要用,最近学了一些,用的不是很好,总结一些目前学到的点吧:

一. 任务创建与删除:

  1. star_task为任务函数,用来创建其他任务,执行完后自行删除

使用宏定义在文件头部定义,下面创建任务时直接用

//定义创建任务所需参数
#define START_TASK_STACK_SIZE 128
#define START_TASK_PRIORITY 1
TaskHandle_t StartTask_Handler;
void start_task(void *pvParameters);
......
...//创建任务
xTaskCreate(	(TaskFunction_t)start_task,
                    (const char *  )"start_task",
                    (uint16_t      )START_TASK_STACK_SIZE,
                    (void *        )NULL,
                    (UBaseType_t   )START_TASK_PRIORITY,
                    (TaskHandle_t *)&StartTask_Handler );

其中,TaskFunction_t为typedef定义的类型,typedef void (TaskFunction_t)( void * );,这是将TaskFunction_t定义为了一个指向返回值为void,参数为void的函数TaskFunction_t的指针类型,可以用他来定义符合上面标准的函数;参考:https://zhuanlan.zhihu.com/p/380264864

UBaseType_t 为typedef unsigned long UBaseType_t;

TaskHandle_t * 为typedef void * TaskHandle_t;

  1. 任务优先级不能使用0(IDLE)和32(TIME_delay)

  2. 堆栈实际大小为赋的值*4个字节

  3. vTaskDelete(StartTask_Handler); 删除任务,可以在任意任务中,任意触发情况下删除某一创建后正在运行的任务,删除后将不再运行

  4. 在任务运行时,有一个特点体现freeRTOS的抢占行运行机制,那就是必须在每个高优先级的任务中加上vTaskDelay();的延时,因为这个延时时此实时系统的延时,可以让当前高优先级任务进入挂起态,才给了低优先级任务的运行机会,否则将一直运行高优先级的任务而不切换!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值