哈喽,又见面了.
一.信号量
1.1创建二进制信号量
#define xSemaphoreCreateBinary() xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE )
上篇队列已经提到,信号量也是用队列实现的.这里semSEMAPHORE_QUEUE_ITEM_LENGTH是0,最后一个参数queueQUEUE_TYPE_BINARY_SEMAPHORE其实没有使用.
1.2创建计数信号量
#define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) )

计数信号量和二进制其实一样
1.3创建互斥锁
#define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX )


互斥锁创建稍有不同

本文介绍了FreeRTOS中的信号量,包括二进制信号量、计数信号量和互斥锁的创建。重点讲解了信号量释放和获取的原理,提到了优先级反转恢复机制,并指出互斥锁仅适用于任务,不适用于中断。同时,文章指出由于信号量基于队列实现,效率可能不高,建议使用任务通知作为更高效的通讯方式。
最低0.47元/天 解锁文章
1326

被折叠的 条评论
为什么被折叠?



