RTOS running on one core only

sankd420
Posts: 1
Joined: Fri Sep 06, 2019 9:17 am

Re: RTOS running on one core only

Postby sankd420 » Fri Sep 06, 2019 9:36 am

Ok I have also have an issue where my esp32 from DO-IT using NODEMCU-12E board in boards manager doesnt accept rtos and throws error in arduino i am so frustrated by this especially because i specially ordered these because of the rtos and dual core capability.Can any one of u please tell me how to run rtos on the DO-IT board,i have tries this but returns an error saying that xtraskcreate doesnt exist or xtask"anything here" is not defined and the code doesnt even compile , I am too frustrated about this please can anyone fix this???/

ESP_Dazz
Posts: 308
Joined: Fri Jun 02, 2017 6:50 am

Re: RTOS running on one core only

Postby ESP_Dazz » Fri Sep 06, 2019 12:30 pm

sankd420 wrote: Ok I have also have an issue where my esp32 from DO-IT using NODEMCU-12E board in boards manager doesnt accept rtos and throws error in arduino i am so frustrated by this especially because i specially ordered these because of the rtos and dual core capability.Can any one of u please tell me how to run rtos on the DO-IT board,i have tries this but returns an error saying that xtraskcreate doesnt exist or xtask"anything here" is not defined and the code doesnt even compile , I am too frustrated about this please can anyone fix this???/
Could you please post the specific error output you're getting?

tommeyers
Posts: 184
Joined: Tue Apr 17, 2018 1:51 pm
Location: Santiago, Dominican Republic

Re: RTOS running on one core only

Postby tommeyers » Fri Sep 06, 2019 12:59 pm

Thank you, you are more patient than I would be.

Another way to argue is:

If running RTOS on one processor means that CTOS on the other processor is not an OS then running CTOS on one processor means that RTOS on the other processor is not an OS. Together that would mean that there is no OS on either processor. Which is ridiculous.

Please, continue your innovative work on esp-32.

Tom Meyers
IT Professional, Maker
Santiago, Dominican Republic

mad_b747
Posts: 12
Joined: Sun Apr 12, 2020 1:26 pm

Re: RTOS running on one core only

Postby mad_b747 » Mon Apr 20, 2020 2:10 pm

Hello Mr. @HelWeb

I found the time critical core 1 operations solution as described by you very suitable to my needs. In fact, I would like to make a bare metal in core 1 even if being inside a task called with no interrupts on that core; no other tasks or O.S.

However I seen in some answers in this topic regarding a need of core 0 to talk to core 1 (interrupts or similar), what would disturb core 1 "real time" operations.

Have you run into some similar situation, by your posts it seems to me that you managed to make it really work - my understanding is that you can keep the ESP32 talking and "functioning" normally with core 0 while running your time critical operations on core 1. AND have both talking to each other if needed.

Finally, are the code texts that you posted all needed to start something in this way or are excerpts and more work is needed.

Thanks in advance

Baldilocks
Posts: 1
Joined: Tue Nov 10, 2020 1:52 pm

Re: RTOS running on one core only

Postby Baldilocks » Wed Nov 11, 2020 11:03 am

On Fri Apr 05, 2019 10:34 pm HelWeb asked "But now i have the problem, how to measure such times in a program - who can help ?"

A lot of time has passed but I only found this thread recently when I was trying to optimise my capture software.

I am an amateur who has dabbled with software on and off over the years and now, nearing 70, I have set myself a difficult challenge that I hope that I am a little closer to achieving with HelWeb's code snippet so - thank you to HelWeb!

My solution to the above question is to use
  1. while(i < 20) {
  2. irq=REG_READ(GPIO_IN_REG) & (1<<21); // Test pin 21
  3. if (irq != lastIrq) {
  4.   irqArray[i] = irq;
  5.   CountArray[i]=ESP.getCycleCount();
  6.   i++;
  7.     if (irq) REG_WRITE(GPIO_OUT_W1TS_REG,(1<<22));
  8.     else REG_WRITE(GPIO_OUT_W1TC_REG,(1<<22));  
  9. lastIrq=irq;
  10. }   // if irq
  11. }   // while i
I had to use an array to review the timings later because Serial.print is too slow.
Feeding a pulse sequence from an Arduino Nano programmed in assembler, with pulses from 125nS to 875nS resulting in output pulses of 158nS to 830nS. This was vastly superior to my results using interrupts (also using ESP.getCycleCount() for timing) that gave poor, unstable results until the Nano pulses were over about 3uS, with a similar interval between.

rob_bits
Posts: 16
Joined: Wed Jun 13, 2018 5:15 am

Re: RTOS running on one core only

Postby rob_bits » Wed Jan 04, 2023 3:03 pm

Long time this topic was commented, however I have an additional comment on how to get this run.

Basically if you would like to run a separate function on Core 1 you will face issues that others observed, if the interrupts are disabled on core1. And I figured out, if everything is ran from RAM on that core then you should be fine.

For example I had issues to run ethernet on Core 0 and time critical application on Core 1. And I could get proper operation only if all of the functions that Core 1 app calls has an attribute IRAM_ATTR and all related variables / constants have the attribute DMA_ATTR. If during running time anything uses flash on Core 1 that can cause conflicts.

I hope this is useful addition for the previous posts.

dikdom
Posts: 1
Joined: Mon Jan 16, 2023 11:11 pm

Re: RTOS running on one core only

Postby dikdom » Mon Jan 16, 2023 11:37 pm

Hello,

this interesting discussion contains almost all the information I need, but unfortunately I couldn't reproduce it in my env. Could someone shed a light in my mind? ...
So, I have an ESP32-S3 (2 cores)
In the 'Component config -> ESP System Settings' I unchecked (disabled) 'Watch CPU1 Idle Task' and 'Also watch CPU1 tick interrupt'
I couldn't find any settings about enabling static task execution, but I don't really understand why does it matter? The required memories (stack, etc) is allocated only once, during starting of the task on CPU1.
In the source I've defined a task and scheduled it with xTaskCreatePinnedToCore(...). In the task I print the affinity of itself (it is 1). So far so good. Changing a volatile variable in this task has an effect in the main_app().
But once I disable the interrupts in this task (on core1) by calling the portDISABLE_INTERRUPTS(); the execution falls apart. Among many others I can see this message:
Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU0).
What is going on here? Is the portDISABLE_INTERRUPTS() call disables interrupts on core0 also? How to disable interrupts only on one core?

Loosely coupled question but originally I tried to override the esp_startup_start_app_other_cores_default() method in order to completely override the core1 execution (according to this: https://docs.espressif.com/projects/esp ... re-startup). I terribly failed. What is wrong with overriding this way?

Code: Select all

void esp_startup_start_app_other_cores_default(void) {
...
}
My code seemingly didn't start in that method (I tried to blink a led, I tried to write into a volatile variable, but no effect anyway)

Thanks for your answers!

ps: I'm using the latest, currently 5.0 IDF

5ami5555
Posts: 3
Joined: Tue Jan 17, 2023 12:54 pm

Re: RTOS running on one core only

Postby 5ami5555 » Sun Jan 22, 2023 2:21 pm

Hi HelWeb,

-In the company I work for we are trying to do something similar with ESP32s3 however we needed hardware Interrupts on core 1, we managed to boot core 1 without starting the FreeRTOS schedule, however we are still struggling as it is not a reliable process, it could be probably because of some silicon level bugs on the chip, which there is no information about (talking for ESP32s3 as its errata has documented 3 bugs only !).

-Its now 2023 and Espressif still don't want to support this approach (only Espressif know why !). For my opinion ESP32 series will remain for doing hobbies and university level projects, or as an add-on to add wireless connectivity another MCU( STM, TI, NXP ext), unless Espressif does something about it, which till now they don't want do anything about, and they are happy with the business they have now.

I like to call all MCU from Espressif as a "freeRTOS MCU", as simply they are not made to be operated without FreeRTOS (or similar OS like zephyr ), it is theoretically possible, but in practice.....

Who is online

Users browsing this forum: Mycael_ and 93 guests