mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
1b041083ab
Using a mutex for critical section handling with portENTER_CRITICAL and portEXIT_CRITICAL does not work for RIOT, 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.
60 lines
1.6 KiB
C
60 lines
1.6 KiB
C
/*
|
|
* Copyright (C) 2018 Gunar Schorcht
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU Lesser
|
|
* General Public License v2.1. See the file LICENSE in the top level
|
|
* directory for more details.
|
|
*
|
|
* FreeRTOS to RIOT-OS adaption module for source code compatibility
|
|
*/
|
|
|
|
#ifndef FREERTOS_PORTMACRO_H
|
|
#define FREERTOS_PORTMACRO_H
|
|
|
|
#ifndef DOXYGEN
|
|
|
|
#include "stdint.h"
|
|
|
|
#include "mutex.h"
|
|
#include "irq.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define portBASE_TYPE int32_t
|
|
#define portUBASE_TYPE uint32_t
|
|
|
|
#define portMAX_DELAY 0xFFFFFFFF
|
|
|
|
#define portMUX_TYPE mutex_t
|
|
#define portMUX_INITIALIZER_UNLOCKED MUTEX_INIT
|
|
|
|
#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 taskEXIT_CRITICAL(mux) portEXIT_CRITICAL(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
|
|
|
|
#endif /* DOXYGEN */
|
|
#endif /* FREERTOS_PORTMACRO_H */
|