os_uptime_ms
所属模块:系统时间 | 类型:运行时间统计函数
函数简介
os_uptime_ms 用于获取系统从启动开始累计运行的毫秒时间。
该函数基于32位tick计数器,并结合当前定时器重装值进行精确换算,可用于系统运行时间统计与性能分析。
内部采用临界区保护,保证tick读取的一致性,并使用浮点运算减少换算误差。
函数原型
u32 os_uptime_ms(void);
源码实现
u32 os_uptime_ms()
{
u16 tick_h;
u16 tick_l;
u16 tick_value;
u32 TS;
float tick_ms;
float total_tick;
float total_ms;
u16 result_h;
u16 result_l;
EA = 0;
tick_h = OS_TICK_COUNT_H;
tick_l = OS_TICK_COUNT_L;
EA = 1;
tick_value = OS_T0_TH0;
tick_value <<= 8;
tick_value += OS_T0_TL0;
tick_ms = (65536.0 - tick_value) / 1000.0;
if(tick_ms <= 0)
{
tick_ms = 1;
}
total_tick = ((float)tick_h * 65536.0) + tick_l;
total_ms = total_tick * tick_ms;
if(total_ms > 4294967295.0)
{
total_ms = 4294967295.0;
}
result_h = (u16)(total_ms / 65536.0);
result_l = (u16)(total_ms - ((float)result_h * 65536.0));
TS = result_h;
TS <<= 16;
TS += result_l;
return TS;
}
使用示例
void debug_uptime()
{
u32 ms;
ms = os_uptime_ms();
// 用于日志或性能统计
}
注意事项
该函数使用浮点运算提升精度,在资源受限系统中需注意执行开销。
tick计数依赖定时器配置,系统频率变化会影响结果精度。