This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-CC1352R1:消息队列不工作。

Guru**** 2457760 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1282258/launchxl-cc1352r1-message-queue-not-working

器件型号:LAUNCHXL-CC1352R1

您好!

我将使用 tirtos7在任务之间进行通信。 我遵循了本教程: https://dev.ti.com/tirex/explore/node?node=A__ATOcjUy6zyynCMWH-Ys6Ng__com.ti.SIMPLELINK_ACADEMY_CC13XX_CC26XX_SDK__AfkT0vQ__LATEST&search=queues

我可以编译和闪存而不会出现  任何问题、但当我到达 mq_receive 或 mq_send 时、不会出现任何情况。 如果我停止程序,我看到它卡在 Error_raiseX()中,特别是在这个错误中:  

如果(Error_policy_D == Error_spin){
for (;;){

你有任何线索,我可能是错的?

消息队列初始化:

    mqAttrs.mq_maxmsg = MSG_NUM;
    mqAttrs.mq_msgsize = MSG_SIZE;
    mqAttrs.mq_flags = 0;
    mqdes = mq_open ("alarm", O_RDWR | O_CREAT,
            0664, &mqAttrs);
    if (mqdes == (mqd_t)-1) {
        /* mq_open() failed */
        while (1);
    }

    /* Construct writer/reader Task threads */
    Task_Params_init(&taskParams);
    taskParams.stackSize = TASKSTACKSIZE;
    taskParams.stack     = &task1Stack;
    taskParams.priority  = 2;
    Task_construct(&task1Struct, (Task_FuncPtr)mainTask, &taskParams, (void *)&mqdes);
    taskParams.stack     = &task2Stack;
    taskParams.priority  = 1;
    Task_construct(&task2Struct, (Task_FuncPtr)task1Fxn, &taskParams, (void *)&mqdes);

维护任务:

mqd_t* mqdes = arg0;
int msg = 5;

mq_send(*mqdes , (char *)&msg, sizeof(msg), 0);

任务1Fxn:

mqd_t      *mqdes = arg0;
int msg;

while (1)
{
    while (mq_receive(*mqdes, (char *)&msg, sizeof(msg), NULL) != -1) {
       GPIO_toggle(CONFIG_GPIO_LED_0);
    }
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alexis:

    您可以在 mq_receve()和 mq_send()上放置一个断点,然后对其进行单步执行。 这样、您可以检查崩溃发生的位置。  

    此致、

    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    似乎是大小检查:

     if (msg_len <(size_t)((msgQueue->attrs).mq_msgsize)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更新:如果发送消息、然后在其工作的 main (而不是任务)中直接调用接收函数。  
    所以 问题似乎在于将 mqd_t 结构传递给任务。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alexis:

     if (msg_len <(size_t)((msgQueue->attrs).mq_msgsize)

     您的代码中 mqAttrs.mq_msgsize = MSG_SIZE;的值是什么?

    是否添加了相同的定义 size_of (int)

    #define MSG_SIZE sizeof (int) 

    如果它卡在大小检查中、请检查传递给 msg_len 和 mq_msgsize 的实际值。  

    此致、
    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、MSG_SIZE 大小(int)。

    当我在调试中输入 mq_receive()时,它中没有值。 看起来该结构没有正确地传递给任务/函数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alexis:

    这是我需要测试的内容、请预计周一得到答案

    此致、
    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alexis:

    我按原样使用教程。 我能够使它在字符回显的地方工作,当我键入"X"时, LED 将按预期切换。 请确保您已完成本教程的每个步骤。  

    https://dev.ti.com/tirex/explore/node?node=A__ATOcjUy6zyynCMWH-Ys6Ng__com.ti.SIMPLELINK_ACADEMY_CC13XX_CC26XX_SDK__AfkT0vQ__LATEST&search=queues

    此致、

    SID