您的位置:控制工程论坛网论坛 » 自动化软件 » 嵌入式系统使用堆栈监视器

oks123

oks123   |   当前状态:在线

总积分:940  2024年可用积分:0

注册时间: 2010-11-05

最后登录时间: 2023-10-12

空间 发短消息加为好友

嵌入式系统使用堆栈监视器

oks123  发表于 2022/11/29 14:49:58      620 查看 3 回复  [上一主题]  [下一主题]

手机阅读

对许多的嵌入式开发者而言,堆栈似乎是一股相当神秘的力量。当奇怪的事情开始发生,工程师终于被难倒了,他们开始思考,也许堆栈中发生了什么事。结果是盲目地调整堆栈的大小和位置等等。但该错误往往是与堆栈无关的,但怎能如此确定?毕竟,有多少工程师真的实际执行过最坏情况下的堆栈大小分析?
堆栈大小是在编译时就静态分配好的,但堆栈是以动态的方式使用的。随着代码的执行,应用程序需要的变量、返回的地址和其它信息被不断存储在堆栈中。这种机制导致堆栈在其分配的内存中不断增长。然而,这种增长有时会超出编译时确定的容量极限,导致堆栈破坏相邻内存区域的数据。
绝对确保堆栈正常工作的一种方法是实现堆栈监视器,将它作为系统“保健”代码的一部分(有多少工程师会这样做?)。堆栈监视器会在堆栈和“其它”内存区域之间创建一个缓冲区域,并填充已知的位模式。然后监视器会不断的监视图案是否有任何变化。如果该位模式发生了改变,那就意味着堆栈增长得太大了,即将要把系统推向黑暗地狱!此时监视器可以记录事件的发生、系统状态以及任何其它有用的数据,供日后用于问题的诊断。
大多数实时操作系统(RTOS)或实现了内存保护单元(MPU)的微控制器系统中都提供有堆栈监视器。可怕的是,这些功能默认都是关闭状态,或者经常被开发人员有意关闭。在网络上快速搜寻一下可以发现,很多人建议关闭实时操作系统中的堆栈监视器以节省56字节的闪存空间。等等,这可是得不偿失的做法!

1楼 0 0 回复
  • ak14

    ak14   |   当前状态:在线

    总积分:433  2024年可用积分:0

    注册时间: 2007-11-12

    最后登录时间: 2023-08-18

    空间 发短消息加为好友

    ak14   发表于 2022/11/30 16:11:54

    学习

    2楼 回复本楼

    引用 ak14 2022/11/30 16:11:54 发表于2楼的内容

  • boyuebj

    boyuebj   |   当前状态:在线

    总积分:934  2024年可用积分:0

    注册时间: 2010-09-25

    最后登录时间: 2023-10-24

    空间 发短消息加为好友

    boyuebj   发表于 2022/11/30 16:40:36

    ding

    3楼 回复本楼

    引用 boyuebj 2022/11/30 16:40:36 发表于3楼的内容

  • rdyb

    rdyb   |   当前状态:在线

    总积分:864  2024年可用积分:0

    注册时间: 2010-08-17

    最后登录时间: 2023-10-24

    空间 发短消息加为好友

    rdyb   发表于 2022/11/30 16:58:03

    4楼 回复本楼

    引用 rdyb 2022/11/30 16:58:03 发表于4楼的内容

总共 , 当前 /