深圳专业建设网站服务提高百度快速排名
web/
2025/9/28 11:41:01/
文章来源:
深圳专业建设网站服务,提高百度快速排名,qq小程序开放平台,信息门户网站制作费用信号量是特殊的队列--无法存储消息的队列#xff0c;相关的接口函数声明在semphr.h中#xff0c;通过宏定义替换队列函数实现。
4.1创建二值信号量xSemaphoreCreateBinary()
4.1.1函数原型 queueQUEUE_TYPE_BINARY_SEMAPHORE#xff1a;一个宏#xff0c;表示创建队列的… 信号量是特殊的队列--无法存储消息的队列相关的接口函数声明在semphr.h中通过宏定义替换队列函数实现。
4.1创建二值信号量xSemaphoreCreateBinary()
4.1.1函数原型 queueQUEUE_TYPE_BINARY_SEMAPHORE一个宏表示创建队列的类型是二值信号量
4.1.2函数框架
创建二值信号量实际上是创建了一个队列这个队列的长度为1存储队列消息的空间为0。
4.2创建计数信号量xSemaphoreCreateCounting()
4.2.1函数原型 uxMaxCount计数信号量的最大值当达到这个值的时候信号量不能再被释放。 uxInitialCount初始信号量的值。
4.2.2函数框架 ①调用xQueueGenericCreate函数创建一个长度为uxMaxCount消息存储空间为0的队列。②使uxMessagesWaiting uxInitialCount表示当前可用的信号量数量为uxInitialCount。
4.3删除信号量vSemaphoreDelete()
4.3.1函数原型 4.3.2函数框架
调用vQueueDelete()函数删除。
4.4释放信号量xSemaphoreGive()
4.4.1函数原型 xSemaphore信号量的句柄指向队列控制块NULL表示消息体为空semGIVE_BLOCK_TIME宏数值0表示阻塞时间为零queueSEND_TO_BACK一个宏表示发送到队列尾部。
4.4.2函数框架
从函数原型可以看出信号量释放是不会阻塞任务的所以如果队列是满的就不会去更新阻塞时间、检查阻塞时间是否过了、再检查队列是否还是满的等操作直接返回err_QUEUE_FULL。
①如果队列没满uxMessageWaiting加一表示信号量的数量加一如果此时有任务在等待接收信号量唤醒该任务返回pdPASS。②如果队列满了直接返回err_QUEUE_FULL。
4.5释放信号量xSemaphoreGiveFromISR()
4.5.1函数原型 xSemaphore信号量句柄pxHigherPriorityTaskWoken在函数里会改变*pxHigherPriorityTaskWoken的值可根据它的值判断在中断退出后是否要进行任务切换。
4.5.2函数框架 xQueueGiveFromISR()是xQueueGenericSendFromISR()的简单版区别是不需要处理队列消息因为信号量没有消息存储空间。
4.6获取信号量xSemaphoreTake()
4.6.1函数原型 4.6.2函数框架
类似xQueueReceive()函数。 4.7获取信号量xSemaphoreTakeFromISR()
4.7.1函数原型 4.7.2函数框架
调用xQueueReceiveFromISR函数。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83310.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!