FreeRTOS中的xQueueCreate,xQueueSend,xQueueReceive

26 篇文章 18 订阅
5 篇文章 1 订阅

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);
沿用上面的,,这样就出队获取了数据。

  • 17
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
FreeRTOS,xQueueReceive函数用于从队列接收数据。它的原型是: portBASE_TYPE xQueueReceive(xQueueHandle xQueue, void *pvBuffer, portTickType xTicksToWait); 这个函数将从xQueue指定的队列接收数据,并将数据存储在pvBuffer指向的缓冲区。xTicksToWait参数指定了等待的最大时间(以滴答周期为单位),如果队列为空,任务将被阻塞等待数据可用。如果设置为0,函数将立即返回。 例如,使用xQueueReceive函数接收数据可以像这样: struct tagTaskQueueMessage { int Message; }; struct tagTaskQueueMessage message; xQueueReceive(RamPara, (void *)&message, (portTickType)0); 在上面的示例,我们定义了一个名为message的结构体,然后调用xQueueReceive函数从RamPara队列接收数据,并将数据存储在message变量。 需要注意的是,xQueueReceive函数不能从断服务程序调用,如果需要在接收数据,应该使用xQueueReceiveFromISR函数。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [FreeRTOS — 消息队列](https://blog.csdn.net/zwl1584671413/article/details/80020601)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [FreeRTOS的xQueueCreate,xQueueSend,xQueueReceive](https://blog.csdn.net/qq_38531460/article/details/117807671)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮若于心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值