鸿蒙轻内核M核的故障管家:Fault异常处理
发布网友
发布时间:2024-10-11 22:09
我来回答
共1个回答
热心网友
时间:2024-10-12 03:16
摘要:本文简要介绍了Fault异常类型、向量表及其代码,以及异常处理的C语言程序,随后详细分析了异常处理汇编函数的实现代码。
本文内容来源于华为云社区《鸿蒙轻内核M核源码分析系列十八 Fault异常处理》,作者:zhushy。
Fault异常处理模块与OpenHarmony LiteOS-M内核芯片架构紧密相关,它能够处理HardFault、MemManage、BusFault、UsageFault等故障异常。关于Cortex-M芯片的相关知识,不在本文的讨论范围内,读者可参考《Cortex™-M7 Devices Generic User Guide》等官方资料。本文所涉及的源码以OpenHarmony LiteOS-M内核为例,可在开源站点gitee.com/openharmony/k...获取。
1、Fault Type异常类型
Fault类型表格显示了各种故障及其处理机制、Bit Name标记、Fault status register故障状态寄存器。该表格摘自《Cortex™-M7 Devices Generic User Guide》。
2、Vector table向量表
向量表包含栈指针的复位值和开始地址,也称为异常向量。异常可以看作特殊的中断,本文主要关注NMI、HardFault、Memory management fault、Bus fault、Usage fault、SVCall等异常。
在中断初始化时,会初始化该异常向量表,代码位于kernel\arch\arm\cortex-m7\gcc\los_interrupt.c。本文主要分析这些汇编函数的代码。
3、HalExcHandleEntry异常处理C程序入口
HalExcHandleEntry异常处理函数是汇编异常函数跳转到C语言程序的入口,定义在文件kernel\arch\arm\cortex-m7\gcc\los_interrupt.c,被kernel\arch\arm\cortex-m7\gcc\los_exc.S文件中的汇编函数调用。函数参数由汇编程序中的R0-R3寄存器传值进来。
4、Los_Exc异常处理汇编函数
上文介绍了Vector table向量表,已经提到了在文件kernel\arch\arm\cortex-m7\gcc\los_exc.S中定义的异常处理函数。当发生Fault故障异常时,会调度执行这些异常处理函数,本文会详细分析函数的源代码来掌握内核如何处理这些发生的异常。
本文介绍了Fault异常类型、向量表及其代码,异常处理C语言程序,异常处理汇编函数实现代码。感谢阅读,如有任何问题、建议,都可以在博客下留言给我,谢谢。