FreeRTOS基础四:特殊的队列之邮箱 |
您所在的位置:网站首页 › freeRtos › FreeRTOS基础四:特殊的队列之邮箱 |
邮箱(Mailbox)
FreeRTOS中的队列有一种特殊的用法,我们把它叫做邮箱。邮箱不是另一种组件,它还是队列,只是用法比较特殊而已。 邮箱是长度为1的队列,下文都用邮箱这个词代替。接收数据的任务或者中断ISR从这个邮箱中读取数据的时候,并不会将这个数据从邮箱中删除,它会一直保留,直到新的数据被写入到邮箱覆盖之前的数据。任何任务或者ISR都可以从这个邮箱中读取数据。 In other words, In the case of a mailbox, a writes task sends data to the queue and a receiver task reads data from the queue but does not remove it until it is overwritten by a sender task. 写入数据到邮箱向邮箱中写入新的数据,要用xQueueOverwrite()而不是xQueueSendToBack()函数。如果邮箱满了,则xQueueOverwrite()会覆盖之前邮箱中的数据而永远不会阻塞。注意只能对长度为1的队列使用这个函数。 BaseType_t xQueueOverwrite( QueueHandle_t xQueue, const void * pvItemToQueue );参数xQueue:邮箱的句柄 参数pvItemToQueue:存放到邮箱中的数据的指针。邮箱将存储此指针指向的数据的备份。 返回值:只可能返回pdPASS,没有其他返回值。因为是覆盖写入,而不需要等待邮箱有空闲空间,所以总是能写入成功。 从邮箱中读取数据使用内核函数xQueuePeek()来从邮箱读取一个元素,但不会将这个元素从邮箱中删除,也不会修改它。 BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait );此函数的参数和返回值用法与xQueueReceive()一致,这里不再赘述。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |