Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion cpu/esp32/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ MODULE = cpu
# Add a list of subdirectories, that should also be built:
DIRS += $(RIOTCPU)/esp_common
DIRS += periph
DIRS += freertos
DIRS += vendor

ifneq (, $(filter esp_can, $(USEMODULE)))
Expand All @@ -19,4 +18,8 @@ ifneq (, $(filter esp_wifi, $(USEMODULE)))
DIRS += esp-wifi
endif

ifneq (, $(filter riot_freertos, $(USEMODULE)))
DIRS += freertos
endif

include $(RIOTBASE)/Makefile.base
1 change: 1 addition & 0 deletions cpu/esp32/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ USEMODULE += periph_hwrng
USEMODULE += periph_flash
USEMODULE += periph_rtc
USEMODULE += periph_uart
USEMODULE += riot_freertos
USEMODULE += random
USEMODULE += stdio_uart
USEMODULE += xtensa
Expand Down
17 changes: 12 additions & 5 deletions cpu/esp32/freertos/task.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

#ifndef DOXYGEN

#define ENABLE_DEBUG 0
#define ENABLE_DEBUG (0)
#include "debug.h"

#include <string.h>
Expand Down Expand Up @@ -139,8 +139,14 @@ void vTaskEnterCritical( portMUX_TYPE *mux )
/* disable interrupts */
uint32_t state = irq_disable();

/* aquire the mutex with interrupts disabled */
mutex_lock(mux); /* TODO should be only a spin lock */
/* Locking the given mutex does not work here, as this function can also
be called in the interrupt context. Therefore, the given mutex is not
used. Instead, the basic default FreeRTOS mechanism for critical
sections is used by simply disabling interrupts. Since context
switches for the ESP32 are also based on interrupts, there is no
possibility that another thread will enter the critical section
once the interrupts are disabled. */
/* mutex_lock(mux); */ /* TODO should be only a spin lock */

/* increment nesting counter and save old interrupt level */
threads_arch_exts[my_pid].critical_nesting++;
Expand All @@ -157,8 +163,9 @@ void vTaskExitCritical( portMUX_TYPE *mux )
DEBUG("%s pid=%d prio=%d mux=%p\n", __func__,
my_pid, sched_threads[my_pid]->priority, mux);

/* release the mutex with interrupts disabled */
mutex_unlock(mux); /* TODO should be only a spin lock */
/* The given mutex is not used (see vTaskEnterCritical) and has not to
be unlocked here. */
/* mutex_unlock(mux); */ /* TODO should be only a spin lock */

/* decrement nesting counter and restore old interrupt level */
if (threads_arch_exts[my_pid].critical_nesting) {
Expand Down
11 changes: 7 additions & 4 deletions cpu/esp32/include/freertos/portmacro.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,24 +30,27 @@ extern "C" {
#define portMUX_TYPE mutex_t
#define portMUX_INITIALIZER_UNLOCKED MUTEX_INIT

#define portENTER_CRITICAL(pm) mutex_lock(pm)
#define portEXIT_CRITICAL(pm) mutex_unlock(pm)
#define portENTER_CRITICAL(mux) vTaskEnterCritical(mux)
#define portEXIT_CRITICAL(mux) vTaskExitCritical(mux)
#define portENTER_CRITICAL_NESTED irq_disable
#define portEXIT_CRITICAL_NESTED irq_restore

#define portENTER_CRITICAL_ISR(mux) vTaskEnterCritical(mux)
#define portEXIT_CRITICAL_ISR(mux) vTaskExitCritical(mux)

#define taskENTER_CRITICAL(mux) portENTER_CRITICAL(mux)
#define taskENTER_CRITICAL_ISR(mux) portENTER_CRITICAL_ISR(mux)
#define taskENTER_CRITICAL_ISR(mux) portENTER_CRITICAL_ISR(mux)
#define taskEXIT_CRITICAL(mux) portEXIT_CRITICAL(mux)
#define taskEXIT_CRITICAL_ISR(mux) portEXIT_CRITICAL_ISR(mux)
#define taskEXIT_CRITICAL_ISR(mux) portEXIT_CRITICAL_ISR(mux)

#define portYIELD_FROM_ISR thread_yield_higher
#define portNUM_PROCESSORS 2

#define xPortGetCoreID() PRO_CPU_NUM

extern void vTaskEnterCritical(portMUX_TYPE *mux);
extern void vTaskExitCritical(portMUX_TYPE *mux);

#ifdef __cplusplus
}
#endif
Expand Down