尝试实现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中配置

问题
函数未定义
编译时发现

说明EB中未配置OsCpuLoadMeasurement,所以裁剪了对应的函数实现
是否需要切换到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原因,并实践
