mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-05-21 00:56:38 +08:00
Merge branch 'feature/speed_up_freertos_interrupt_active_event' into 'master'
feat(freertos): speed up CPU hardware interrupt active event See merge request sdk/ESP8266_RTOS_SDK!1305
This commit is contained in:
@ -43,7 +43,6 @@ static const char *I2S_TAG = "i2s";
|
||||
return (ret_val); \
|
||||
}
|
||||
|
||||
#define portYIELD_FROM_ISR() taskYIELD()
|
||||
#define dma_intr_enable() _xt_isr_unmask(1 << ETS_SLC_INUM)
|
||||
#define dma_intr_disable() _xt_isr_mask(1 << ETS_SLC_INUM)
|
||||
#define dma_intr_register(a, b) _xt_isr_attach(ETS_SLC_INUM, (a), (b))
|
||||
|
@ -41,8 +41,6 @@
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define portYIELD_FROM_ISR() taskYIELD()
|
||||
|
||||
#ifndef CONFIG_ESP8266_HSPI_HIGH_THROUGHPUT
|
||||
#define ENTER_CRITICAL_HIGH_THROUGHPUT() ENTER_CRITICAL()
|
||||
#define EXIT_CRITICAL_HIGH_THROUGHPUT() EXIT_CRITICAL()
|
||||
|
@ -35,8 +35,6 @@
|
||||
#include "driver/uart.h"
|
||||
#include "driver/uart_select.h"
|
||||
|
||||
#define portYIELD_FROM_ISR() taskYIELD()
|
||||
|
||||
#define UART_ENTER_CRITICAL() portENTER_CRITICAL()
|
||||
#define UART_EXIT_CRITICAL() portEXIT_CRITICAL()
|
||||
|
||||
|
@ -111,6 +111,7 @@ extern void vTaskSwitchContext( void ); \
|
||||
} \
|
||||
}
|
||||
|
||||
void portYIELD_FROM_ISR(void);
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
extern unsigned cpu_sr;
|
||||
|
@ -53,7 +53,6 @@
|
||||
#define PORT_ASSERT(x) do { if (!(x)) {ets_printf("%s %u\n", "rtos_port", __LINE__); while(1){}; }} while (0)
|
||||
|
||||
extern uint8_t NMIIrqIsOn;
|
||||
static int SWReq = 0;
|
||||
|
||||
uint32_t cpu_sr;
|
||||
|
||||
@ -68,9 +67,15 @@ uint64_t g_esp_os_ticks;
|
||||
uint64_t g_esp_os_us;
|
||||
uint64_t g_esp_os_cpu_clk;
|
||||
|
||||
static uint32_t s_switch_ctx_flag;
|
||||
|
||||
void vPortEnterCritical(void);
|
||||
void vPortExitCritical(void);
|
||||
|
||||
void IRAM_ATTR portYIELD_FROM_ISR(void)
|
||||
{
|
||||
s_switch_ctx_flag = 1;
|
||||
}
|
||||
|
||||
uint8_t *__cpu_init_stk(uint8_t *stack_top, void (*_entry)(void *), void *param, void (*_exit)(void))
|
||||
{
|
||||
@ -112,7 +117,7 @@ void IRAM_ATTR PendSV(int req)
|
||||
{
|
||||
if (req == 1) {
|
||||
vPortEnterCritical();
|
||||
SWReq = 1;
|
||||
s_switch_ctx_flag = 1;
|
||||
xthal_set_intset(1 << ETS_SOFT_INUM);
|
||||
vPortExitCritical();
|
||||
} else if (req == 2) {
|
||||
@ -120,13 +125,12 @@ void IRAM_ATTR PendSV(int req)
|
||||
}
|
||||
}
|
||||
|
||||
void TASK_SW_ATTR SoftIsrHdl(void* arg)
|
||||
void IRAM_ATTR SoftIsrHdl(void* arg)
|
||||
{
|
||||
extern int MacIsrSigPostDefHdl(void);
|
||||
|
||||
if (MacIsrSigPostDefHdl() || (SWReq == 1)) {
|
||||
vTaskSwitchContext();
|
||||
SWReq = 0;
|
||||
if (MacIsrSigPostDefHdl()) {
|
||||
portYIELD_FROM_ISR();
|
||||
}
|
||||
}
|
||||
|
||||
@ -165,7 +169,7 @@ void IRAM_ATTR xPortSysTickHandle(void *p)
|
||||
g_esp_os_ticks++;
|
||||
|
||||
if (xTaskIncrementTick() != pdFALSE) {
|
||||
vTaskSwitchContext();
|
||||
portYIELD_FROM_ISR();
|
||||
}
|
||||
}
|
||||
|
||||
@ -259,7 +263,7 @@ void IRAM_ATTR vPortExitCritical(void)
|
||||
void show_critical_info(void)
|
||||
{
|
||||
ets_printf("ShowCritical:%u\n", uxCriticalNesting);
|
||||
ets_printf("SWReq:%u\n", SWReq);
|
||||
ets_printf("s_switch_ctx_flag:%u\n", s_switch_ctx_flag);
|
||||
}
|
||||
|
||||
#ifdef ESP_DPORT_CLOSE_NMI
|
||||
@ -345,6 +349,11 @@ void IRAM_ATTR _xt_isr_handler(void)
|
||||
mask &= ~bit;
|
||||
}
|
||||
} while (soc_get_int_mask());
|
||||
|
||||
if (s_switch_ctx_flag) {
|
||||
vTaskSwitchContext();
|
||||
s_switch_ctx_flag = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int xPortInIsrContext(void)
|
||||
|
@ -20,8 +20,6 @@
|
||||
#include "semphr.h"
|
||||
#include "task.h"
|
||||
|
||||
#define portYIELD_FROM_ISR portYIELD
|
||||
|
||||
/* Initialize the given lock by allocating a new mutex semaphore
|
||||
as the _lock_t value.
|
||||
|
||||
|
Reference in New Issue
Block a user