Freertos ESP32任务vTaskDelay:预期一个循环执行一次,但得到多个
我试图在ESP32上处理任务Freertos ESP32任务vTaskDelay:预期一个循环执行一次,但得到多个,freertos,esp32,Freertos,Esp32,我试图在ESP32上处理任务 loop(){ xTaskCreatePinnedToCore(SendCanBusMessageToCharger, "SendCanBusMessageToCharger", 1000, NULL, 3, NULL, 0); } void SendCanBusMessageToCharger(void *pvParameters) { CAN_frame_t tx_frame; tx_frame.FIR.B.FF = CAN_fram
loop(){
xTaskCreatePinnedToCore(SendCanBusMessageToCharger, "SendCanBusMessageToCharger", 1000, NULL, 3, NULL, 0);
}
void SendCanBusMessageToCharger(void *pvParameters) {
CAN_frame_t tx_frame;
tx_frame.FIR.B.FF = CAN_frame_ext;
tx_frame.MsgID = 0x1806E5F4;
tx_frame.FIR.B.DLC = 8;
tx_frame.data.u8[4] = 0x00;
tx_frame.data.u8[5] = 0x00;
tx_frame.data.u8[6] = 0x00;
tx_frame.data.u8[7] = 0x00;
while(true) {
tx_frame.data.u8[0] = highByte(outputvoltage);
tx_frame.data.u8[1] = lowByte(outputvoltage);
tx_frame.data.u8[2] = highByte(outputcurrent);
tx_frame.data.u8[3] = lowByte(outputcurrent);
ESP32Can.CANWriteFrame(&tx_frame);
Serial.println("CAN message sent to charger");
vTaskDelay(1000);
}
我希望在串行端口上每秒收到一条“CAN消息发送至充电器”消息,但我得到:
12:11:15.866 -> CAN message sent to charger
12:11:15.866 -> CAN message sent to charger
12:11:15.866 -> CAN message sent to charger
12:11:15.866 -> CAN message sent to charger
12:11:15.866 -> CAN message sent to charger
12:11:15.866 -> CAN message sent to charger
12:11:15.866 -> CAN message sent to charger
12:11:15.866 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
12:11:15.899 -> CAN message sent to charger
大约每秒8条信息。还尝试了vTaskDelay(pdMS_到_TICKS(1000)),但结果相同。我真的不知道我做错了什么。。。使用最新的Arduino IDE和ESP板定义构建。谢谢 是的,那太愚蠢了。。。。我将任务创建放在循环中,而不是设置中,并且盯着代码看了很长时间,我再也看不到它了。您的问题是,vTaskDelay等待的是滴答声,而不是毫秒,并且您没有正确地转换它。 解决方案: vTaskDelay(1000/端口周期)