Advertisement

Tutorial ESP32 Dengan ESP-IDF : #4 Multitasking dengan FreeRTOS (Bagian 1)

1 121

ESP-IDF sebagai framework native yang dirilis Espressif dalam mengembangkan software ESP32, dibangun diatas FreeRTOS. Hal tersebut berarti, programmer dapat memanfaatkan banyak benefit dengan menggunakan library FreeRTOS, misalnya adalah menjalankan program secara multitasking.

Hal tersebut mengingat bahwa ESP32 merupakan System On Chip (mikrokontroler) yang dirancang memiliki dua inti alias “dual core” Mikroprosesor Xtensa 32-bit.  yaitu

  • core 0 (Protocol CPU yang biasa disebut sebagai CPU 0 atau PRO_CPU)
  • core 1 (Application CPU yang biasa disebut sebagai CPU 1 atau APP_CPU)

Dua inti ini secara praktek bersifat identik (sama) dan berbagi memori yang sama, sehingga memungkinkan dua inti tersebut menjalankan tugas yang sama secara bergantian.

Gambar 1

 

Meskipun secara default biasanya akan digunakan Core 0. Programmer dapat memaksimal kinerja ESP32 dengan menggunakan FreeRTOS agar kedua inti tersebut dapat bekerja mengeksekusi perintah sehingga program akan berjalan lebih efektif.

Adverstiment

FreeRTOS adalah RTOS yang  dirancang untuk cukup kecil dan bisa dijalankan oleh mikrokontroler, meskipun dapat diterapkan tidak hanya pada aplikasi mikrokontroler. Kernel FreeRTOS awalnya dikembangkan oleh  Richard Barry pada 2003, dan kemudian dikembangkan dan dipelihara oleh perusahaan miliknya yang bernama  Real Time Engineers Ltd.

Pembahasan mengenai FreeRTOS akan dibahas lebih rinci pada tulisan yang lain. Untuk sekarang, pembaca dapat merujuk artikel embeddednesia yang lain tentang  tentang mengapa RTOS diperlukan di dunia pemrograman embedded.

FreeRTOS pada ESP-IDF adalah versi modifikasi dari FreeRTOS yang asli, yang mendukung symmetric multiprocessing (SMP). FreeRTOS pada ESP-IDF bedasarkan porting Xtensa terhadap FreeRTOS v8.2.0

Namun meskipun begitu, beberapa fitur dari FreeRTOS v9.0.0  juga di-porting ke ISP-IDF  (backport). Beberapa API itu diantaranya adalah sebagai berikut:

  • xTaskCreateStatic() 
  • xQueueCreateStatic
  • xSemaphoreCreateBinaryStatic
  • xSemaphoreCreateCountingStatic
  • xSemaphoreCreateMutexStatic
  • xSemaphoreCreateRecursiveMutexStatic
  • xTimerCreateStatic() 
  • xEventGroupCreateStatic()

 

  • Prasyarat Materi

Pembaca diasumsikan telah membaca artikel sebelumnya di seri Tutorial ESP32 dengan ESP-IDF.

  • Prasyarat Perangkat Keras

Development Board yang kompatibel dengan artikel kali ini dan dapat dibeli di TOKO BEY. . Salah satu jenisnya adalah ESP32S DevKit DOIT dengan kaki – kaki pin berjumlah 38 seperti berikut

 

Pembaca dapat membeli modul ESP32 melalui TOKO BEY dengan mengakses halaman pembelian di tautan berikut.  Jika pembaca merasa tulisan ini bermanfaat, pembaca dapat berterimakasih dengan membeli produk di TOKO BEY

Development board lainnya, yang sedikit berbeda namun memiliki diagram pin yang sama adalah sebagai berikut

Advertisement

 

Pembaca dapat membeli modul ESP32 melalui TOKO BEY dengan mengakses halaman pembelian di tautan berikut.  Jika pembaca merasa tulisan ini bermanfaat, pembaca dapat berterimakasih dengan membeli produk di TOKO BEY

  • Prasyarat Perangkat Lunak

Sebagaimana tutorial sebelumnya, kali ini embeddednesia menggunakan environment perangkat lunak yangs sama dengan yang pernah dibahas pada pada tautan berikut

 

  • Membuat Project #1

Project ini melanjutkan project pada artikel sebelumnya yang bernama Blink. Programmer dapat membuat project baru dari scratch. dengan meng-clone ESP-IDF Template dan mengatur konfigurasinya seperti yang pernah dibahas pada saat membuat program Hello World yang lalu.

Cara lain yang lebih cepat adalah, membuat project baru dari project Blink di tulisan sebelumnya. Tinggal copy paste saja project tersebut dengan klik kanan pada direktori project, lalu pilih copy dan paste di Panel Project Explorer. Beri nama project tersebut, misalnya Multitask.

Agar tidak terjadi salah build, pastikan project selain Multitasksebaiknya dalam kondisi close. Caranya klik kanan direktori project yang ingin di-close, lalu pilih Close Project. Jika suatu saat programmer ingin membuka lagi tinggal klik kanan lalu Open Project 

- Advertisement -

 

  • Eksperimen #1: xPortGetCoreID

Pada main.c tambahkan code-nya menjadi sebagai berikut


#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "driver/gpio.h"
#include "sdkconfig.h"

#define BLINK_GPIO 2

void app_main()
{

	gpio_pad_select_gpio(BLINK_GPIO);
	/* Set the GPIO as a push/pull output */
	gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
	printf("core : %u \n", xPortGetCoreID());
	while(1) {
		/* Blink off (output low) */
		printf("Turning off the LED\n");
		gpio_set_level(BLINK_GPIO, 0);
		vTaskDelay(1000 / portTICK_PERIOD_MS);
		/* Blink on (output high) */
		printf("Turning on the LED\n");
		gpio_set_level(BLINK_GPIO, 1);
		vTaskDelay(1000 / portTICK_PERIOD_MS);
	}
}

Pada baris 2 dan 3, programmer memasukkan "freertos/FreeRTOS.h” dan "freertos/task.h" yang merupakan library yang dibutuhkan untuk aplikasi FreeRTOS

Perhatikan pada baris 16 dimana satu baris statement printf disisipkan. Tujuannya adalah agar hasil dari xPortGetCoreID() dapat dicetak di konsol. Fungsi xPortGetCoreID() sendiri  berfungsi mengidentifikasi core mana yang sedang dijalankan.

Build dan flashing program tersebut pada ESP32, lalu jalankan make monitor

Perhatikan pada konsol,  core yang sedang dijalankan untuk logika tersebut  adalah core 0. Selebihnya program akan berjalan sama dengan program Blinky sebagaimana telah dibahas dalam tulisan sebelumnya

 

Dalam artikel selanjutnya,  embeddednesia akan melanjutkan eksperimen ESP-IDF dan FreeRTOS : Bagaimana Membuat Task Baru dengan FreeRTOS.

Baca juga tulisan lain pada seri #Tutorial ESP32 dengan ESP-IDF atau tulisan menarik lainnya di kategori ESP32
1 Komentar
  1. […] Tutorial ESP32 Dengan ESP-IDF : #4 Multitasking dengan FreeRTOS (Bagian 1) […]

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogger menyukai ini: