下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

内核
最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

crQUEUE_RECEIVE
[协程专用]

croutine.h
void crQUEUE_RECEIVE( CoRoutineHandle_t xHandle, QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait, BaseType_t *pxResult )

crQUEUE_RECEIVE 是一个宏。 上面原型中的数据类型仅供参考。

该宏的 crQUEUE_SEND() 和 crQUEUE_RECEIVE() 是协程, 相当于任务使用的 xQueueSend() 和 xQueueReceive() 函数。

crQUEUE_SEND 和 crQUEUE_RECEIVE 只能在协程中使用, 而 xQueueSend() 和 xQueueReceive() 只能在任务中使用。 注意,协程 只能向其他协程发送数据。 协程不能使用队列将数据发送到任务, 任务,反之亦然。

crQUEUE_RECEIVE 只能从协程函数本身调用,不能 从协程函数调用的函数中调用。 这是因为 协程无法维持自己的堆栈。

请参阅网络文档的协程部分,了解有关 了解有关在任务和协程之间以及在 ISR 和 协程之间传递数据的信息。

参数:
xHandle 调用协程的句柄。 这是协程函数的 xHandle 参数。
xQueue 接收数据的队列的句柄。 使用 xQueueCreate() API 函数创建队列时,句柄作为返回值获得。
pvBuffer 容纳接收项副本的缓冲区。创建队列时,将指定每个队列项的字节数。 此字节数已复制到 pvBuffer。
xTickToDelay 在无立即可用的数据的情况下,协程阻塞以等待队列中可用数据时的 tick 数。此时的实际时间由 configTICK_RATE_HZ(在 FreeRTOSConfig.h 中设置)定义。 常量 portTICK_PERIOD_MS 可用于将 tick 转换为毫秒(请参阅 crQUEUE_SEND 示例)。
pxResult 如果从队列中成功检索到数据,则 pxResult 指向的变量将被设置为 pdPASS,否则将设置为 ProjDefs.h 中定义的错误代码。
用法示例:
 // A co-routine receives the number of an LED to flash from a queue.  It
 // blocks on the queue until the number is received.
 static void prvCoRoutineFlashWorkTask( CoRoutineHandle_t xHandle,
                                        UBaseType_t uxIndex )
 {
 // Variables in co-routines must be declared static if they must maintain
 // value across a blocking call.
 static BaseType_t xResult;
 static UBaseType_t uxLEDToFlash;

    // All co-routines must start with a call to crSTART().
    crSTART( xHandle );

    for( ;; )
    {
        // Wait for data to become available on the queue.
        crQUEUE_RECEIVE( xHandle,
                         xCoRoutineQueue,
                         &uxLEDToFlash,
                         portMAX_DELAY,
                         &xResult );

        if( xResult == pdPASS )
        {
            // We received the LED to flash - flash it!
            vParTestToggleLED( uxLEDToFlash );
        }
    }

    crEND();
 }




Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.