Back to TILs

Esp32 with FreeRTOS using Arduino - Blink

C FreeRTOS Arduino xTaskCreatePinnedToCore

Table of contents

File FreeRTOS_Esp32_blink.ino


#include "FreeRTOS_Esp32_blink_2.hpp"


// https://forum.arduino.cc/t/esp32-getting-to-the-core-of-the-task/1161303
//
// https://docs.espressif.com/projects/esp-idf/en/v4.3/esp32/api-reference/system/freertos.html
//
// freertos/include/freertos/task.h
//
// BaseType_t xTaskCreatePinnedToCore(
//    TaskFunction_t   pvTaskCode,
//    const char *     constpcName,
//    const uint32_t   usStackDepth,
//    void *           constpvParameters,
//    UBaseType_t      uxPriority,
//    TaskHandle_t *   constpvCreatedTask,
//    const BaseType_t xCoreID
// )


// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
void setup() {
  // Initialize serial communication
  Serial.begin(115200);

  // Initialize the onboard LED pin
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);

  TaskFunction_t   pvTaskCode = ledTask;
  const char *     constpcName = "LED Task";
  const uint32_t   usStackDepth = 2048;
  void *           constpvParameters = NULL;
  UBaseType_t      uxPriority = 1;
  TaskHandle_t *   constpvCreatedTask = &ledTaskHandle;
  const BaseType_t xCoreID = 1;

  // Create the LED task
  xTaskCreatePinnedToCore(
      pvTaskCode,         // Task function
      constpcName,        // Task name
      usStackDepth,       // Stack size
      constpvParameters,  // Task parameters
      uxPriority,         // Task priority
      constpvCreatedTask, // Task handle
      xCoreID             // Core number to run the task on (0 or 1)
      );
}

// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
void loop() {}

Compiling the project

# BOARD?=esp32:esp32:uPesy_wroom
BOARD?= esp32:esp32:esp32da
PORT?= /dev/ttyUSB0
BAUD?= 115200
PROJECT_NAME?=FreeRTOS_Esp32_blink

all:
	$(Q)echo "Compiling $(PROJECT_NAME)..."
	$(Q)mkdir -p out
	$(Q)arduino-cli compile \
		--clean \
		--fqbn $(BOARD) \
		--output-dir out \
		$(PROJECT_NAME).ino
	$(MAKE) til
	$(MAKE) til_copy

clean:
	$(RM) -r out
	$(RM) -r til

Update config, toolchain, libraries

.PHONY: update
update:
	$(Q)echo create config at /home/geraldo/.arduino15/arduino-cli.yaml
	$(Q)arduino-cli config init || echo Config file already exists
	$(Q)arduino-cli config set network.connection_timeout 600s
	$(Q)cat /home/geraldo/.arduino15/arduino-cli.yaml
	$(Q)arduino-cli core update-index
	$(Q)arduino-cli core install arduino:avr
	$(Q)arduino-cli core install esp32:esp32
	$(Q)arduino-cli upgrade

Upload binary to the board

.PHONY: upload
upload:
	$(Q)arduino-cli upload \
		$(shell pwd) \
		--input-dir out/ \
		--port $(PORT) \
		--fqbn $(BOARD) \
		--verbose \
		--verify

Open serial monitor in another terminal

.PHONY: serial
serial:
	$(Q)xfce4-terminal -x picocom $(PORT) \
		--baud $(BAUD) \
		--echo \
		--exit-after 10000