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.

[参考译文] CC3235S:POSIX 死锁

Guru**** 2558250 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1040008/cc3235s-posix-dead-lock

器件型号:CC3235S

您好!

我对 POSIX 头有些陌生。

我一直在使用开箱即用项目从 mainthread()方法创建新线程。

我要启动的函数是检查 UART 传入消息的循环。

但是,我这样做似乎是导致系统冻结(死锁)?

是否可以在我在另一个线程上启动的函数中放置 while (1)?

下面是 开始线程的代码:

   
     int32_t RetVal;
    pthread_attr_t pAttrs;
    struct sched_param priParam;
    
    pthread_attr_init(&pAttrs);
    priParam.sched_priority = 1;
    RetVal = pthread_attr_setschedparam(&pAttrs, &priParam);
    RetVal |= pthread_attr_setstacksize(&pAttrs, LINKLOCAL_STACK_SIZE);

    if (RetVal)
    {
        /* Handle Error */
        UART_PRINT("Unable to configure thread parameters \n");
        while (1)
        {
            ;
        }
    }


    RetVal = pthread_create(&thread, &pAttrs, test, NULL);

我的测试循环(没有 UART、只需测试题头)

void* test(void *pvParameters)
{
    int a=0;
    while (1)
    {
        a=0;
        for (int i = 0; i < 10000000; i++)
        {
            a++;
        }
        UART_PRINT("test of doom\r\n");

    }
}

我尝试更改线程优先级... 但似乎什么都不起作用。

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

    可以在线程中使用无限(while (1))循环。

    我不确定您的主代码在触发"测试"线程后会执行什么操作、因此不知道会发生什么情况。

    您可以使用调试器暂停执行并检查它停留在何处。

     

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

    它 卡在该环路中。

    我想我可能已经找到了一个解释。

    是否可以确认优先级1是最低的?

    当具有相同优先级的2个线程具有循环时会发生什么情况?

    系统是否可以处理此问题并在两者之间切换而不使用任何信标?

    此致、

    特奥

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

    优先级1是最低优先级。

    如果2个线程具有相同的优先级-一个线程将等待、另一个线程将阻断(这不会在您的环路实现中发生)。

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

    再次感谢 Kobi、

    优先级为1的所有线程、因此循环会中断所有其他线程。

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

    仅为了澄清、TIRTOS 的行为如上所述。

    使用 FreeRTOS 时-您可以在具有相同优先级的线程之间启用时间分片。