以FreeRTOS为例。 有两种栈溢出检测办法。 第一种方法是在任务切换的时候检测栈指针是否越界(比较任务控制块TCB中的指向栈尾的指针和指向当前栈的指针),如果越界会触发栈溢出钩子函数vApplicationStackOverflowHook。这个方法速度比较快,但是不能检测所有栈溢出(比如任务执行过程中,在任务切换前发生了栈溢出,但在切换前又恢复正常,这无法检测)。 第二种方法在任务创建的时候将任务栈初始化为0XA5,任务切换的时候检查栈末尾16个字节是否为0xa5,假如不是,说明发生栈溢出 然后调用上面那个钩子函数。 通过宏taskCHECK_FOR_STACK_OVERFLOW 来选择方法1还是方法2。 配置为1则选择方法1,配置大于1则为方法2。 RT-Thread的检测貌似也是在任务发生调度切换的时候判断,方法主要是通过判断栈末尾是不是#来判断栈是不是溢出。
3 1

相关推荐

昨天 17:42
门头沟学院 Java
最近,听说团子给很多人开了白菜劝退价,网上大佬很多人直接发帖子,说拒了,再看看boss这个,难道真的捡漏开始了?
牛泪中:ks也这么骗我,说是简历稀缺,实则露头就秒,我的投递记录滚轮要划动两次才能见底
投递美团等公司10个岗位
点赞 评论 收藏
分享
后端转测开第一人:再怎么劝退也没用的 某些群体总以为在一个幸存者偏差的软件上看见了极少数秋招上岸某个大厂的个例就幻想上了 事实上自己打开ssob沟通1000+连个小厂面试都没
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务