perf_counter:是傻孩子在工作中总结和整理出的一个库,它的特点是在不干扰已有 SysTick 功能的前提下额外为我们提供系统周期测量的功能——并在这基础上衍生出了 delay_us() 和 系统时间戳的功能。
注意:
这里(KEIL MDK下选项-C/C++)的 Assembler Option,根据你MDK版本的不同,它可能有以下几个有效选项:
-
armclang(Auto Select)——我吐血推荐选这个
-
armclang(GNU Syntax)—— 这个意思就是使用 GNU的汇编语法,显然不能选它;
-
armclang(Arm Syntax)——这是最新MDK(从5.32开始)才有的选项,选了也行;
-
armasm(Arm Syntax)——这就是 Arm Compiler 5里一直使用的老汇编器,选他当然兼容性最好
perf_counter库的使用当然也存在限制
-
如果你原本的 RTOS 使用了 SysTick并开启了Tickless模式,perf_counter虽然不会干扰原有的 SysTick功能,但自己的计时功能却会受到 Tickless模式的干扰;
-
perf_counter库假设你原本的SysTick应用会保持一个固定的定时周期——也就是 LOAD寄存器的内容是固定的、不会随着程序的执行而经常变化。其实RTOS的tickless模式会干扰perf_counter的计数可靠性也是这个原因。
一般来说,大部分RTOS和普通的周期性定时功能都不会经常动态的去改变SysTick的计数周期,所以不必太担心