注意
利用信号量或任务 必须要确保任务或者信号量建立 习惯性进入和退出临界区
API
- TaskHandle_t创建任务句柄
任务栈大小 从FreeRTOSConfig.h中定义的heap空间中申请 单位word 4字节 - xTaskCreate创建任务
要先定义任务优先级、任务堆栈大小、任务句柄、任务函数 - vTaskStartScheduler开启任务调度 启动FreeRTOS
- start_task
- taskENTER_CRITICAL任务级的临界代码保护
临界区代码要精简 因为此时会关闭中断 - 创建其他任务
- vTaskDelete(StartTask_Handler)删除开始任务
taskEXIT_CRITICAL退出临界区
- taskENTER_CRITICAL任务级的临界代码保护
- vTaskDelete清除任务句柄
- 后最好加一句任务句柄清零
- IRQ 中断请求
- vTaskSuspend 挂起任务
- vTaskResume 恢复任务
vTaskResumeFromISR 中断服务函数中恢复一个任务的运行 若返回pdTrue 说明当前任务优先级高于或等于当前运行任务 退出中断时进行上下文切换portYIELD_FROM_ISR
中断发生的时候释放信号量
- SemaphoreHandle_t二值信号量句柄
- vSemaphoreCreateBinary创建二值信号量(在开始任务里创建
返回NULL 创建失败 FreeRTOS堆栈不足;返回其他值 信号量创建成功 返回值存储信号量句柄 - portBASE_TYPE xSemaphoreTake( xSemaphoreHandle xSemaphore, portTickType xTicksToWait ); 当句柄!=NULL时ÿ