mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-21 10:26:06 +03:00
never yield within an ISR
This commit is contained in:
parent
d815c36753
commit
0b2fb8d3ee
@ -88,7 +88,8 @@ extern "C" void __yield() {
|
||||
extern "C" void yield(void) __attribute__ ((weak, alias("__yield")));
|
||||
|
||||
extern "C" void optimistic_yield() {
|
||||
if (system_get_time() - g_micros_at_last_task_yield > OPTIMISTIC_YIELD_TIME_US)
|
||||
if (!ETS_INTR_WITHINISR() &&
|
||||
(system_get_time() - g_micros_at_last_task_yield) > OPTIMISTIC_YIELD_TIME_US)
|
||||
{
|
||||
__yield();
|
||||
}
|
||||
|
@ -61,6 +61,14 @@ typedef void (*int_handler_t)(void*);
|
||||
#define ETS_INTR_DISABLE(inum) \
|
||||
ets_isr_mask((1<<inum))
|
||||
|
||||
inline bool ETS_INTR_WITHINISR()
|
||||
{
|
||||
uint32_t ps;
|
||||
__asm__ __volatile__("rsr %0,ps":"=a" (ps));
|
||||
// PS.EXCM and PS.UM bit checks
|
||||
return ((ps & ((1 << 4) | (1 << 5))) > 0);
|
||||
}
|
||||
|
||||
inline uint32_t ETS_INTR_ENABLED(void)
|
||||
{
|
||||
uint32_t enabled;
|
||||
|
Loading…
x
Reference in New Issue
Block a user