Timer1是为FreeRTOS计时保留的,它使用32 kHz时钟运行,分辨率为~30.5微秒。如果我想以更小的微秒分辨率获取当前执行时间,是否有某个地方存储了16/32 MHz XTAL或48/96 MHz PLL节拍?我能找到的唯一更改RTOS时钟的地方是custom_config_qspi.h中的dg_configUSE_LP_CLK,它修改了FreeRTOSConfig.h,但似乎只有32000、32768和RCX (10.5 kHz)时钟的选择。有没有办法让操作系统的时钟变快,这样我就可以使用OS_GET_TICK_COUNT来跟踪执行时间了?
关键词:
设备:
嗨envirosenjason,
Timer1是权力自由RTOS计时器,只使用LP时钟和它continiously运行,你不能改变这个定时器到另一个时钟源为了有更大的粒度测量你的时间,所以这个定时器的分辨率是你提到你的文章根据LP时钟。您可以直接通过读取CAPTIM_TIMER_VAL_REG寄存器来读取计时器1时钟的节拍。还要确保只读这个值而不写它,因为这会破坏系统的稳定性。关于OS_GET_TICK_COUNT(),这将得到2毫秒的分辨率。
免费实时操作系统的滴答声不是直接由LP时钟驱动的,而是使用一个预分度器,根据当前配置将滴答声调整为2毫秒的分辨率,您可以通过将configTICK_RATE_HZ更改为一个更大的值来降低这个值,以减少滴答时间,但您应该谨慎对待这个修改,因为它将影响整个操作系统,因为它将运行一个更小或更大的滴答。
由于MT_dialog
嗨MT_dialog,
为什么freeertos是由Timer1而不是SysTick驱动的?
谢谢
阿明
嗨ArminL,
我相信这是因为timer1持续运行,即使当设备进入睡眠模式,但系统不操作在这种情况下,因为ARM是在WFI()状态。所以,既然你已经有了一个持续操作的定时器,并且专门用来保持时间,你可以使用这个定时器来tick FreeRTOS,而不是有另一个定时器,如systick模块的操作。
由于MT_dialog