先来认识一下框架
BaseType_t Task_Ret = pdPASS;//创建任务返回值
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,//任务函数名称
const char * const pcName,//任务名称 ,最好有意义好辩认
const configSTACK_DEPTH_TYPE usStackDepth,//为任务分配的栈空间
void * const pvParameters,//任务形参,一般情况下都是NULL
UBaseType_t uxPriority,//任务的优先级
TaskHandle_t * const pxCreatedTask );//任务控制句柄
返回值:成功返回 pdPASS
1.什么是临界段?
临界段用一句话概括就是一段在执行的时候不能被中断的代码段 ,FreeRTOS 对临界段的保护最终还是对中断的开和关的控制。
taskENTER_CRITICAL(); //开启临界段
不能被中断的代码
taskEXIT_CRITICAL(); //关闭临界段
2.开启任务调度
vTaskStartScheduler();//开启任务调度
当任务创建好后,是处于任务就绪( Ready),在就绪态的任务可以参与操作系统的调度。 但是此时任务仅仅是创建了,还未开启任务调度器,也没创建空闲任务与定时器任务(如果使 能了configUSE_TIMERS 这个宏定义),那这两个任务就是在启动任务调度器中实现, 每个操作系统,任务调度器只启动一次,之后就不会再次执行了, FreeRTOS 中启动任务调度器的函 数是 vTaskStartScheduler(),并且启动任务调度器的时候就不会返回,从此任务管理都由 FreeRTOS管理,此时才是真正进入实时操作系统中的第一步 。
3.删除任务
vTaskDelete(APP_CreateHandle);//删除本任务
vTaskDelete()用于删除一个任务。删除的任务将从所有就绪,阻塞, 挂起和事件列表中删除 。
4.代码
总结
大概模板就是这个样子。不管是之后的二值信号量,互斥信号量,计数信号量,把所用到的函数换一下,框架都是这样。看着都看迷糊了!