大疆嵌入式凉经

问我个人经历 实习 什么的都还好,画风一转开始问rtos。问我全局数组做栈和malloc做栈使用有什么区别?(不是堆和静态区的区别)  还问怎么避免和检测栈溢出。 
有大佬知道吗
#秋招# #大疆#
全部评论
细说一下:是问我RTOS里怎么避免和检测任务栈溢出;问我RTOS里用堆(malloc)和全局数组做任务栈有什么区别。
4 回复 分享
发布于 2022-08-25 15:24 浙江
以FreeRTOS为例。 有两种栈溢出检测办法。 第一种方法是在任务切换的时候检测栈指针是否越界(比较任务控制块TCB中的指向栈尾的指针和指向当前栈的指针),如果越界会触发栈溢出钩子函数vApplicationStackOverflowHook。这个方法速度比较快,但是不能检测所有栈溢出(比如任务执行过程中,在任务切换前发生了栈溢出,但在切换前又恢复正常,这无法检测)。 第二种方法在任务创建的时候将任务栈初始化为0XA5,任务切换的时候检查栈末尾16个字节是否为0xa5,假如不是,说明发生栈溢出 然后调用上面那个钩子函数。 通过宏taskCHECK_FOR_STACK_OVERFLOW 来选择方法1还是方法2。 配置为1则选择方法1,配置大于1则为方法2。 RT-Thread的检测貌似也是在任务发生调度切换的时候判断,方法主要是通过判断栈末尾是不是#来判断栈是不是溢出。
3 回复 分享
发布于 2022-12-14 02:36 陕西

相关推荐

面向对象的火龙果很爱...:去吃一顿炸鸡就走
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
小叮当411:应该是1-3个月吧
点赞 评论 收藏
分享
评论
3
34
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务