C语言 通过队列使用指针- FreeRTOS

2w2cym1i  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(74)

我习惯于在结构中使用队列,但我不明白给予队列指针有什么好处。
队列只复制指针而不复制数据,在这种情况下,我必须管理内存访问以避免冲突。使用互斥锁或信号量从不同任务访问同一内存部分哪个更好?
我想找到在我的任务之间共享“大”结构的最佳方式。

uxhixvfz

uxhixvfz1#

从FreeRtos文档中,它建议传递指向大型结构的指针是可以的。对于任务间内存访问,最安全的选择是使用锁,并且所引用的内存不应该是动态内存。

QueueHandle_t xQueue1, xQueue2;

    /* Create a queue capable of containing 10 unsigned long values. */
    xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) );

    if( xQueue1 == NULL )
    {
        /* Queue was not created and must not be used. */
    }

    /* Create a queue capable of containing 10 pointers to AMessage
    structures.  These are to be queued by pointers as they are
    relatively large structures. */
    xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );

    if( xQueue2 == NULL )
    {
        /* Queue was not created and must not be used. */
    }

字符串
Mastering the FreeRTOS Real Time Kernel - a Hands On Tutorial Guide的第154页也提供了一些见解。

相关问题