推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

实验14_栈溢出检测.docx

资料介绍

实验 14:栈溢出检测

实验说明

实验概述

栈溢出是嵌入式开发中最隐蔽、最难排查的问题之一。当任务栈空间不足时,栈溢出会破坏相邻内存区域的数据,导致系统出现随机性崩溃、函数返回地址异常等难以定位的错误。FreeRTOS 提供了栈溢出检测机制,可以在栈溢出发生时触发钩子函数,帮助开发者快速定位问题。本实验故意创建一个栈空间过小的任务,演示栈溢出检测的工作流程。

实验原理

FreeRTOS 的栈溢出检测通过 configCHECK_FOR_STACK_OVERFLOW 宏配置,支持两种检测方法:方法 1(值为 1)在任务切换时检查栈指针是否超出栈空间边界,速度快但可能漏检;方法 2(值为 2)在栈空间末尾写入一个标记值,每次切换时检查该标记是否被破坏,更精确但速度稍慢。当检测到栈溢出时,系统会调用 vApplicationStackOverflowHook() 钩子函数,在该函数中可以进行错误记录和系统恢复操作。

关键知识点

1. 栈溢出检测通过 configCHECK_FOR_STACK_OVERFLOW 启用。

2. 方法 2 比方法 1 更精确,推荐使用。

3. 栈溢出钩子函数中应立即记录错误信息并停止系统。

实验现象

栈溢出任务因定义的局部数组过大导致栈空间被破坏,触发栈溢出钩子函数,打印错误信息。

完整代码

  c
#include "FreeRTOS.h"
#include "task.h"


部分文件列表

文件名 大小
实验14_栈溢出检测.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单
  • 21下载积分 打赏60.00元   3天前

    用户:gsy幸运

  • 21下载积分 打赏70.00元   3天前

    用户:铁蛋锅

  • 21下载积分 打赏65.00元   3天前

    用户:xzxbybd

  • 21下载积分 打赏60.00元   3天前

    用户:jh0355

  • 21下载积分 打赏60.00元   3天前

    用户:w178191520

  • 21下载积分 打赏20.00元   3天前

    用户:jh03551

  • 21下载积分 打赏20.00元   3天前

    用户:sun2152

  • 21下载积分 打赏20.00元   3天前

    用户:kk1957135547

  • 21下载积分 打赏25.00元   3天前

    用户:w1966891335

  • 21下载积分 打赏20.00元   3天前

    用户:xuzhen1

  • 21下载积分 打赏15.00元   3天前

    用户:x15580286248

  • 21下载积分 打赏25.00元   3天前

    用户:pcb

  • 21下载积分 打赏20.00元   3天前

    用户:bhacker

  • 21下载积分 打赏15.00元   3天前

    用户:liqiang9090

  • 21下载积分 打赏25.00元   3天前

    用户:有理想666

  • 21下载积分 打赏15.00元   3天前

    用户:godbox

  • 21下载积分 打赏15.00元   3天前

    用户:aetek

  • 21下载积分 打赏5.00元   3天前

    用户:mulanhk

  • 21下载积分 打赏5.00元   3天前

    用户:JuneLin61

推荐下载