Performance Benchmarking with FreeRTOS implementation in the ESP32 Thing

Advanced ESP32 FreeRTOS on the ESP32
12 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
€67.34
List Price:  €96.21
You save:  €28.86
£55.94
List Price:  £79.93
You save:  £23.98
CA$100.65
List Price:  CA$143.79
You save:  CA$43.14
A$112.33
List Price:  A$160.48
You save:  A$48.15
S$95.07
List Price:  S$135.83
You save:  S$40.75
HK$543.93
List Price:  HK$777.07
You save:  HK$233.14
CHF 62.61
List Price:  CHF 89.45
You save:  CHF 26.84
NOK kr799.33
List Price:  NOK kr1,141.95
You save:  NOK kr342.62
DKK kr502.32
List Price:  DKK kr717.64
You save:  DKK kr215.31
NZ$124.25
List Price:  NZ$177.52
You save:  NZ$53.26
د.إ257.07
List Price:  د.إ367.25
You save:  د.إ110.18
৳8,395.96
List Price:  ৳11,994.74
You save:  ৳3,598.78
₹5,947.38
List Price:  ₹8,496.63
You save:  ₹2,549.24
RM315.51
List Price:  RM450.75
You save:  RM135.24
₦108,935.23
List Price:  ₦155,628.43
You save:  ₦46,693.20
₨19,553.63
List Price:  ₨27,934.96
You save:  ₨8,381.32
฿2,411.01
List Price:  ฿3,444.45
You save:  ฿1,033.44
₺2,462.87
List Price:  ₺3,518.54
You save:  ₺1,055.66
B$432.25
List Price:  B$617.53
You save:  B$185.28
R1,286.40
List Price:  R1,837.80
You save:  R551.39
Лв131.81
List Price:  Лв188.31
You save:  Лв56.50
₩101,406.23
List Price:  ₩144,872.25
You save:  ₩43,466.02
₪255.41
List Price:  ₪364.89
You save:  ₪109.47
₱4,117.93
List Price:  ₱5,883.01
You save:  ₱1,765.08
¥10,970.49
List Price:  ¥15,672.80
You save:  ¥4,702.31
MX$1,420.18
List Price:  MX$2,028.91
You save:  MX$608.73
QR256.43
List Price:  QR366.34
You save:  QR109.91
P967.77
List Price:  P1,382.59
You save:  P414.82
KSh9,046.20
List Price:  KSh12,923.70
You save:  KSh3,877.50
E£3,563.73
List Price:  E£5,091.27
You save:  E£1,527.53
ብር8,934.81
List Price:  ብር12,764.56
You save:  ብር3,829.75
Kz64,250.82
List Price:  Kz91,790.82
You save:  Kz27,540
CLP$69,405.58
List Price:  CLP$99,155.08
You save:  CLP$29,749.50
CN¥510.85
List Price:  CN¥729.81
You save:  CN¥218.96
RD$4,272.98
List Price:  RD$6,104.52
You save:  RD$1,831.54
DA9,417.81
List Price:  DA13,454.60
You save:  DA4,036.78
FJ$162.47
List Price:  FJ$232.11
You save:  FJ$69.64
Q541.22
List Price:  Q773.21
You save:  Q231.98
GY$14,699.69
List Price:  GY$21,000.46
You save:  GY$6,300.76
ISK kr9,732.10
List Price:  ISK kr13,903.60
You save:  ISK kr4,171.50
DH705.15
List Price:  DH1,007.40
You save:  DH302.25
L1,289.19
List Price:  L1,841.78
You save:  L552.59
ден4,145.57
List Price:  ден5,922.50
You save:  ден1,776.92
MOP$562.37
List Price:  MOP$803.42
You save:  MOP$241.05
N$1,284.24
List Price:  N$1,834.70
You save:  N$550.46
C$2,585.91
List Price:  C$3,694.32
You save:  C$1,108.40
रु9,565.49
List Price:  रु13,665.58
You save:  रु4,100.08
S/262.28
List Price:  S/374.71
You save:  S/112.42
K284.79
List Price:  K406.86
You save:  K122.07
SAR262.99
List Price:  SAR375.72
You save:  SAR112.72
ZK1,944.48
List Price:  ZK2,777.96
You save:  ZK833.47
L335.15
List Price:  L478.81
You save:  L143.65
Kč1,692.70
List Price:  Kč2,418.25
You save:  Kč725.55
Ft27,859.13
List Price:  Ft39,800.47
You save:  Ft11,941.33
SEK kr772.53
List Price:  SEK kr1,103.66
You save:  SEK kr331.13
ARS$71,530.46
List Price:  ARS$102,190.76
You save:  ARS$30,660.29
Bs485.50
List Price:  Bs693.61
You save:  Bs208.10
COP$306,446.24
List Price:  COP$437,799.12
You save:  COP$131,352.87
₡35,334.71
List Price:  ₡50,480.33
You save:  ₡15,145.61
L1,783.55
List Price:  L2,548.03
You save:  L764.48
₲548,864.71
List Price:  ₲784,126.06
You save:  ₲235,261.34
$U3,122.15
List Price:  $U4,460.41
You save:  $U1,338.25
zł286.96
List Price:  zł409.96
You save:  zł123
Already have an account? Log In

Transcript

Video performance benchmarking with free Otto's implementation in the sparkfun ESP 32 thing. In this video, we will look at the performance comparison between an Arduino you know our three ESP a 266 and the ESP 32. Finally, we will also compare the performance increase in the ESP 32 with the implementation of free arctos multitasking and inter task communication. By now you would have experienced firsthand the capabilities of the sparkfun ESP 32 thing. It's no surprise that the ESP 32 is indeed faster than any of the other boards. We will be comparing.

But in this video, we will find out exactly how faster the ESP 32 is, especially with three Otto's implementation to use that extra code that is dominant. Most speed tests out there use only some artificial software load To compare the speed of execution, but I have cooked up a simple yet powerful template code that can put a strain on the code by using both software and hardware loads please download all the codes from the resources section or access it from the repository downloaded earlier. Now low the Arduino you know r three.io no code in Arduino Id let me explain the template code as it is reused for all other boats with slight tweaks here and there. In the code, we are first imported the math dot h library. So that we can work with the power function to find the power of value. The code will also have three functions.

The first function is the double underscore power function, which takes in a variable of data type unsigned integer. It then iterate from zero to that number and on each iteration and finds the square of the number. The function also keeps track of the time it took for execution with the Millis function and returns the value does this function adds a software load on the CPU. The second function is loop underscore GPIO. This function adds a hardware load on the CPU. The way we do it is by switching a GPIO pin on and off very fast for a specified number of times.

Just like the double underscore PL function, it takes in a variable of data type unsigned integer. It then iterate from zero to that number on each iteration, and it quickly said the GPIO pin 13 high and low. The function also keeps track of the time it took for execution with the Millis function and returns the value. The third function is the do underscore measure function. The purpose of this function is to set the input parameter count for both the previous functions and it The sum of the execution time for both the functions. Finally, it will convert the execution time from milliseconds to seconds and prints it on the serial monitor.

Inside the do underscore measure function, you can see that we have used a plus equal operator for these two lines of codes. This is done when we need to do a cumulative sum of two independent variables as shown here. If you go through the code, you can see that you enter 32 underscore T is used a lot. This is a data type called as an unsigned integer. It can hold only whole numbers, but no negatives. The number after the unit refers to the number of bits the data type uses.

Thus 32 bits can hold numbers from zero to two raised to 32. In the word setup, we begin the serial monitor with the baud rate of 9600. As we are using the Arduino you know r three in the void loop, we have called the do underscore measure function, which will initiate the speed test on Arduino you know r three. After uploading the code to our Arduino you know r three, I have opened the serial monitor and set the baud rate to 9600. After waiting for some time, I've got the result of the speed test. The combined software and hardware load took around 7.1 seconds to compete on an Arduino.

Next, open the ESP a 266 dot IO no code in Arduino ID. The code is almost the same as the Arduino you know our three code. The only difference is that we have set the baud rate of the serial monitor to 115200 and change this text to ESP a to six. Now after connecting my node MCU ESP eight to six, six Upload the code and enable the serial monitor with the correct baud rate. After waiting for some time, I've got the results of the speed test. The combined software and hardware load took around 2.4 seconds to complete on a node MCU ESP 8266.

Next, open the ESP 32 underscore single underscore core.io. No code in Arduino ID. The code is almost the same as the ESP a 266 dot i n o code. The only difference is that we have added an instruction to check on which code the code is running. Now, after connecting my sparkfun ESP 32 thing, I uploaded the code and enabled the serial monitor with the correct baud rate. The combined software and hardware load took around just 0.4 seconds to complete.

Furthermore, it was achieved with just a single core that is The core one. Now let's unlock the true potential of the ESP 32. By using free arctos, multitasking and inter task communication, we will run the same load on both the cores at the same time. And we will use free Otto's tasks and queues to implement a very reliable system. Open the ESP 32 underscore D will underscore core.io no code in the Arduino ID, I will explain the changes to the base code. We have first added three macro definitions.

These instructions save the pin numbers for the GPIO switching test for each core. This instruction keeps the size of each message in the queue that will be created later. The next instruction creates a handle for accessing the queue that will be created later. The double underscore POW and loop underscore GPIO functions are the same as the previous code before going to the do underscore measure function, let's take a look at the void setup loop. Here we have set the pin modes of both the GPIO pins 13 and 14 as output. Then we have created a queue with length 10 the size in bytes which each item in the queue should hold is based on the data tab and the macro we defined earlier.

Next, you can see that we have created three tasks. The first task called my core zero task is pinned to the core of zero and the second task called my core one task is pinned to code one. When you check the function definition for both these tasks, you will realize that both are calling the same do underscore measure function. So essentially, what this code both the cores are running the same speed test parallely the third time called Microsoft task is pinned to the core one, and its function is to collect the results from the queue and print it on the serial monitor. Now let's discuss about the modified do underscore measure function. To understand the updated do underscore measure function, you need to first understand the need for a queue in the speed test.

Ultimately, we want the time of execution for each core printed independently on the serial monitor. But let's say both the Miko one task and Miko two task send the result at the same time. This will lead to a collision and only one result will be retrievable. To avoid this, we created a queue in which whenever a result is produced by either of the tasks, it will get stored in the queue, so that even if the main result task is busy, the result won't be lost. Inside the do underscore measure function We will store the core ID of the currently running task to the zero index of the message array. Now, based on the core ID, we will save the time of execution of the loop underscore GPIO function starting from the index position one, then we will implement a cumulative addition with the data present in the index position 10.

This position has the time of execution of the double underscore path function. Next, the total time of execution is stored in index position level of the message array. Finally, this free autos function will load the message array to the queue created earlier. The main result task will access the message array from the queue and extract the core ID and execution time and display it on the serial monitor. This is the full implementation of multitasking and inter task communication in the speed test code. Now let's see what are the results after uploading the combined software in hardware load took around just 0.2 seconds to complete for a single core.

Remember that both cores are running the same load parallely. Still, it managed to do it two times faster on each core. To give a context of the upgrade in processing power, it will need two instances of the same code running parallel on both cores to reach the execution time versus of the last test on the ESP 32. This means that in effect per core performance has increased twice and combined core performance has quadrupled. The per core performance bump was due to the implementation of cues, cue implementation remote the need to override previous results. Thus making the access speed of data much faster.

The Combined core performance bump was obviously due to the implementation of multitasking using tasks. Summary. In this video we have covered the following topics performance comparison between Arduino you know our three node MCU, ESP 8066 and sparkfun ESP 32 performance comparison with and without free Otto's implementation on the sparkfun ESP 32 thing. Section summary in the section we have covered the following topics, what is the real time operating system free Otto's implementation in the ESP 32 What are tasks queues and semaphores implementing dual core multitasking and synchronization in the sparkfun ESP 32 thing. inter task communication in the sparkfun ESP 32 thing with free arctos performance benchmarking with Free Otto's implementation in the sparkfun ESP 32 thing. In the next section, we will learn about deep sleep in the ESP 32

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.