显示给定系统滴答计数的时间字符串

Posted

技术标签:

【中文标题】显示给定系统滴答计数的时间字符串【英文标题】:Display time string given system tick count 【发布时间】:2014-02-05 01:36:15 【问题描述】:

给定:

自通过unsigned int systemTicks(void); 冷启动以来的系统滴答数 通过unsigned int usPerTick(void); 的每个系统滴答声的微秒数

如何在 C 中创建固定宽度的时间戳字符串?我可以灵活地使用这种格式,但希望最多支持 100 分钟并保持毫秒分辨率。一种示例格式是"99:59:999",这意味着自冷启动以来已经过去了 99 分 59.999 秒。

printf 允许我用最小宽度而不是最大宽度写小数(分、秒、毫秒)。我正在寻找简单的解决方案。

【问题讨论】:

这很有帮助:***.com/questions/14130747 【参考方案1】:

您想打印一个固定宽度,以微秒为单位的前导零小数部分。由于微秒中有 6 位数字,所以你想要,

sprintf(timestamp,"%d:%02d.%06d",ticks/60,ticks%60,mseconds);

并添加结构/指针的味道......

【讨论】:

我选择了sprintf(timestamp, "%02d:%02d.%03d", minutes, seconds, milliseconds);。对于固定宽度的字符串,分钟也需要前导零。我还添加了检查以确保分钟、秒和毫秒分别不超过 2、2 和 3 位数字,以确保时间戳缓冲区不会溢出。 太棒了!我使用了类似的模式来记录嵌入式系统等的高分辨率时序。

以上是关于显示给定系统滴答计数的时间字符串的主要内容,如果未能解决你的问题,请参考以下文章

STM32 滴答定时器

系统定时器(滴答定时器)

STM32 的系统滴答定时器( Systick) 彻底研究解读

如何在熊猫中显示类似空字符串的列值的计数

STM32的滴答定时器的计数到0时标志位置1,需要软件清除标志位吗!,还是硬件自动清除

Systick系统滴答定时器