The ROM function ets_delay_us() (defined in rom/ets_sys. System initialization of software services and FreeRTOS. Be aware that dependent on what you. 1. 0. In the previous tutorial, we learned to blink LED by using the delay method. ESP32 transmit delay and cluster of packets. The ROM function ets_delay_us() (defined in rom/ets_sys. 59 *C P=73. So, I just put a microsecond loop in like this: unsigned long thedelay; thedelay = micros() + 100; while (micros() < thedelay) {}esp_task_wdt_feed() in the task loop - it didn't help esp_task_wdt_reset() in the task loop - it didn't help esp_task_wdt_deinit() before create the task - it didn't help esp_task_wdt_delete(th) after create the task - it didn't help The only thing that helped to stop WDT is delay(1) instruction, but delay for 1 ms is too much for my purpose . Cooperative multitasking is a style of programming in which multiple tasks take turns running. vTaskDelay (2000 / portTICK_PERIOD_MS); The RTOS tick period is (by default) 10ms. In short, yield() will only allow higher priority tasks to run, but the watchdog runs in the idle task (lower priority) so it won't run with a yield(). Passing NULL will suspend own task. Therefore, it seems that the printing. The TWDT is responsible for detecting instances of tasks running without yielding for a prolonged period. To say it works is really stretching it. Essentially, the code starts a task that has one job: ble scan. This is the second part of a series of ESP-IDF tutorials that I will complete as I learn stuff. I'd shy away from millis() and use the ESP32's cycle count values. h> #include "freertos/FreeRTOS. This will configure the ESP32 master to listen to slaves on the I2C bus. ISR – is the name of the function that will be called each time the interrupt occurs. Click on the upload button to upload the code into the ESP32 development board. This. I would like to write my own function to create a delay in a FreeRTOS task,. Using Arduino Programming Questions. All examples have. This example delays by 500ms: esp-idf-equivalent-to-arduino-delay. Cheers. Hi, The thing with uS delays under software control is you need to clearly understanding you're tolerances. Declare a variable of type SemaphoreHandle_t to store the values of semaphore. However, the output shaft is driven via a 64:1 gear ratio. 2. py example. ino file. 1 seconds to run and the vtaskDelay is set to 2 seconds, that means that the next time this task will be scheduled after 2. FreeRTOS Demo_1. As a computer programmer implementing logic, you don’t want your tasks to get delayed for any reason. SPI Master driver is a program that controls ESP32’s General Purpose SPI (GP-SPI) peripheral(s) when it functions as a master. h> #include <freertos/task. After that you get a cylcetime of ~300ns (disable interrupts for core 0). 15 — QFN6*6 1. esp32-spooky-maze-game - Bare metal Rust implementation of simple game for ESP32. Delay a task until a specified time. timeClient. This means our application has 2 tasks: ESP32 task will print the text “this is ESP32 task” and the second task will print “this is another. The syntax looks like below. . If bot. To open the project in a new window, click ‘Yes. I believe this is related to CONFIG_FREERTOS_HZ. This takes some work and code re-organization. Device Description. In the Extension, select ESP-IDF option: We will click the ‘ esp_timer ’ under the System tab. The esp32 has WiFi and ESP-NOW active at the same time, receiving some data from another esp32. The async web server uses AsyncTCP, which uses its own task for event callbacks. Door bell but NOT the telegram message. 8V/3. The operating voltage of this SoC is 3. Thank you for your quick reply. h" #include "freertos/task. I promise this one is definitely about dual core issues and not my crappy array management. I'm basicly testing the sending data from the ESP32 to Firebase. 8 or higher, if not then update your IDE with the latest version. If the counter have not been activated, the currenttime=millis() always ticking. This example delays by 500ms: esp-idf-equivalent-to-arduino-delay. The Task examples that I have seen are very simple with Task1 and Task2 being called (or some variation of that). 2. You can still run your own. Hello everyone, I'm transferring a project from the arduino to the ESP32, is there a command to insert the delayMicroseconds function as in the arduino? Do not worry about using delay in the tasks unless needed. Example code: void Task1code( void * parameter ){ Serial. 6/cores/esp32/esp32-hal-misc. The following tasks did not reset the watchdog in time: E (21412) task_wdt: - IDLE0 (CPU 0) E (21412) task_wdt: Tasks currently running: E (21412) task_wdt: CPU 0: wifi E (21412) task_wdt: CPU 1: IDLE1 E (21412) task_wdt: Aborting. At the bottom of the function you will see various lines that are commented. Re: xTaskCreatePinnedToCore doesn't work for Core 1. Re: ESP32 CPU load % display without special configuration. And the most important things that delay() will pause the execution of other codes. You can see the code here. Board index English Forum Discussion Forum ESP32 Arduino; Simple Semaphore as task delay with interrupt. 61 *C T=74. This is double the 40 MHz default value and will double the speed at which code is loaded or executed from flash. Espressif IoT Development Framework. ESP32 Arduino and MicroPython both use CONFIG_FREERTOS_HZ=1000. Note that this behavior is the expected since the implementation of the ESP32 for the Arduino delay uses the FreeRTOS vTaskDelay function, as can be seen here. Below is the ref code, back Trace Log ,Any one guide me how to resolve this. h) will allow you to busy-wait for a correct number of microseconds. ). 0. GMT +8 = 28800. But the documentation for xTaskCreatePinnedToCore () states: "Tasks must be implemented to never return (i. Timer – bộ đếm thời gian, được sử dụng để đo và kiểm soát thời gian. The esp_intr_alloc () abstraction exists to hide all these. 0 by Oleg Mazurov ). Now I believe timer interrupt will be a better option as we will not need. boarchuz is right. You don't need this library for the ESP32 because FreeRTOS is already provided as a component of the ESP-IDF framework of. 1 Demo - In this demo, we create 2 tasks: low priority task and high priority task. Both of your tasks are running at full steam ahead with no controls. Check out this question in the esp32 forum. To do so, we simply use the uxTaskPriorityGet function. INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available. August 15, 2022. Hi, I have to drive a stepper motor with my esp32, with a frequency that requires a delay below milliseconds (for example 100 microseconds). In this article, we will discuss how to debounce a button press using Interrupts and timers. Basically I just want to run a task a given hertz (for example 50 Hz). TASK_2 has prio 2. Thank you for a good reply. If we look at the esp-idf documentation about ESP32 WDT we can see that ESP32 comes with an interrupt watchdog and a task watchdog timer api. In our case, we have set it to Demo_Task. I have changed it to 1000. tool-cmake. The ESP-IDF has support for two types of watchdogs: The Interrupt Watchdog Timer and the Task Watchdog Timer (TWDT). ST7789とのSPI通信プログラムを実装していて、初期化関数の中でコマンド送信後delay ()でちょっとだけ時間調整をしている部分があった。. 0/v1. It may shed some light on the reason why Task1 is stopped. Code that executes faster can also have other positive effects, e. Unless it is a linear and very simple program , do not use this. // "iBeacons-ESP32-Tracker. The function timerBegin (uint8_t id, uint16_t prescaler, bool countUp) allows to configure the timer : The ESP32 has 4 independent timers, selected by an id between 0 and 3. Another nice hub for information is the awesome. That's the whole reason of not using delay(). If app_main returns, the main task is deleted, and everything works as expected. As mentioned before, we will use the xTaskCreatePinnedToCore function. delay does not block on esp32! A única opção não recomendada é um loop baseado na função millis (). To create a task, use the function xTaskCreate (). curr_pos; i<=stepper1. Blue indicates trying to connect to MQTT or ethernet. io Flash Frequency: xxxx Upload Speed: xxxx Hi! When I started to develop on a Arduino everything was singlethreaded, and I was in full control of the. lib_deps = feilipu/FreeRTOS @ 10. xTaskDelayUntil [Task Control] task. Delay a task until a specified time. As soon as this machine starts processing the task from the JSON string of the websocket message, it doesn't take long (5-7 seconds) before the ESP32's watchdog triggers. Blocking functions prevent a program from doing anything else until that particular task has completed. The maximum amount of time the task should block waiting for an item to receive should the queue be empty at the time of the call. When an interrupt occurs, the microcontroller will go through the following steps: The microcontroller will halt the current task and will store the address of the next instruction (Program Counter or PC) on the stack (lower byte first). Oh, I actually use short delays at times when it doesn’t matter… but in this forum we do try to teach Blynk embedded, approved and comparatively easy to learn timing methods, without limiting to special MCUs. You can check test results in the file LIBRARIES_TEST . To create a task, use the function xTaskCreate (). Since you are running only a single task on the ESP32 the delay(100) will interfere with the response of the callback function. One of the many interesting features of ESP32 is that it has two Tensilica LX6 cores, which we can take advantage of to run our code with higher performance and more versatility. Ideally, 500ns or less. This function takes in several arguments. h> #include "freertos/FreeRTOS. Down at the very bottom you'll see two core task assignments - one for the stepper loop, one for. cpp. I have ensured that this is the only task with priority 1. Postby mikemoy » Thu Jan 30, 2020 2:33 pm. This function will return timer structure if configuration is successful. Therefore if you set a tick period of 2ms (500hz) and request a delay of 1 tick you will get a delay of between just over 0 ms (if the request to delay. The maximum time to wait in the Blocked state for a notification to be received if a notification is not already pending when xTaskNotifyWait () is called. It does not interact with RTOS and calling it will actually block everything for 100ms, if it is called from higest-priority task. The. After that, we will get the priority of the setup function. Same thing, right after baud rate is set in void setup: rtc_wdt_protect_off (); rtc_wdt_disable (); This time, the GUI functions just like before (as if the watchdog timer/interrupt is not actually disabled). (ESP32 only) // Task to run forever xTaskCreatePinnedToCore( // Use xTaskCreate() in vanilla FreeRTOS toggleLED_2, // Function to be called "Toggle 2", //. One, it keeps us from having to keep checking all the time, freeing up those cycles to do other stuff. When you use several pins to wake up the ESP32, it is useful to know which pin caused the wake up. This will open a Preferences dialog box. Memory can be managed by adding a function pointer to a deallocation. Pauses the program for the amount of time (in microseconds) specified by the parameter. When Demo_Task finishes a particular job on a data, it gives out a flag (Semaphore) which is an integer and increases by 1. Hi, I´m using a vTaskDelay right now to suspend my task for a while, but not being able to unblock before time runs up is a problem. esp_timer set of APIs provides one-shot and periodic timers, microsecond time resolution, and 64-bit range. h> #include <string. Internally, esp_timer uses a 64-bit hardware timer. task1 will print the strings "task1. The arguments to this function are the following [1]:. Let us now assume that 1/C is faster than the delay you want to wait. so if the task is not yielding i. /* pin task to core 0 */ delay(500); //create a task that will be executed in the Task2code() function, with priority 1 and executed on core 1 xTaskCreatePinnedToCore( Task2code, /* Task function. (Note: don't forget to call this function, or it will lead to the watchdog restarting the ESP32). The problem occurs in the next line, the first vTaskDelay call. void loop () Also, the default priority of loop () is 1,assign your taskings to something higher than 1; like 3. We are using the ESP32 on our new upcoming Kickstarter, the BC24. Maybe you could use vTaskDelayUntil () to get you close. You may also use any. Check this link for more details. 3V. On the ESP32, this is the APB_CLK clock, clocked at 80 MHz. (1) How to pin Blynk. We assume a previous installation of the ESP32 support for the Arduino environment. The Espressif ESP32 Development Board (image attribution: Adafruit). If a Task is run concurrently with . The below function is used to create tasks that can run on both. If you want the task to be cancellable in the queue but do not want to check the cancellation token nor throw an exception yourself, you need to use the approximated code with a cancellation token. This function differs from vTaskDelay () in one important aspect: vTaskDelay () specifies a time at which the task wishes to unblock relative to the time at. This function takes exactly the same arguments of the xTaskCreate and an. We can add a delay statement in that task to wait X amount of time before starting up again. restart () every 12 hours before it can freeze. xTaskCreatePinnedToCore()関数を使うことで実装できる。The esp32 task uses 4ms delay, while the avr repeats every ~4 ms at 16 MHz and atmel sam due every 2ms at 21MHz. In this tutorial we will see how to execute tasks on both cores. for Variable A : CPU-0 can Write / CPU-1 can READ. I've tried pinning the task to either core. g. Click ‘Choose Template’ button to proceed forward. This is the core functionality of a kernel. You can control tasks from within or you can use task handles to control them from anywhere in your code. 1-1 That FreeRTOS library is specifically written for use with boards that have an AVR architecture microcontroller. h> #include "lwip/err. Espressif ESP32 Official Forum. It should be much faster. The first thing that jumps out at me is that your stack allotment is to low for using a printf. As soon as you need to do a few things at the same time, you. We create 2 tasks: task1 has priority is 1, task2 has priority is 4. I have two tasks, one in each core. On an ESP32 delay() is transformed into vTaskDelay() which is a non-blocking delay. The NodeMCU ESP32 is based on the Xtensa 32-bit LX6 dual-core microprocessor that embeds the FreeRTOS OS. This is vTaskDelay ( pdMS_TO_TICKS ( 10 ) ) a delay of 10mSec, this vTaskDelay ( 10 ) is a delay of 10 clock ticks. For applications that require very accurate delays, please try esp_timer or one of the General Purpose HW timers. Q&A for work. The process is as follows. House cleaning tasks will be performed when there is no code in loop(), so no issue there. 1 seconds which is not what I want. Overview. The ESP32 is dual core; Arduino sketches run on core 1 by default; To use core 0 you need to create tasks; You can use the xTaskCreatePinnedToCore () function to pin a specific task to a specific core; Using this method you can run two different tasks independently and simultaneously using the two. Requests CPU frequency to be at the maximum value set with esp_pm_configure(). begin (112500); delay (1000); Serial. Two problems here. If you switch to ESP-IDF, you can enable these in your project. If you use external libraries in your code. The aim of our project is to connect a 5mm LED with one of the 30 pins available for ESP32, configure that GPIO pin as a digital output pin and then toggle its state after a delay of a few seconds to show a blinking effect. 0/v3. Once the delay was added the ledc updates worked fine when on core 0, once I moved to core 1 I ran into the issue again. 1 seconds which is not what I want. 0/v3. In your case u have given a delay of 5ms in loop function, so i think it is a run time error, there is a part of code that is blocking and not allowing the execution to move forward, so. The OS of the ESP32 is able to understand that the RTC ram was allocated once and to not allocate it again upon deep sleep wakeup. getfreeheap (something similar to this in the Arduino core). Hello everyone, I'm transferring a project from the arduino to the ESP32, is there a command to insert the delayMicroseconds function as in the arduino?Do not worry about using delay in the tasks unless needed. You can't use it with board that have an ESP32 microcontroller. This function. My device uses wifi, ble feature. Below is a quick reference for ESP32 -based boards. Task. 1. But if any task takes more than the expected time, all other tasks will be delayed and you will notice the delay in execution. h" library, after the Wifi connection completed the task stay IDLE with a infinite loop of delays. e not giving a delay so that Task Scheduler can run, then it may trigger the watchdog timer. 8V/3. In the following task deep sleep is set for a wake up time of one minute. println (taskCore); Now we will launch the FreeRTOS task, assigning it to a specific core of the ESP32. cpp 📋 Copy to clipboard ⇓ Download. @1technophile what i meant by any rtos task which runs without a delay,loop is actually a rtos task which is implemented in esp32 arduino so by just putting it into a loop can solve your problem. ESP_Angus Posts: 2344According to FreeRTOS there is no easy way to calculate the memory requirements of a task. Then when the task wakes up it could check the RTC and delay a little longer as needed. -SteveI am writing the code for a machine that receives orders via a websocket. If you avoid using delay statements, and time things in stead. You say "2 and 8 µS, or even more, is OK. Delay a task until a specified time. 0. I don't need delay resolution below 10msec and suspect that upping the rate will have some impact on overall performance. 0000041666666666667 ms by X to get your time delay or you can use pdMS_TO_TICKS ( X ) which will do it for you. So, it means that the task will be blocked during the delay time [5] and the scheduler can attribute the CPU to other free task. Running a number of times or forever. , reducing overall. ESP32 x 1; LED x 1; 10 ohm resistor x 1; Potentiometer x 1; Jumper wires;Parameters. #include <stdio. sendMessage (chat_id, "Someone is at the door. It Seems that when use Task1 on Core 0 That First line gets thrown to the end. Please check the following example with and without the delay () before the WD reset function. The vTaskDelay() instruction pauses the task from which it is invoked, so in the case of Arduino, if I call delay() inside loop() it will pause most of the things. The only functions that change uxSchedulerSuspended are vTaskSuspendAll () and xTaskResumeAll (). Implementing ESP32 hardware watchdog timer using Arduino IDEThe right way to do this is to have the interrupt service routine just wake up a task. In the examples, each task is in an infinite loop. A task-scheduler is part of a typical RTOS implementation. h" #include "nvs_flash. Arduino IDE supports FreeRTOS for ESP32 and FreeRTOS APIs allow us to create tasks that can run independently on both the cores. queue_size – UART event queue size/depth. 4 GHz Wi-Fi® band as well as Bluetooth® 5. To delay overall loop results in serial print monitor so I can keep track of / observe results easily. ’. Core 0. 5 seconds. h" #include "esp_event_loop. To do that, make the connections on a breadboard as shown in the below circuit diagram. The call will return immediately if the queue is full and xTicksToWait is set to 0. The tests shown here were performed using a DFRobot’s ESP-WROOM-32 device integrated in a ESP32 FireBeetle board . I am using ESP32 CAM module for a line follower robot. Re: Mysterious freeze/stop in the field. Improving Overall Speed ¶. Two, we can run other tasks while the scan task is. esp_timer set of APIs provides one-shot and periodic timers, microsecond time resolution, and 52-bit range. ) to perform the delay. WatchdogTimer (ウォッチドッグタイマー) ESP32 (M5Stack)とArduinoにて、ウォッチドッグタイマーの動作を確認する。. Using delay(1) was too long, as were other forms of 1ms delays. run() to a specific core on ESP32 using the built-in FreeRTOS library functions. These tasks are waiting for the key and the low priority task has chance to hold the key then it will block the high priority task and continue executing. More knowledgeable programmers usually avoid the use of delay () for timing of events longer than 10’s of milliseconds unless the Arduino sketch is very simple. Note that by default the tick period is 10ms, so any delay of less than 10ms results in a 0 delay, which can starve lower priority tasks of CPU time which then may fail to reset their watchdogs in time. NORA-W106 (ESP32-S3) NORA-W106 module. ” It takes in the first parameters an integer (uint32) which is the constant TickType depicting the ticks to delay. I am working on a simple project to take temperature and humidity from a DHT22 and post it to Thingspeak. 14 — QFN6*6 1. ESP32. ESP-IDF is the official development framework for the ESP32, ESP32-S, ESP32-C, ESP32-H and ESP32-P Series SoCs. SlimeVR-Rust/firmware - Async & no_std rust firmware for SlimeVR Full Body Tracking. Using Telegram they can control some lighting as well as receive some notifications to events. I would like to implement a producer/consumer task on ESP32. h BaseType_t xTaskDelayUntil( TickType_t *pxPreviousWakeTime, const TickType_t xTimeIncrement ); INCLUDE_xTaskDelayUntil must be defined as 1 for this function to be available. Because there are more interrupt sources than interrupts, sometimes it makes sense to share an interrupt in multiple drivers. TX function will block task until all data have been sent out. @Whandall perhaps you can help out making this ESP32 task example more indicative of what ESP32 can do. This sounds like an XY problem. Then we select the prescaler to apply to the timer clock signal. So I Used the actual Flag this time Timer_Turnon task in only running rest of. Code that executes faster can also have other positive effects, e. lets call it C hz. Even a simple loop causes it to crash: ELF file SHA256: 0000000000000000 Backtrace: 0x4008860c:0x3ffbf8f0 0x40088889:0x3ffbf910 0x401300bc. The tick rate you set using configTICK RATE HZ sets the resolution of time you can use with FreeRTOS API functions. Inside the main () function, we will create the tasks. Espressif ESP32 Official Forum. I have some code running as a FreeRTOS task on my ESP32. Watchdog timer errors for loops for webserver on ESP32. ESP32 LED Blinking Project Overview. The next running task is the task that has highest priority and is in Running state. Post by Insomniac » Fri Feb 21, 2020 11:00 pm . If you put the ESP32 module to deep sleep, as per post#5, then WiFi is off. 2) We could create a timer interrupt that will trigger on every interval as set to the timer And will be pushed to call back. For example, 1us = 1 / 1000000 of a second = 1MHZ clock rate. input_delay_ns – Input delay from SCLK launch edge to. It simply prints the string to the UART. For whatever reason the delay function is not working (it is not delaying at all) with my ESP32 development board. Espressif ESP32 Official Forum. @me-no-dev @1technophile @akshar001 UPDATE 1: The warning disappear when I put these three. Timer Initialization¶. I'm totally new to programming and electronics, it would be very helpful if someone helped me figure this out. #include <freertos/FreeRTOS. I want to run FreeRTOS on ESP32. h> #include <time. Internally, esp_timer uses a 64-bit hardware timer, where the implementation depends on the target. It is a signaling process whereby a waiting task is signaled by another task to continue execution. The code runs very fast until it casues a stack overflow and resets the esp. Type ESP-IDF: New Project in the search bar and press enter. The way that time is allocated between tasks is termed “scheduling”. Solution. Se estiver utilizando a vTaskDelay, estará evidenciando em seu código a utilização dos recursos do. I need to know all this breakdown. ESP32 Timer Example (Arduino) Let’s say we’d like to toggle an LED every 1 ms without using a delay that blocks the CPU and does much harm to the overall timing performance of your system. You just don't want to do all the stuff every loop. The time is defined in tick periods so the constant portTICK_PERIOD_MS should be used to convert to real time if this is required. xTaskNotify () is used to send an event directly to and potentially unblock an RTOS task, and optionally update one of the receiving task’s notification values in one of the following ways: Write a 32-bit number to the notification value. After calling it, FreeRTOS knows that the task is finished and should not be rescheduled. rikoubou. This guide also includes a comparison of vTaskDelay () function provided by FreeRTOS with. This example delays by 500ms: esp-idf-equivalent-to-arduino-delay. However, my sketches use WiFi, which starts a couple of tasks, each outputting via log_X. I actually let you use that function, but what I want to know most is all of the tasks generated within ESP32. tool-cmake. -- So I have a big pile of spaghetti here (link to sketch dump). Um. Re: small numbers of µS delays. Light-sleep duration is chosen to wake up the chip before the nearest event. vTaskDelay(500 / portTICK_RATE_MS); You can use vTaskDelay () even if not using FreeRTOS tasks. Even if you delay in your own task for a sub millisecond period, it is absolutely possible for your task to have control taken away from it (in this example) for up to 5ms at a time. h" #include "freertos/task. delay() doesn't actually block the CPU at all. ArduinoIDE. ’. I've run into a problem recently when working on a new project involving an ESP32 and a max43421e (USB Host). vTaskList (): This function is used to read the task details (name, state, priority, num). Hardware: Board: ESP32 DEV Board (DoIt) Core Installation/update date: Feb 15 2018 IDE name: eclipse Flash Frequency: 40Mhz Upload Speed: 115200 Description: Hi, I am having periodically issues with my wifi net. theskaz. The code is intended to do the following: Every 60 seconds, check to see if it's still connected to WiFi, and reconnect if not Every hour, pull data from the DHT22 and Post that to Thingspeak Reset the board Problem: Everything. CMake is an open-source, cross-platform family of tools designed to build, test and package software. Timer has a callback function associated with it. Follow the next instructions to create a new project on Firebase. I'd replace delay with a wake up time for deep sleep. Note: The example code for this project stores the library files in the same folder as the Arduino. () method must return quickly so that the other tasks in the loop get. See the RTOS Configuration documentation for more information. Helpful if you need a long delay() or you want to operating a stepping motor for more than a couple seconds. You can use a Queue. So why do I need to give control back to the CPU 1 where the loop is. Hi, My understanding is (I am new to this myself) that LOOP in your sketch is running as a task, when you issue the command "xTaskCreate" this then creates a. The WDT timer never fires. Arduino typically shows a 1ms. Also run each test at least twice, to detect nondeterministic/random effects. See the RTOS Configuration documentation for more information. The watchdog is "fed" in the IDLE task and while the APP_MAIN task has a higher priority than IDLE it is never interrupted. I dont get any delay even if I add some different delays. Delay in uS. timeClient. When it returns the software that supports your ESP32 application gets to do important housekeeping tasks, and reset the watchdog timer. Each task runs until it needs to wait for something, or until it decides it. Same thing, right after baud rate is set in void setup: rtc_wdt_protect_off (); rtc_wdt_disable (); This time, the GUI functions just like before (as if the watchdog timer/interrupt is not actually disabled). All other side functions should run non-time critical in the other core. INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available. It determines what process to run next based on priority. In the past I've played around a little with Rust and long before I put together a few little projects with ESP32 controllers using the Arduino libraries.