08嵌入式实时操作系统FreeRTOS信号量与任务同步.ppt
《08嵌入式实时操作系统FreeRTOS信号量与任务同步.ppt》由会员分享,可在线阅读,更多相关《08嵌入式实时操作系统FreeRTOS信号量与任务同步.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式实时操作系统嵌入式实时操作系统FreeRTOSFreeRTOS原理及应用原理及应用基基于于STM32STM32微控制器微控制器嵌入式实时操作系统嵌入式实时操作系统FreeRTOS原理及应用原理及应用张超张超 主编主编STM32 Cortex-M4通用开发板通用开发板嵌入式实时操作系统嵌入式实时操作系统FreeRTOS原理及应用原理及应用二值信号量二值信号量计数信号量计数信号量互斥信号量互斥信号量递归互斥信号量递归互斥信号量FreeRTOS信号量与任务同步信号量与任务同步主要内容:主要内容:一、二值信号量二值信号量FreeRTOS信号量与任务同步信号量与任务同步二值信号量二值信号量二值信号
2、量相当于只有一个队列项的队列。创建二值信号量使用的创建函数与创建队列使用的是同一个函数。二值信号量只关心这个特殊的队列状态,要不为空,要不为满,它并不关心队列中存放的是什么消息。二值信号量二值信号量二值信号量主要用于同步,用于任务和任务之间的同步或者中断和任务之间的同步。创建二值信号量创建二值信号量二值信号量二值信号量FreeRTOS创建二值信号量使用的是宏vSemaphoreCreateBinary()和xSemaphoreCreateBinary(),这二个宏最终被队列创建函数xQueueGenericCreate()所替换,使用这二个宏创建二值信号量,需要宏configSUPPORT_D
3、YNAMIC_ALLOCATION为1。创建二值信号量创建二值信号量二值信号量二值信号量1、vSemaphoreCreateBinary()这是旧版本使用的二值信号量创建宏,在semphr.h文件中定义:#define vSemaphoreCreateBinary(xSemaphore)(xSemaphore)=xQueueGenericCreate(UBaseType_t)1,semSEMAPHORE_QUEUE_ITEM_LENGTH,queueQUEUE_TYPE_BINARY_SEMAPHORE);if(xSemaphore)!=NULL)(void)xSemaphoreGive(xS
4、emaphore);创建二值信号量创建二值信号量二值信号量二值信号量2、xSemaphoreCreateBinary()新版本的FreeRTOS使用此宏创建二值信号量,同样是通过调用xQueueGenericCreate()队列创建函数来创建二值信号量,只不过创建成功后,并没有释放此二值信号量。#define xSemaphoreCreateBinary()xQueueGenericCreate(UBaseType_t)1,semSEMAPHORE_QUEUE_ITEM_LENGTH,queueQUEUE_TYPE_BINARY_SEMAPHORE);释放二值信号量释放二值信号量二值信号量二值
5、信号量1、xSemaphoreGive()xSemaphoreGive()是一个宏,用于释放信号量,最终实现功能的是xQueueGenericSend()队列发送函数。#define xSemaphoreGive(xSemaphore)xQueueGenericSend(QueueHandle_t)(xSemaphore),NULL,semGIVE_BLOCK_TIME,queueSEND_TO_BACK);释放二值信号量释放二值信号量二值信号量二值信号量2、xSemaphoreGiveFromISR()释放信号量的中断版本,在中断服务函数中使用,同样也是一个宏。可以用来释放二值信号量和计数型
6、信号量,但不能用于释放互斥信号量。最终实现功能的是xQueueGiveFromISR()函数。#define xSemaphoreGiveFromISR(xSemaphore,pxHigherPriorityTaskWoken)xQueueGiveFromISR(QueueHandle_t)(xSemaphore),(pxHigherPriorityTaskWoken);获取二获取二值信号量值信号量二值信号量二值信号量1、xSemaphoreTake()xSemaphoreTake()是一个宏,用于获取信号量,不止是二值信号量,计数型信号量、互斥信号量也都是使用此宏来释放信号量。其宏定义为:#
7、define xSemaphoreTake(xSemaphore,xBlockTime)xQueueSemaphoreTake(xSemaphore),(xBlockTime);获取二获取二值信号量值信号量二值信号量二值信号量2、xSemaphoreTakeFromISR()获取信号量的中断版本,在中断服务函数中使用,同样也是一个宏。可以用来获取二值信号量和计数型信号量,但不能用于获取互斥信号量。最终实现功能的是xQueueReceiveFromISR()函数。#define xSemaphoreTakeFromISR(xSemaphore,pxHigherPriorityTaskWoken)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 08 嵌入式 实时 操作系统 FreeRTOS 信号量 任务 同步
限制150内