Merge branch 'bugfix/fixes_for_building_with_amazon_freertos' into 'master'
Fixes for building with amazon freertos See merge request idf/esp-idf!2523
This commit is contained in:
commit
4eda1b7a25
5 changed files with 20 additions and 8 deletions
|
@ -96,6 +96,7 @@ The driver of FIFOs works as below:
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "soc/dport_access.h"
|
#include "soc/dport_access.h"
|
||||||
#include "soc/dport_reg.h"
|
#include "soc/dport_reg.h"
|
||||||
|
#include "soc/io_mux_reg.h"
|
||||||
#include "freertos/semphr.h"
|
#include "freertos/semphr.h"
|
||||||
#include "xtensa/core-macros.h"
|
#include "xtensa/core-macros.h"
|
||||||
#include "driver/periph_ctrl.h"
|
#include "driver/periph_ctrl.h"
|
||||||
|
|
|
@ -5,3 +5,5 @@
|
||||||
COMPONENT_ADD_LDFLAGS += -Wl,--undefined=uxTopUsedPriority
|
COMPONENT_ADD_LDFLAGS += -Wl,--undefined=uxTopUsedPriority
|
||||||
COMPONENT_ADD_INCLUDEDIRS := include
|
COMPONENT_ADD_INCLUDEDIRS := include
|
||||||
COMPONENT_PRIV_INCLUDEDIRS := include/freertos
|
COMPONENT_PRIV_INCLUDEDIRS := include/freertos
|
||||||
|
|
||||||
|
tasks.o event_groups.o timers.o queue.o ringbuf.o: CFLAGS += -D_ESP_FREERTOS_INTERNAL
|
||||||
|
|
|
@ -233,7 +233,11 @@ typedef enum
|
||||||
*
|
*
|
||||||
* \ingroup SchedulerControl
|
* \ingroup SchedulerControl
|
||||||
*/
|
*/
|
||||||
|
#ifdef _ESP_FREERTOS_INTERNAL
|
||||||
#define taskENTER_CRITICAL(mux) portENTER_CRITICAL(mux)
|
#define taskENTER_CRITICAL(mux) portENTER_CRITICAL(mux)
|
||||||
|
#else
|
||||||
|
#define taskENTER_CRITICAL(mux) _Pragma("GCC warning \"'taskENTER_CRITICAL(mux)' is deprecated in ESP-IDF, consider using 'portENTER_CRITICAL(mux)'\"") portENTER_CRITICAL(mux)
|
||||||
|
#endif
|
||||||
#define taskENTER_CRITICAL_ISR(mux) portENTER_CRITICAL_ISR(mux)
|
#define taskENTER_CRITICAL_ISR(mux) portENTER_CRITICAL_ISR(mux)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -247,7 +251,11 @@ typedef enum
|
||||||
*
|
*
|
||||||
* \ingroup SchedulerControl
|
* \ingroup SchedulerControl
|
||||||
*/
|
*/
|
||||||
|
#ifdef _ESP_FREERTOS_INTERNAL
|
||||||
#define taskEXIT_CRITICAL(mux) portEXIT_CRITICAL(mux)
|
#define taskEXIT_CRITICAL(mux) portEXIT_CRITICAL(mux)
|
||||||
|
#else
|
||||||
|
#define taskEXIT_CRITICAL(mux) _Pragma("GCC warning \"'taskEXIT_CRITICAL(mux)' is deprecated in ESP-IDF, consider using 'portEXIT_CRITICAL(mux)'\"") portEXIT_CRITICAL(mux)
|
||||||
|
#endif
|
||||||
#define taskEXIT_CRITICAL_ISR(mux) portEXIT_CRITICAL_ISR(mux)
|
#define taskEXIT_CRITICAL_ISR(mux) portEXIT_CRITICAL_ISR(mux)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "freertos/xtensa_api.h"
|
#include "freertos/xtensa_api.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
#include "limits.h"
|
||||||
|
|
||||||
#if defined( CONFIG_ESP32_TIME_SYSCALL_USE_RTC ) || defined( CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1 )
|
#if defined( CONFIG_ESP32_TIME_SYSCALL_USE_RTC ) || defined( CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1 )
|
||||||
#define WITH_RTC 1
|
#define WITH_RTC 1
|
||||||
|
|
|
@ -335,28 +335,28 @@ static esp_err_t uart_start_select(int nfds, fd_set *readfds, fd_set *writefds,
|
||||||
|
|
||||||
const int max_fds = MIN(nfds, UART_NUM);
|
const int max_fds = MIN(nfds, UART_NUM);
|
||||||
|
|
||||||
taskENTER_CRITICAL(uart_get_selectlock());
|
portENTER_CRITICAL(uart_get_selectlock());
|
||||||
|
|
||||||
if (_readfds || _writefds || _errorfds || _readfds_orig || _writefds_orig || _errorfds_orig || _signal_sem) {
|
if (_readfds || _writefds || _errorfds || _readfds_orig || _writefds_orig || _errorfds_orig || _signal_sem) {
|
||||||
taskEXIT_CRITICAL(uart_get_selectlock());
|
portEXIT_CRITICAL(uart_get_selectlock());
|
||||||
uart_end_select();
|
uart_end_select();
|
||||||
return ESP_ERR_INVALID_STATE;
|
return ESP_ERR_INVALID_STATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((_readfds_orig = malloc(sizeof(fd_set))) == NULL) {
|
if ((_readfds_orig = malloc(sizeof(fd_set))) == NULL) {
|
||||||
taskEXIT_CRITICAL(uart_get_selectlock());
|
portEXIT_CRITICAL(uart_get_selectlock());
|
||||||
uart_end_select();
|
uart_end_select();
|
||||||
return ESP_ERR_NO_MEM;
|
return ESP_ERR_NO_MEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((_writefds_orig = malloc(sizeof(fd_set))) == NULL) {
|
if ((_writefds_orig = malloc(sizeof(fd_set))) == NULL) {
|
||||||
taskEXIT_CRITICAL(uart_get_selectlock());
|
portEXIT_CRITICAL(uart_get_selectlock());
|
||||||
uart_end_select();
|
uart_end_select();
|
||||||
return ESP_ERR_NO_MEM;
|
return ESP_ERR_NO_MEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((_errorfds_orig = malloc(sizeof(fd_set))) == NULL) {
|
if ((_errorfds_orig = malloc(sizeof(fd_set))) == NULL) {
|
||||||
taskEXIT_CRITICAL(uart_get_selectlock());
|
portEXIT_CRITICAL(uart_get_selectlock());
|
||||||
uart_end_select();
|
uart_end_select();
|
||||||
return ESP_ERR_NO_MEM;
|
return ESP_ERR_NO_MEM;
|
||||||
}
|
}
|
||||||
|
@ -382,7 +382,7 @@ static esp_err_t uart_start_select(int nfds, fd_set *readfds, fd_set *writefds,
|
||||||
FD_ZERO(writefds);
|
FD_ZERO(writefds);
|
||||||
FD_ZERO(exceptfds);
|
FD_ZERO(exceptfds);
|
||||||
|
|
||||||
taskEXIT_CRITICAL(uart_get_selectlock());
|
portEXIT_CRITICAL(uart_get_selectlock());
|
||||||
// s_one_select_lock is not released on successfull exit - will be
|
// s_one_select_lock is not released on successfull exit - will be
|
||||||
// released in uart_end_select()
|
// released in uart_end_select()
|
||||||
|
|
||||||
|
@ -391,7 +391,7 @@ static esp_err_t uart_start_select(int nfds, fd_set *readfds, fd_set *writefds,
|
||||||
|
|
||||||
static void uart_end_select()
|
static void uart_end_select()
|
||||||
{
|
{
|
||||||
taskENTER_CRITICAL(uart_get_selectlock());
|
portENTER_CRITICAL(uart_get_selectlock());
|
||||||
for (int i = 0; i < UART_NUM; ++i) {
|
for (int i = 0; i < UART_NUM; ++i) {
|
||||||
uart_set_select_notif_callback(i, NULL);
|
uart_set_select_notif_callback(i, NULL);
|
||||||
}
|
}
|
||||||
|
@ -416,7 +416,7 @@ static void uart_end_select()
|
||||||
free(_errorfds_orig);
|
free(_errorfds_orig);
|
||||||
_errorfds_orig = NULL;
|
_errorfds_orig = NULL;
|
||||||
}
|
}
|
||||||
taskEXIT_CRITICAL(uart_get_selectlock());
|
portEXIT_CRITICAL(uart_get_selectlock());
|
||||||
_lock_release(&s_one_select_lock);
|
_lock_release(&s_one_select_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue