FreeRTOS创建任务的堆栈应该有多大?

FreeRTOS英文原文
How big should the stack be?icon-default.png?t=M7J4https://www.freertos.org/FAQMem.html#StackSize

可以使用xTaskCreate()或xTaskCreateStatic() API函数创建任务。

函数的参数usStackDepth指定了将分配给正在创建的任务的堆栈的大小(用words,而不是bytes)

人们通常会问如何确定usStackDepth值,但是,除了下面描述的一种方式外,在使用RTOS时确定需要多少堆栈与编写裸机应用程序(不使用操作系统的应用程序)之间几乎没有区别。

与编写裸机应用程序一样,所需的堆栈数量取决于以下应用程序特定的参数:

  • 函数调用嵌套深度
  • 函数作用域变量声明的数量和大小
  • 函数参数的数量
  • 处理器体系结构
  • 编译器
  • 编译器优化级别
  • 中断服务例程的堆栈要求 - 对于许多RTOS端口,该要求为零,因为RTOS将在进入中断服务例程时切换到使用专用中断堆栈。

每次计划程序为了运行不同的任务而暂时停止运行任务时,处理器上下文都会保存到任务的堆栈中。然后,保存的处理器上下文将在下次运行任务时从任务堆栈中弹出。保存处理器上下文所需的堆栈空间是来自 RTOS 本身的任务堆栈要求的唯一补充。

虽然确定要分配任务的堆栈量并不容易,但RTOS确实提供了允许采用务实的试错方法调整任务堆栈大小的功能。uxTaskGetStackHighWaterMark() API 函数可用于查看实际使用了多少堆栈,如果分配的堆栈超过必要的数量,则可以减小堆栈大小,并且堆栈溢出检测功能可用于确定堆栈是否太小。此外,所有RTOS任务的堆栈使用情况都可以使用uxTaskGetSystemState()API函数或众多的FreeRTOS感知IDE插件之一。

FreeRTOS 下载包含每个端口的演示应用程序,每个演示应用程序附带的 FreeRTOSConfig.h 文件定义了一个名为 configMINIMAL_STACK_SIZE 的常量。强烈建议永远不要为任务分配小于端口演示应用程序中使用的configMINIMAL_STACK_SIZE设置的堆栈。

另请参阅 Erich Styger 关于使用 GNU 堆栈分析工具的博客文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QxNL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值