在menuconfig → Component config → FreeRTOS中
Tick rate (Hz)设置范围 0-1000
如果超出这个范围,比如设置成10000,有没有方法绕过配置文件,手动设置成10000?
Tick rate (Hz)范围0-1000
Re: Tick rate (Hz)范围0-1000
你想调节成 10000,我估计你是想实现 us 级的延时或者定时,这块建议你使用 ets_delay_us 和 esp_timer。
至于为什么不能调节,这部分涉及到 system tick 的实现,最小只能到1000,也就是 1ms,而且这个时间也不会精确,不建议做精确时间
至于为什么不能调节,这部分涉及到 system tick 的实现,最小只能到1000,也就是 1ms,而且这个时间也不会精确,不建议做精确时间
Re: Tick rate (Hz)范围0-1000
根据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;
}
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;
}
Last edited by ddddddd6 on Mon Oct 09, 2023 8:51 am, edited 1 time in total.
Re: Tick rate (Hz)范围0-1000
改 Tick rate 的意义是什么?这样除了增大系统开销,我看不到任何优势, FreeRTOS 官方给的 tick rate 建议值是100
Who is online
Users browsing this forum: No registered users and 22 guests