Os ShutdownHook调用深度剖析
Posted 嵌入式软件实战派
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Os ShutdownHook调用深度剖析相关的知识,希望对你有一定的参考价值。
根据项目要求,我将ShutdownHook配置好了,然后生成代码就可以使用了。
关于ShutdownHook的作用,请戳《AUTOSAR BswM Shutdown流程配置详解》>>>
但是,我很好奇,对,是好奇,好奇这个ShutdownHook的调用过程是怎样的,顺便学习下OS的调用机制。
程序员都有一颗刨根问底的心。
直接仿真查看
我能想到的最直接的办法是,在ShutdownHook函数上设置个断点,然后打开调试窗口的Call Stack窗口来查看函数的调用过程,想着其实很简单。
然而……
以上是设断点的地方,以下是仿真跑到断点处的Call Stack
实际上,只能看出是Os_HookWrapperStatusHook调用了这个函数而已。
进一步继续单步走,再查看Call Stack
看到这个也许想抓狂,根本就看不出调用源头来源于哪。
人肉搜索
没办法,回到老办法,查代码,人肉分析函数的调用关系
这个Os_Hal_ContextConfigType的定义是这样的
struct Os_Hal_ContextConfigType_Tag
{
uint32 Os_Hal_SL; /*!< +00h Stack lowest,32 bit aligned address */
uint32 Os_Hal_SP; /*!< +04h Stack pointer (stack highest, 32 bit aligned address) */
uint32 Entry; /*!< +08h Program counter (entry address)*/
uint32 ReturnAddress; /*!< +0Ch Link pointer (return address)*/
uint32 Os_Hal_PSW; /*!< +10h Program status word */
uint32 Os_Hal_PMR; /*!< +14h Interrupt priority masking */
uint32 Os_Hal_ASID; /*!< +18h Address space ID */
};
/*! Core configuration data: OsCore0 */
CONST(Os_CoreAsrConfigType, OS_CONST) OsCfg_Core_OsCore0 =
{
/* .Core = */
{
/* .Status = */ OS_CORE_CASTSTATUS_COREASRSTATUS_2_CORESTATUS(OsCfg_Core_OsCore0_Status_Dyn),
/* .HwConfig = */ &OsCfg_Hal_Core_OsCore0,
/* .InterruptSourceRefs = */ OsCfg_Hal_Core_OsCore0_InterruptSourceRefs,
/* .InterruptSourceCount = */ (Os_ObjIdxType)OS_CFG_NUM_CORE_OSCORE0_INTERRUPTSOURCEREFS,
/* .Id = */ OS_CORE_ID_0,
/* .Trace = */ &OsCfg_Trace_OsCore0_Dyn,
/* .IsAsrCore = */ TRUE,
/* .IsAutostart = */ TRUE,
/* .IsMasterStartAllowed = */ FALSE,
/* .HasPrivilegedHardwareAccess = */ TRUE
},
/* .Dyn = */ &OsCfg_Core_OsCore0_Dyn,
/* .Scheduler = */ &OsCfg_Scheduler_OsCore0,
/* .IdleTask = */ &OsCfg_Task_IdleTask_OsCore0,
/* .KernelApp = */ &OsCfg_App_SystemApplication_OsCore0,
/* .KernelStack = */ &OsCfg_Stack_OsCore0_Kernel,
/* .PreStartTask = */ NULL_PTR,
/* .StartupHookRef = */ NULL_PTR,
/* .ShutdownHookRef = */ &OsCfg_Hook_ShutdownHook_OsCore0,
/* .ErrorHookRef = */ &OsCfg_Hook_ErrorHook_OsCore0,
|
呵呵,原来这个Entry不是函数指针类型,是uint32……
继续人肉搜索OsCfg_Hal_Context_ShutdownHook_OsCore0
……
一层套一层,结构体太多了,没法人工搜索了,我的肉体无法接受……
……
微信文章链接《OS ShutdownHook深度剖析》
部分内容省略,请关注公众号:嵌入式软件实战派,关注并回复“AUTOSAR”获得
以上是关于Os ShutdownHook调用深度剖析的主要内容,如果未能解决你的问题,请参考以下文章