栈溢出机制(Stack Overflow)

描述HRTOS任务栈在运行过程中因空间不足导致的溢出行为及检测机制。

机制定义

Stack Overflow = 栈空间使用量 > 分配栈大小

产生原因

1. 递归调用过深
2. 局部变量占用过大
3. 中断嵌套过深
4. 任务栈分配不足

检测机制

栈水位检测

通过填充模式检测栈使用边界。

溢出标记检测

在栈尾设置保护字节(canary)进行校验。

运行时监控

系统周期性检查任务栈使用情况。

演示代码


#include 

#define TASK_ID 0

/* 递归模拟栈压力 */
void recursive_test(int n)
{
    int buffer[32]; // 栈占用

    if(n <= 0) return;

    recursive_test(n - 1);
}

void task_stack_test(void)
{
    recursive_test(100); // 可能触发栈溢出
}

void system_init(void)
{
    os_task((unsigned int)task_stack_test, TASK_ID, 2, 0);
}

void main(void)
{
    system_init();

    os_task_release(TASK_ID);

    while(1)
    {
        os_nop();
    }
}
    

相关 API

任务创建(栈分配入口)

os_task()

任务栈管理

os_task_stack()

内存初始化

os_memset()

系统意义

栈溢出是RTOS系统中最隐蔽的错误类型之一,会导致不可预测行为甚至系统崩溃。

关联资源问题

内存碎片

Memory Fragmentation

资源分配

Resource Allocation

内存模型

Memory Model

相关导航

任务执行模型

Task Execution

调度系统

Scheduling Engine

中断机制

Interrupt Flow

任务生命周期

Task Lifecycle