我是靠谱客的博主 活力世界,最近开发中收集的这篇文章主要介绍FreeRTOS中的xQueueCreate,xQueueSend,xQueueReceive,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
xQueueCreate:
创建一个新的队列。为新的队列分配所需的存储内存,并返回一个队列处理。
原型:
xQueueHandle xQueueCreate(
unsigned portBASE_TYPE uxQueueLength,
unsigned portBASE_TYPE uxItemSize
);
uxQueueLength | 队列中包含最大项目数量。 |
uxItemSize | 队列中每个项目所需的字节数。项目通过复制而不是引用排队,因为,所需的字节数,将复制给每个项目。队列中每个项目必须分配同样大小。 |
struct tagMsgQueuePara
{
xQueueHandle ParseQueueHandle;
}RamPara;
struct tagTaskQueueMessage
{
int Message;
};
RamPara = xQueueCreate(1, sizeof(struct tagTaskQueueMessage));
这样就创建了一个tagTaskQueueMessage结构体的空间
xQueueSend:
传递一个项目到队列。这个项目通过复制而不是通过引用排队。这个函数不能从中断服务程序调用。参考xQueueSendFromISR(),在ISR中交错使用。
原型:
portBASE_TYPE xQueueSend(
xQueueHandle xQueue,
const void * pvItemToQueue,
portTickType xTicksToWait
);
xQueue | 处理将项目传递给队列 |
pvItemToQueue | 指向队列中放置的项目的指针。项目的大小,由队列创建时定义,因为许多字节可以从 pvItemToQueue复制到队列的储存区域 |
xTicksToWait | 最大时间量(任务应该锁住,等待队列中的可用空间)应该已经满了。如果设置为0,调用将立即返回。时间使用滴答周期来定义,因此如果需要,常量portTICK_RATE_MS应该用来转换实时时间 |
struct tagTaskQueueMessage
{
int Message;
};
struct tagTaskQueueMessage message;
message.Message = 1;
xQueueSend(RamPara,
(void *)&message,
(portTickType)0);
沿用了上面的创建,这样就入队了。
xQueueRece:
从队列接收一个项目。这个项目通过复制接收,因此缓冲器必须提供足够大的空间。复制进缓冲器的字节数,在队列创建时已经定义。
这个函数一定不能在中断服务程序中使用。参考 xQueueReceiveFromISR 获得能够的选择。
原型:
portBASE_TYPE xQueueReceive(
xQueueHandle xQueue,
void *pvBuffer,
portTickType xTicksToWait
);
pxQueue | 将要接收项目的队列句柄 |
pvBuffer | 指向将要复制接收项目的缓冲器的指针。 |
xTicksToWait | 任务中断并等待队列中可用空间的最大时间,应该是满的。如果设置为0,调用将立刻返回。时间在片区间中定义,如果需要,portTICK_RATE_MS常量用来转换为实际时间。 如果 INCLUDE_vTaskSuspend 定义为1 ,指定的中断时间( portMAX_DELAY) 将导致任务无限期中断(没有时间溢出)。 |
struct tagTaskQueueMessage
{
int Message;
};
struct tagTaskQueueMessage message1;
xQueueReceive(RamPara,
(void *)&message1,
0xffff);
沿用上面的,,这样就出队获取了数据。
最后
以上就是活力世界为你收集整理的FreeRTOS中的xQueueCreate,xQueueSend,xQueueReceive的全部内容,希望文章能够帮你解决FreeRTOS中的xQueueCreate,xQueueSend,xQueueReceive所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复