ESP-IDF 개발환경을 설치하고, FreeRTOS Task를 이용해 간단한 LED Blinking 예시를 만들어 보았다.
ESP-IDF는 Espressif사에서 만든 VSCode extension을 설치해서 간단하게 개발환경을 구축했다.
Code
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#define BLINK_GPIO_1 26
#define BLINK_GPIO_2 27
void task_LED1(void *param);
void task_LED2(void *param);
void app_main(void) {
xTaskCreate(task_LED1, "task1", 1024*2, NULL, 3, NULL);
xTaskCreate(task_LED2, "task2", 1024*2, NULL, 3, NULL);
}
void task_LED1(void *param) {
gpio_reset_pin(BLINK_GPIO_1);
/* Set the GPIO as a push/pull output */
gpio_set_direction(BLINK_GPIO_1, GPIO_MODE_OUTPUT);
while(1) {
printf("this is from task 1\n");
gpio_set_level(BLINK_GPIO_1, 0); // LED OFF
vTaskDelay(1000 / portTICK_RATE_MS);
gpio_set_level(BLINK_GPIO_1, 1); // LED ON
vTaskDelay(1000 / portTICK_RATE_MS);
}
vTaskDelete(NULL); // finishing the task
}
void task_LED2(void *param) {
gpio_reset_pin(BLINK_GPIO_2);
/* Set the GPIO as a push/pull output */
gpio_set_direction(BLINK_GPIO_2, GPIO_MODE_OUTPUT);
while(1) {
printf("this is from task 2\n");
gpio_set_level(BLINK_GPIO_2, 0); // LED OFF
vTaskDelay(500 / portTICK_RATE_MS);
gpio_set_level(BLINK_GPIO_2, 1); // LED ON
vTaskDelay(500 / portTICK_RATE_MS);
}
vTaskDelete(NULL); // finishing the task
}
FreeRTOS에 대한 학습을 진행할 것이라서, 겸사겸사 Task를 만들어 2개의 LED가 각자 주기에 맞추어 blinking하도록 해 보았다. ESP-IDF framework에 FreeRTOS 개발환경이 포함되어 있으므로, freertos 헤더파일들만 include하고, 각각의 task 함수를 만들었다.
두개의 LED는 GPIO 26, 27번 pin을 사용했고, 330Ω 저항을 LED에 각각 연결했다.
실행 결과
'Embedded > RTOS' 카테고리의 다른 글
[FreeRTOS] Task States (0) | 2022.02.03 |
---|
댓글