在FreeRtos或TI rtos

时间:2017-06-08 11:35:46

标签: stack rtos freertos

最近我正在使用Rtos并创建了一些任务来执行我所需的操作。虽然每次使用xTaskCreate或TI GUI配置创建新任务时,我都会尝试保持堆栈大小,以免堆栈溢出。 有没有办法计算我的任务对这些事件使用的最大堆栈大小? 1.全局和局部变量使用的堆栈 2.堆栈使用函数的最大递归次数 3.包括中断上下文切换

2 个答案:

答案 0 :(得分:2)

编译器,编译器优化级别,CPU架构,局部变量分配和函数调用嵌套深度都对堆栈大小有很大影响。 RTOS影响最小。例如,FreeRTOS将在Cortex-M上向堆栈添加大约60个字节 - 用于在任务未运行时存储任务的上下文。无论您使用哪种方法计算非RTOS项目中的堆栈使用情况,也可以在RTOS项目中使用 - 然后添加大约60个字节。

您可以计算这些内容,这在安全关键应用程序中很重要,但在其他情况下,更实用的方法是尝试并查看 - 使用RTOS的功能来测量实际使用的堆栈数量使用堆栈溢出检测 - 然后调整,直到找到最佳状态。 http://www.freertos.org/Stacks-and-stack-overflow-checking.html http://www.freertos.org/uxTaskGetStackHighWaterMark.html

答案 1 :(得分:0)

我使用了以下代码:

TaskHandle_t cipTask;
UBaseType_t uxHighWaterMark;
/* Print actual size of stack has used */
for (;;) {  
  uxHighWaterMark = uxTaskGetStackHighWaterMark(cipTask);
  Serial.println(uxHighWaterMark);
}