Page 1 of 1

Tick rate (Hz)范围0-1000

Posted: Tue May 30, 2023 8:42 am
by ddddddd6
在menuconfig → Component config → FreeRTOS中
Tick rate (Hz)设置范围 0-1000
如果超出这个范围,比如设置成10000,有没有方法绕过配置文件,手动设置成10000?

Re: Tick rate (Hz)范围0-1000

Posted: Wed May 31, 2023 9:43 am
by yake827
你想调节成 10000,我估计你是想实现 us 级的延时或者定时,这块建议你使用 ets_delay_us 和 esp_timer。
至于为什么不能调节,这部分涉及到 system tick 的实现,最小只能到1000,也就是 1ms,而且这个时间也不会精确,不建议做精确时间

Re: Tick rate (Hz)范围0-1000

Posted: Sun Jun 04, 2023 8:42 am
by ddddddd6
根据system tick 的实现这个提示,把滴答定时器计数值再缩小10倍,_xt_tick_divisor = _xt_tick_divisor / 10;修改后Tick rate (Hz)范围0-1000,对应时间0.1ms-100ms 。

esp-idf-v4.4.1 ,测试了一下 修改后对ESP32可以生效,对ESP32S3不能生效。


void vPortSetupTimer(void)
{
/* Init the tick divisor value */
_xt_tick_divisor_init();

_frxt_tick_timer_init();
}


void _xt_tick_divisor_init(void)
{
_xt_tick_divisor = esp_clk_cpu_freq() / XT_TICK_PER_SEC;

_xt_tick_divisor = _xt_tick_divisor / 10;//滴答定时器计数值再缩小10倍
}


esp-idf-v4.4.1 ,对与ESP32S3,ESP32C3

需要修改void vPortSetupTimer(void)函数,中:
systimer_hal_set_alarm_period(&systimer_hal, alarm_id, 1000000UL / CONFIG_FREERTOS_HZ);
systimer_hal_counter_value_advance(&systimer_hal, SYSTIMER_LL_COUNTER_OS_TICK, 1000000UL / CONFIG_FREERTOS_HZ / 2);
改为:
systimer_hal_set_alarm_period(&systimer_hal, alarm_id, 1000000UL / CONFIG_FREERTOS_HZ/10);
systimer_hal_counter_value_advance(&systimer_hal, SYSTIMER_LL_COUNTER_OS_TICK, 1000000UL / CONFIG_FREERTOS_HZ/10 / 2);

arduino 开发环境中的C库文件都是封装好的,对于ESP32S3 ESP32C3是没有文件可修改的,ESP32需要修改的变量_xt_tick_divisor,不需要在源文件中修改,可以在setup函数修改。

extern unsigned _xt_tick_divisor;
void setup() {
_xt_tick_divisor = _xt_tick_divisor / 10;

}

Re: Tick rate (Hz)范围0-1000

Posted: Tue Jun 06, 2023 3:49 am
by ESP_Yake
改 Tick rate 的意义是什么?这样除了增大系统开销,我看不到任何优势, FreeRTOS 官方给的 tick rate 建议值是100