尝试实现EB自带的SC2时间监控功能,使用标准接口计算负载率。

EB中配置参数

OsTimestampTimer选择用于时间戳的 timer

这里从配置文件中可以看到采用了内部硬件计时器STM0,属于长周期定时器

OsCpuLoadIntervalDuration 决定多久统计一次CPU负载,单位为秒

然后和下面一个参数结合,一块统计平均CPU负载与MAX负载

OsCpuLoadNumIntervals 用多少个间隔计算一次负载

统计窗口长度 = OsCpuLoadIntervalDuration × OsCpuLoadNumIntervals

若Duration为0.1s,即100ms统计一次CPU负载

IntervalsNum为10,则统计窗口长度为0.1x10=1s

即每1秒统计1次负载结果,通过GetCpuLoad()返回数据

OsCpuLoadRounding 负载率以整数形式计算和返回时,小数部分的截取方式

DOWN 向下取整
UP 向上取整
NEAREST 按四舍五入取最接近的整数

这里从xdm文件中截取的配置

可以看出OsCpuLoadMeaurement 为 false,表示未启用CPU负载计算

Duration=0.1s,Interval=10,取整方式为四舍五入

实践

需要添加函数对应的头文件 Os_salsa.h

添加全局变量用于监控cpu占用率

在InitTask中初始化

在APP1_Task_10ms中添加每100次调用一次

即每隔1s调用一次占用率

但其具体占用率计算时间是在EB中配置

问题

  1. 函数未定义

编译时发现

说明EB中未配置OsCpuLoadMeasurement,所以裁剪了对应的函数实现

  1. 是否需要切换到SC4?

目前项目环境为SC3模式,是带有内存保护的,但没有时序保护Timing Protection

在手册中 CPU-load measurement 是放在Timing Protection章节中的

后续需要验证在SC3下OsCpuLoadMeasurement是否能够启动

栈使用率测量实践

确定是否有os自带的栈使用率计算函数,确定英飞凌芯片是否有栈溢出保护机制,并实践栈使用率测量

当多个任务同时放到同一个EP点触发,会造成什么后果

3、以alarm方式触发的task如何配置,和调度表有什么区别,利弊。

4、了解os counter配置的作用,HW counter、SW couter、alarm关联的过程,为什么不直接用HW counter。(以长城项目为例说明)

5、一类中断和二类中断的区别,中断之间是否可打断。

6、不同的hook在什么情况下被触发,一般要进行什么操作。

7、进入不同Trap原因,并实践

山和山不相遇,人与人要相逢