3.信号量
信号量![[Pasted image 20250518115216.png]] 123456789101112131415161718192021//创建二值信号量,成功则返回信号量句柄(二值信号量最大只有1个)SemaphoreHandle_t xSemaphoreCreateBinary(void);//创建计数信号量,成功则返回信号量句柄SemaphoreHandle_t xSemaphoreCreateCounting( UBseType_t uxMaxCount,//最大信号量数 UBseType_t uxInitialCount//初始信号量数);//获取一个信号量,如果获得信号量,则返回pdTURExSemaphoreTake( SemaphoreHandle_t xSemaphore,//信号量句柄 TickType_t xTicksTowait//等待时间);//释放一个信号量xSemaphoreGive(SemaphoreHandle_t xSemaphore);//信号量句柄//删除信号量xSemaphoreDelete(SemaphoreHandle_t...
1.创建任务
任务可以存在于以下状态:运行:当任务实际执行时,它被称为处于运行状态。任务当前正在使用处理机。如果运行RTOS的处理器只有一个内核,那么在任何给定时间内都只能有一个任务处于运行状态。 准备就绪:准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态),但目前没有执行的任务,因为同等或更高优先级的不同任务已经处于运行状态。 阻塞:如果任务当前正在等待时间或外部时间,则该任务被认为处于阻塞状态。例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态),直到延迟结束一个时间事件。任务也可以通过阻塞来等待队列、信号量、事件组、通知或信号量事件。处于阻塞状态的任务通常有一个“超时”期,超时后任务被超时,并被解除阻塞,即使该任务所等待的事件没有发生。 “阻塞”状态下的任务不使用任何处理时间,不能 被选择进入运行状态。 挂起:与“阻塞”状态下的任务一样,“挂起”状态下的任务不能 被选择进入运行状态,但处于挂起状态的任务 没有超时。相反,任务只有在分别通过vTaskSuspend() 和 xTaskResume()...
4.事件组和直达任务通知
事件组事件位:用于指示事件是否发生,事件位通常称为事件标志;事件组:就是一组事件位。事件组中的事件位通过位编号来引用; ![[Pasted image 20250518153023.png]] 12345678910111213141516171819202122232425//创建一个事件组,返回事件组句柄,失败返回NULLEventGroupHandle_t xEventGroupCreate(void);//等待事件组中某个标志位,用返回值以确定哪些位已完成设置EventBits_t xEventGroupWaitBits( const EventGroupHandle_t xEventGroup,//事件组句柄 const EventBits_t uxBitsToWaitFor,//哪些位需要等待 const BaseType_t xClearOnExit,//是否自动清除标志位 const BaseType_t xWaitForAllBits,//是否等待的标志位都成功了才返回 TickType_t...