首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FreeRTOS卡在prvCheckTasksWaitingTermination上

FreeRTOS卡在prvCheckTasksWaitingTermination上
EN

Stack Overflow用户
提问于 2019-05-11 23:26:51
回答 1查看 1.4K关注 0票数 0

我正在使用Nucleo-STm32F767,我已经用CubeMX (包括FreeRTOS 9 )生成了代码。

我的代码有5个任务,每个任务都有一个循环,任务在每次迭代时挂起。

代码语言:javascript
运行
复制
  while( 1 )
  {   
    //Do something

    osDelay(TASK_MAIN_DELAY_MS);
  }

在这一点上,我的系统运行良好。

现在,我添加了一个任务来处理与SPI网络控制器的通信。网络控制器使用C语言编写了自己的中间件。

现在,每当我尝试挂起一个任务(使用prvCheckTasksWaitingTermination )时,我的代码就会被塞进osDelay中,并且我的系统将永远被阻塞。

代码语言:javascript
运行
复制
static void prvCheckTasksWaitingTermination( void )
{

    /** THIS FUNCTION IS CALLED FROM THE RTOS IDLE TASK **/

    #if ( INCLUDE_vTaskDelete == 1 )
    {
        BaseType_t xListIsEmpty;

        /* ucTasksDeleted is used to prevent vTaskSuspendAll() being called
        too often in the idle task. */
        while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
        {
            vTaskSuspendAll();
            {
                xListIsEmpty = listLIST_IS_EMPTY( &xTasksWaitingTermination );
            }
            ( void ) xTaskResumeAll();

            if( xListIsEmpty == pdFALSE )
            {
                TCB_t *pxTCB;

                taskENTER_CRITICAL();
                {
                    pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) );
                    ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
                    --uxCurrentNumberOfTasks;
                    --uxDeletedTasksWaitingCleanUp;
                }
                taskEXIT_CRITICAL();

                prvDeleteTCB( pxTCB );
            }
            else
            {
                mtCOVERAGE_TEST_MARKER();
            }
        }
    }
    #endif /* INCLUDE_vTaskDelete */

特别是,在这里停止了执行:而( uxDeletedTasksWaitingCleanUp >( UBaseType_t ) 0U ),因为uxDeletedTasksWaitingCleanUp等于0。

我不知道如何解决这个问题

有人能帮我吗?

谢谢并致以最良好的问候,费德里科

EN

回答 1

Stack Overflow用户

发布于 2022-07-19 19:05:30

我不知道这是否会对你的问题有所帮助,但我遇到了同样的问题,并能够克服它。

在我的freertos.cpp文件中,我连续执行了几个任务。但是,第二个任务正在执行,但每次都会失败,因为它试图使用的外围设备不能正常工作。看来,既然我对此没有兴趣,它就很难跳出任务。

一旦我修复了外围设备(在我的例子中,是一个试图连接到不可访问服务器的蜂窝调制解调器),程序就会正常执行,并且不会卡在这个prvCheckTasksWaitingTermination函数中。

因此,在您的情况下,这可能表明您的SPI配置存在需要注意的问题。

我希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56095025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档