Implementing Dual-Core Multitasking and Synchronization in the ESP32 Thing

Advanced ESP32 FreeRTOS on the ESP32
8 minutes
Share the link to this page
Copied
  Completed
You need to have access to the item to view this lesson.
One-time Fee
$69.99
List Price:  $99.99
You save:  $30
€65.14
List Price:  €93.07
You save:  €27.92
£55.73
List Price:  £79.62
You save:  £23.88
CA$95.61
List Price:  CA$136.60
You save:  CA$40.98
A$106.30
List Price:  A$151.87
You save:  A$45.56
S$94.64
List Price:  S$135.20
You save:  S$40.56
HK$546.91
List Price:  HK$781.33
You save:  HK$234.42
CHF 63.50
List Price:  CHF 90.72
You save:  CHF 27.21
NOK kr764.69
List Price:  NOK kr1,092.46
You save:  NOK kr327.77
DKK kr485.92
List Price:  DKK kr694.20
You save:  DKK kr208.28
NZ$117
List Price:  NZ$167.15
You save:  NZ$50.15
د.إ257.06
List Price:  د.إ367.25
You save:  د.إ110.18
৳7,661.98
List Price:  ৳10,946.16
You save:  ৳3,284.17
₹5,839.65
List Price:  ₹8,342.71
You save:  ₹2,503.06
RM331.75
List Price:  RM473.95
You save:  RM142.20
₦86,437.65
List Price:  ₦123,487.65
You save:  ₦37,050
₨19,492.21
List Price:  ₨27,847.21
You save:  ₨8,355
฿2,575.56
List Price:  ฿3,679.53
You save:  ฿1,103.97
₺2,262.43
List Price:  ₺3,232.18
You save:  ₺969.75
B$357.76
List Price:  B$511.10
You save:  B$153.34
R1,296.01
List Price:  R1,851.52
You save:  R555.51
Лв127.38
List Price:  Лв181.98
You save:  Лв54.60
₩95,113.23
List Price:  ₩135,881.87
You save:  ₩40,768.63
₪260.11
List Price:  ₪371.60
You save:  ₪111.49
₱3,999.61
List Price:  ₱5,713.97
You save:  ₱1,714.36
¥10,715.43
List Price:  ¥15,308.41
You save:  ¥4,592.98
MX$1,185.45
List Price:  MX$1,693.57
You save:  MX$508.12
QR254.79
List Price:  QR364.01
You save:  QR109.21
P955.69
List Price:  P1,365.33
You save:  P409.64
KSh9,427.65
List Price:  KSh13,468.65
You save:  KSh4,041
E£3,355.67
List Price:  E£4,794.02
You save:  E£1,438.35
ብር3,989.43
List Price:  ብር5,699.43
You save:  ብር1,710
Kz58,616.62
List Price:  Kz83,741.62
You save:  Kz25,125
CLP$66,326.02
List Price:  CLP$94,755.52
You save:  CLP$28,429.50
CN¥506.51
List Price:  CN¥723.62
You save:  CN¥217.11
RD$4,049.59
List Price:  RD$5,785.38
You save:  RD$1,735.78
DA9,420.19
List Price:  DA13,457.99
You save:  DA4,037.80
FJ$157.70
List Price:  FJ$225.30
You save:  FJ$67.59
Q542.62
List Price:  Q775.21
You save:  Q232.58
GY$14,613.08
List Price:  GY$20,876.73
You save:  GY$6,263.64
ISK kr9,792.30
List Price:  ISK kr13,989.60
You save:  ISK kr4,197.30
DH706.05
List Price:  DH1,008.69
You save:  DH302.63
L1,239.86
List Price:  L1,771.31
You save:  L531.44
ден4,010.92
List Price:  ден5,730.13
You save:  ден1,719.21
MOP$562.15
List Price:  MOP$803.11
You save:  MOP$240.95
N$1,302.54
List Price:  N$1,860.85
You save:  N$558.31
C$2,571.43
List Price:  C$3,673.63
You save:  C$1,102.20
रु9,317.58
List Price:  रु13,311.40
You save:  रु3,993.82
S/262.81
List Price:  S/375.46
You save:  S/112.65
K268.53
List Price:  K383.63
You save:  K115.10
SAR262.51
List Price:  SAR375.03
You save:  SAR112.52
ZK1,879.71
List Price:  ZK2,685.42
You save:  ZK805.70
L324.19
List Price:  L463.14
You save:  L138.95
Kč1,629.65
List Price:  Kč2,328.17
You save:  Kč698.52
Ft25,373.17
List Price:  Ft36,248.95
You save:  Ft10,875.77
SEK kr758.75
List Price:  SEK kr1,083.98
You save:  SEK kr325.22
ARS$61,468.94
List Price:  ARS$87,816.53
You save:  ARS$26,347.59
Bs482.36
List Price:  Bs689.12
You save:  Bs206.75
COP$272,946.91
List Price:  COP$389,940.87
You save:  COP$116,993.96
₡35,623.88
List Price:  ₡50,893.45
You save:  ₡15,269.56
L1,732.95
List Price:  L2,475.75
You save:  L742.80
₲523,151.84
List Price:  ₲747,391.81
You save:  ₲224,239.96
$U2,683.09
List Price:  $U3,833.15
You save:  $U1,150.06
zł281.85
List Price:  zł402.67
You save:  zł120.81
Already have an account? Log In

Transcript

Video implementing dual core multitasking and synchronization in the sparkfun ESP 32 thing. In this video we will learn the following multitasking in the ESP 32. Implementing tasks implementing Center offers. The ESP 32 comes with to extensa 32 bit LX six macroprocesses in one package. We have already shown you how the Arduino ID, by default can only run the code on core one. Meanwhile, core zero is idle.

Let us now look at how to leverage the concept of tasks in free Otto's to implement multitasking in ESP 32. To assign specific parts of code to a specific code, you need to create tasks. To make you understand the basics of multitasking. We will take a very simple example. We will create two tasks that independently Blinky LEDs with a different delay time. For that, we need to run each task on separate course.

Start by wiring to led us to the boat as shown in the following circular diagram. Here the red LED is controlled by pin 25 and green LED BY pin 26. Also, make sure you choose the appropriate current limiting resistor for the LEDs. Connect your sparkfun ESP 32 thing to your PC and open the Arduino IDE D and open the LED D will code.io sketch from the repository. As the ESP 32 Arduino core already has free Otto's inbuilt, you don't need to import any new libraries to work with free arctos. First, we have created two task handles named task one and task two using the free arctos keyword task handle underscore t this is just a pointer for the code to access the instructions.

Each task Next we have assigned the pin number of both the LED is to a variable of data type Constantine teacher inside board setup. As always, we enable the serial monitor and set the mode of the GPIO pins 25 and 26 as output. Next comes the fun part. The creation of tasks is always done in the setup loop. A task in ESP 32 is created by the free arctos function called x task create print to call. This function accepts seven parameters to configure the nature of the task.

They are appointed to the task, the name of the task, stack size, the task needs, the parameter of the task, the priority level of the task, the task handle, and finally, the core in which the task should run. Here you can see that we have created two tasks with the same priority level and stack size. The most important difference between the two tasks is the core to which it is pinned. The red LED blink task is pinned to core zero, and the green LED blink task is pinned to core one. This is essentially what allows a code to do multitasking in an ESP 32. Next, we have created function definitions for both the tasks.

During the creation of tasks itself, we have assigned a function name for the task, make sure you use the same function name here also, as both the tasks don't have any parameters, we have defined the functions with void parameter. Furthermore, the functions don't return any values does. The function itself is of type void. To implement an infinite loop, we have used a for loop with no control variable condition or iteration. Next we have used the export gate code function inside both the tasks. This is to use the serial monitor to see on which code the task is running.

In the case of the red LED, we have set it to blink every 1.4 seconds. In the case of green LED, the blink time is set to 0.7 seconds. As we can't remove the void loop from any Arduino sketch, we have lifted empty instead. Now upload the code to your sparkfun ESP 32 thing. You can see that the red and green LEDs are blinking totally independent from each other. If you check in the serial monitor, you can see that both cores are used at the same time.

Thus, you can use this kind of multitasking in applications where each code is doing something totally independent. But in most real life applications, there are cases where we need to synchronize different tasks especially when they are competing for the same resources. In such situations, we need to use send offers. More specifically, we have to use a mutually exclusive center for also known as mutex, semaphore. A mutex, semaphore can exist in only two states, that is a quiet state and release state. It is like a baton in a relay race, there is only one baton and the person owning it has to run.

In the end, the baton is passed to the next runner. Because of this mutex semaphores are often used to synchronize tasks. The synchronization can also be done without free arctos also. But the most important thing to notice that if we use a semaphore to implement synchronization, that is zero CPU load during the waiting period. In the case of normal sequential programming, even an empty loop will utilize CPU. This is one of The reasons why free Otto's is very necessary for IoT applications.

With less CPU utilization comes more battery life. If you want to know more about other sniffers and your application, please check out the resources section. Shall we now implement a mutex semaphore in our Arduino sketch to synchronize the tasks. Basically, the goal is to make the green LED blink task to wait until the red LED blink task has finished and given the semaphore back to the green LED blink task. Once the green LED blink task has finished, it must release the center soul and then the red LED blink task will continue on our ESP 32. There are three functions to deal with the mutex center for XML for create mutex XML forgive and XML for take open the LED sing blink dot INR code file from the repository in the Arduino IDE First, we create a semaphore handle, the name of this handle will be set for itself.

In the setup, we create a mutex semaphore by assigning the external flow create mutex function to the semaphore handle. Next, we will add two instructions to both the tasks. One is to take the Center for if it is available and the other is to give back the center full once the task is done. Center for is just like the baton in a relay race. The XML for take center for command port max underscore delay instruction will wait for infinite time for the mutex semaphore named semaphore to get free. Once the task is done, the XML for gave semaphore will release the semaphore So, that the next task can use it initially the semaphore will be free.

Thus the red LED blink task will take the semaphore and execute After execution, the semaphore is released. As soon as it gets released, the green LED blink task will take the semaphore and execute after execution, the semaphore is released and then the cycle continues. Thus, synchronization is successfully implemented between two tasks. Summary In this video we have covered the following topics, multitasking in the ESB 32 implementing tasks implementing semaphores In the next video, we will cover inter task communication in the sparkfun ESP 32 thing with free arctos

Sign Up

Share

Share with friends, get 20% off
Invite your friends to LearnDesk learning marketplace. For each purchase they make, you get 20% off (upto $10) on your next purchase.