下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

内核
最新资讯
FreeRTOS-Plus-TCP 现具有统一的 IPv4 和 IPv6 功能,支持多接口。
为基于 FreeRTOS 的固件实现防砖化 MCU FOTA:
宣布停止支持 FreeRTOS 202012 LTS。
FreeRTOS 网站现已提供简体中文版本
新的 FreeRTOS Long Term Support 版本现已发布。

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.