关于configCPU_CLOCK_HZ
在FreeRTOS配置文件FreeRTOSConfig.h,定义宏configCPU_CLOCK_HZ来表示CPU时钟的频率。则系统一个Tick的时间是1/configCPU_CLOCK_HZ。
关于configTICK_RATE_HZ
FreeRTOS的时钟Tick的频率,也就是FreeRTOS用到的定时中断的产生频率。默认值是1000,即1ms,即1000个Tick上报一次timer中断。
Risc-v时钟信号
Risc-v的时钟信号是由rtc_toggle接入的,一般不能超过core-clock的1/2。这个信号仅用来计时使用,所以不需要太高频率。一般1mHz就够了。
mtime
mtime是risc-v一直在走的真实时间,是由rtc_toggle直接决定的。是系统时间。
mtimecmp
mtimecmp是用来触发timer中断的,当mtime大于等于mtimecmp时,会触发上报一次timer中断。
在FreeRTOS中,每次上报timer中断会重置mtimecmp的值。
mtimecmp = mtime + configCPU_CLOCK_HZ/configTICK_RATE_HZ;
以此来决定下一次timer中断触发的时间,在实际使用中,需要再加10cycles左右的时间,这是算一些io访问消耗的时间。
关于FreeRTOS线程调度
调度器调度的调度周期是一个timer中断