news 2026/7/18 3:56:40

5、AUTOSAR OS中Post Task Hook、Pre Task Hook 和 Os_Thread_Trace --用法分享

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5、AUTOSAR OS中Post Task Hook、Pre Task Hook 和 Os_Thread_Trace --用法分享

计算CPU负载

PreTaskHook与PostTaskHook:时间测量机制

PreTaskHook和PostTaskHook用于计算每个任务的执行时间,进而评估系统负载。在PreTaskHook(void)中获取进入任务时的时间戳,然后在PostTaskHook中计算时间差,得到任务切换与执行的总耗时。通过(void)GetTaskID(&task_id)可获取当前任务ID。

FUNC(void, OS_PRETASKHOOK_CODE) PreTaskHook(void)

{

/**********************************************************************************************************************

* DO NOT CHANGE THIS COMMENT! <USERBLOCK OS_Callout_Stubs_PreTaskHook>

*********************************************************************************************************************/

OS_PreTask_Execution();

/**********************************************************************************************************************

* DO NOT CHANGE THIS COMMENT! </USERBLOCK>

*********************************************************************************************************************/

}

FUNC(void, OS_POSTTASKHOOK_CODE) PostTaskHook(void)

{

/**********************************************************************************************************************

* DO NOT CHANGE THIS COMMENT! <USERBLOCK OS_Callout_Stubs_PostTaskHook>

*********************************************************************************************************************/

OS_PostTask_Execution();

/**********************************************************************************************************************

* DO NOT CHANGE THIS COMMENT! </USERBLOCK>

*********************************************************************************************************************/

}

计算每个任务的执行时间

Os_Thread_Trace事件驱动的跟踪机制,用于连续记录任务执行过程中的内部事件。根据进出同一个任务id来获取该任务执行时间

void Os_Thread_Trace(Os_TraceThreadIdType FromThreadId,uint8 FromThreadReason,Os_TraceThreadIdType ToThreadId,uint8 ToThreadReason,CoreIdType CallerCoreId)

{

if(FromThreadId == LastThreadId[CallerCoreId]) /*非第一次执行*/

{

THREAD_CALCULATE_END(FromThreadId);/*记录执行时间*/

THREAD_TRACE(CallerCoreId,threadindex,FromThreadId);

}

THREAD_CALCULATE_BEGIN(ToThreadId);

LastThreadId[CallerCoreId] = ToThreadId;

}

顺便提示一个获取任务堆栈占用率的接口

Os_GetTaskStackUsage

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 3:55:01

Kotlin Multiplatform与DataStore的跨平台数据存储实践

1. Kotlin Multiplatform与DataStore的完美结合作为一名在移动端开发领域深耕多年的工程师&#xff0c;我见证了Kotlin Multiplatform&#xff08;KMP&#xff09;从实验性技术到如今成为跨平台开发主流选择的完整历程。DataStore作为SharedPreferences的现代化替代方案&#x…

作者头像 李华
网站建设 2026/7/18 3:54:15

C++引用底层实现揭秘:从指针常量到编译器优化的真相

1. 项目概述&#xff1a;从“别名”到“指针常量”的真相探寻在C的日常开发中&#xff0c;引用&#xff08;Reference&#xff09;和指针&#xff08;Pointer&#xff09;是我们绕不开的两个核心概念。很多教材和面试题都会告诉你&#xff1a;“引用是变量的别名&#xff0c;指…

作者头像 李华
网站建设 2026/7/18 3:54:06

Seata DataSourceProxy 配置与优化全解析

1. Seata DataSourceProxy 核心作用解析DataSourceProxy 是 Seata 实现分布式事务的关键组件&#xff0c;它通过代理原生数据源实现对 SQL 执行的拦截和增强。在实际业务中&#xff0c;当我们需要对一个订单服务扣减库存、账户服务扣款这两个数据库操作实现原子性时&#xff0c…

作者头像 李华
网站建设 2026/7/18 3:53:57

驱动:私有数据为什么要在三个地方各挂一遍?

写字符设备驱动的人&#xff0c;大概率都困惑过这件事&#xff1a;我就一个私有结构体 dev&#xff0c;为什么要反复存来存去&#xff1f;platform_set_drvdata 存一遍&#xff0c;cdev_add 嵌进去一遍&#xff0c;filp->private_data 再存一遍。这不重复吗&#xff1f;答案…

作者头像 李华
网站建设 2026/7/18 3:53:52

维度约简实战指南:PCA/LDA/t-SNE/UMAP原理、选型与避坑

1. 这不是“降维”——这是给数据做一次精准的CT扫描你有没有试过把一张88的手写数字图&#xff0c;拉成64个像素点排成一列&#xff1f;再把1797张这样的图堆在一起&#xff0c;就得到一个1797行、64列的表格——这在机器学习里叫“高维特征空间”。听起来很酷&#xff0c;对吧…

作者头像 李华
网站建设 2026/7/18 3:53:42

QQ开放平台接入全流程与实战指南

1. QQ开放平台全流程操作指南作为国内最大的社交平台开放接口之一&#xff0c;QQ开放平台为开发者提供了完整的账号体系接入方案。我完整走过三次QQ开放平台接入流程&#xff0c;从最初的踩坑到现在的半小时快速部署&#xff0c;这里把全流程操作和关键注意事项整理成这份指南。…

作者头像 李华