esp-idf 4.3.5,ESP32C3,vTaskDelay最大延时多久?
时间: 2023-09-15 15:16:12 浏览: 241
在ESP-IDF 4.3.5中,vTaskDelay函数的最大延时取决于系统时钟的精度和计数器的位数。在ESP32C3上,时钟精度为80MHz,计数器为64位。因此,vTaskDelay函数的最大延时为9223372036854毫秒,也就是大约292年。但是,这种延时显然是不实际的,因为它超出了大多数应用程序所需的范围。在实际应用中,通常建议使用较短的延时,例如几毫秒或几百毫秒。
相关问题
esp-idf 4.3.5,ESP32C3,定时器延时1微秒
在 ESP-IDF 4.3.5 中,可以使用 `esp_timer_get_time()` 函数获取系统时间,单位是微秒。要实现微秒级的延时,你可以在获取当前时间后,再加上指定的微秒数,得到所需的目标时间。然后,可以使用一个循环,检查当前时间是否达到目标时间,如果还未到达,则继续循环等待。
以下是一个简单的示例代码,可以实现一微秒的延时:
```c
#include "esp_timer.h"
void delay_us(uint32_t us)
{
uint64_t now = esp_timer_get_time(); // 获取当前时间
uint64_t target = now + us; // 计算目标时间
while (esp_timer_get_time() < target) // 检查是否到达目标时间
{
// 等待
}
}
```
你可以调用 `delay_us(1)` 函数来实现一微秒的延时。请注意,这种方法的精度可能会受到循环体执行时间的影响,因此不一定能够保证精确的微秒级延时。
esp-idf 4.3.5,ESP32C3,vTaskDelay是否能写入大于1000的数
vTaskDelay() 函数的参数是以操作系统时钟节拍为单位的,而不是毫秒。在 ESP-IDF 4.3.5 中,vTaskDelay() 函数的最小延迟为一个时钟节拍,也就是 12.5 纳秒(80 MHz 时钟)。由于 vTaskDelay() 函数的参数是以时钟节拍为单位的,因此如果您将大于 1000 的值传递给该函数,则会导致任务挂起很长时间。在实际应用中,最好将 vTaskDelay() 的参数设置为较小的值,例如几毫秒或几百毫秒。
阅读全文