硬汉嵌入式论坛

 找回密码
 立即注册
查看: 478|回复: 2
收起左侧

[FreeRTOS] 获取高水线函数的返回值异常

[复制链接]

4

主题

11

回帖

23

积分

新手上路

积分
23
发表于 2025-2-5 23:13:19 | 显示全部楼层 |阅读模式
void AppTask_MaixCAM( void* argument )
{
    App_Printf( "AppTask_MaixCAM_Init\r\n" );
    const TickType_t xFrequency = 500;

    App_Printf("StackHighWaterMark %d\r\n", uxTaskGetStackHighWaterMark(NULL));
    for(;; )
    {
            App_Printf("StackHighWaterMark %d\r\n", uxTaskGetStackHighWaterMark(NULL));
            LED_B_TOGGLE();
            vTaskDelay( pdMS_TO_TICKS( xFrequency ) );
    }
}

平台:使用CubeMX最新版6.13.0生成了基于CMSIS V2的FreeRTOS框架,STM32F103,Keil 5.41。

遇到的问题:在进入for循环之前,打印出的高水线一直是5。在进入for循环之后,打印出的高水线一直是2。

尝试过的方法:
1、更改堆栈大小64、128、256、512均试过,打印的值和问题描述里一致
2、重新创建工程,在一个最简单的单独的任务里进行测试,打印的值和问题描述里一致

3、创建多个任务打印,每个任务里打印的值和问题描述里一致

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2025-2-6 05:35:03 | 显示全部楼层
1、首先,这个用法不好,如果使用了CMSIS-RTOS V2封装层,就不要再调用FreeRTOS的原生API了,比如vTaskDelay等,这种情况就建议不要使用封装层了。

2、然后这个问题可以调试排查下,调试状态先看这个任务创建后,在调试的memory空间看下stack空间都填充为对应值没
[C] 纯文本查看 复制代码
/*
 * The value used to fill the stack of a task when the task is created.  This
 * is used purely for checking the high water mark for tasks.
 */
#define tskSTACK_FILL_BYTE                        ( 0xa5U )


然后调试进入这个任务的函数uxTaskGetStackHighWaterMark运行后,看看memory的变化,同时单步调试进入这个函数里面看看这个的判断
[C] 纯文本查看 复制代码
    static configSTACK_DEPTH_TYPE prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte )
    {
        configSTACK_DEPTH_TYPE uxCount = 0U;

        while( *pucStackByte == ( uint8_t ) tskSTACK_FILL_BYTE )
        {
            pucStackByte -= portSTACK_GROWTH;
            uxCount++;
        }

        uxCount /= ( configSTACK_DEPTH_TYPE ) sizeof( StackType_t );

        return uxCount;
    }
回复

使用道具 举报

4

主题

11

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2025-2-7 16:05:00 | 显示全部楼层
eric2013 发表于 2025-2-6 05:35
1、首先,这个用法不好,如果使用了CMSIS-RTOS V2封装层,就不要再调用FreeRTOS的原生API了,比如vTaskDela ...

好的,谢谢硬汉哥,我去看看栈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-26 00:29 , Processed in 0.222846 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表