2.3 任务栈溢出OsDoExcHook(EXC_STACKOVERFLOW)

任务栈溢出OsDoExcHook(EXC_STACKOVERFLOW)OsHandleRunTaskStackOverflow函数和OsHandleNewTaskStackOverflow函数调用,这2个函数定义在文件kernel\src\los_task.c,分别在当前运行任务,要调度运行的新任务发生任务栈溢出时调用。当执行到⑴、⑵处的代码时,根据参数类型EXC_STACKOVERFLOW调用对应的异常钩子函数。需要在系统初始化时执行LOS_RegExcHook(EXC_STACKOVERFLOW, (ExcHookFn)YourStackOverflowFunction)注册异常钩子函数,才能执行异常钩子函数。YourStackOverflowFunction需要自行定义实现在任务栈溢出异常时执行什么操作。如果没有注册过钩子函数则跳过不执行任何操作。

LITE_OS_SEC_TEXT STATIC VOID OsHandleRunTaskStackOverflow(VOID)
{
    PRINT_ERR("CURRENT task ID: %s:%d stack overflow!\n",
              g_losTask.runTask->taskName, g_losTask.runTask->taskID);
⑴  OsDoExcHook(EXC_STACKOVERFLOW);
}
......
LITE_OS_SEC_TEXT STATIC VOID OsHandleNewTaskStackOverflow(VOID)
{
    ......
    tmp = g_losTask.runTask;
    g_losTask.runTask = g_losTask.newTask;
⑵  OsDoExcHook(EXC_STACKOVERFLOW);
    g_losTask.runTask = tmp;
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

2.4 中断异常HalExcHandleEntry

该函数在发生中断异常时汇编代码中调用执行,用于处于系统异常,该函数宏定义在不同芯片架构实现的文件los_interrupt.c中,如kernel\arch\arm\cortex-m7\gcc\los_interrupt.c。处理系统中断异常时,执行到⑴处代码时,会根据参数类型EXC_INTERRUPT调用对应的异常钩子函数。和上述几个异常类型的钩子函数不一样,中断异常钩子函数不需要用户来注册,内核已经注册了中断异常钩子函数。相应的代码在文件components\exchook\los_exc_info.c中,注册代码语句为(VOID)LOS_RegExcHook(EXC_INTERRUPT, (ExcHookFn)OsExcMsgDump);,当发生系统中断异常时会调用(ExcHookFn)OsExcMsgDump函数,后文会详细分析都包含哪些异常信息。

LITE_OS_SEC_TEXT_INIT VOID HalExcHandleEntry(UINT32 excType, UINT32 faultAddr, UINT32 pid, EXC_CONTEXT_S *excBufAddr)
{
    ......
⑴  OsDoExcHook(EXC_INTERRUPT);
    OsExcInfoDisplay(&g_excInfo);
    HalSysExit();
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

小结

本文介绍了异常钩子函数的注册函数OsExcHookRegister和异常钩子函数的调用函数OsDoExcHook,以及介绍了支持的异常钩子函数类型等。

如果大家想更加深入的学习 OpenHarmony 开发的内容,不妨可以参考以下相关学习文档进行学习,助你快速提升自己:

OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源码解析》:https://qr18.cn/CgxrRy

系统架构分析:https://qr18.cn/CgxrRy

OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy

在这里插入图片描述

OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy

data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/maniuT/article/details/139527329","extend1":"pc","ab":"new"}">> id="blogExtensionBox" style="width:400px;margin:auto;margin-top:12px" class="blog-extension-box"> class="blog_extension blog_extension_type2" id="blog_extension"> class="extension_official" data-report-click="{"spm":"1001.2101.3001.6471"}" data-report-view="{"spm":"1001.2101.3001.6471"}"> class="blog_extension_card_left"> class="blog_extension_card_cont"> 鸿蒙开发学习资料领取!!! class="blog_extension_card_cont_r"> 微信名片
注:本文转载自blog.csdn.net的沧海一笑-dj的文章"https://blog.csdn.net/dengjin20104042056/article/details/98317601"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!