打印
[经验分享]

FreeRTOS创建任务时的堆栈大小问题

[复制链接]
150|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
FreeRTOS创建任务函数

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
                            const char * const pcName,
                            const configSTACK_DEPTH_TYPE usStackDepth,
                            void * const pvParameters,
                            UBaseType_t uxPriority,
                            TaskHandle_t * const pxCreatedTask )

参数描述:
pvTaskCode
        函数指针,可以简单地认为任务就是一个C函数。
        它稍微特殊一点:***不退出,或者退出时要调用"vTaskDelete(NULL)"
pcName
        任务的名字,FreeRTOS内部不使用它,仅仅起调试作用。
        长度为:configMAX_TASK_NAME_LEN
usStackDepth
        每个任务都有自己的栈,这里指定栈大小。
        单位是word,比如传入100,表示栈大小为100 word,也就是400字节。
        最大值为uint16_t的最大值。
        怎么确定栈的大小,并不容易,很多时候是估计。
pvParameters

        调用pvTaskCode函数指针时用到:pvTaskCode(pvParameters)
uxPriority
        优先级范围:0~(configMAX_PRIORITIES – 1)
        数值越小优先级越低,:更高优先级的、或者后面创建的任务先运行。
        如果传入过大的值,xTaskCreate会把它调整为(configMAX_PRIORITIES – 1)
pxCreatedTask
        用来保存xTaskCreate的输出结果:task handle。
        以后如果想操作这个任务,比如修改它的优先级,就需要这个handle。
        如果不想使用该handle,可以传入NULL。
返回值
        成功:pdPASS;
        失败:errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY(失败原因只有内存不足)
        注意:返回值是pdFAIL不对。
        pdFAIL是0,errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY是-1。

其中堆栈大小,是受到配置文件FreeRTOSConfig.h中的宏定义configTOTAL_HEAP_SIZE限制的,堆栈大小不能超过宏定义的大小。



————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_45324318/article/details/148792204

使用特权

评论回复
沙发
旧时光放映机| | 2025-7-12 08:23 | 只看该作者
确实,确定任务的堆栈大小是一个需要仔细考虑的问题。一般来说,堆栈大小取决于任务的复杂度和它需要处理的数据量。如果任务很简单,可能只需要几十个word的栈空间;但如果任务复杂,可能需要几百甚至上千个word。建议在实际应用中,先给一个估计值,然后通过调试工具检查是否有堆栈溢出的情况,再根据实际情况调整。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

107

主题

4286

帖子

3

粉丝