void PendSV( char req ) { char tmp=0; //ETS_INTR_LOCK(); if( NMIIrqIsOn == 0 ) { vPortEnterCritical(); //PortDisableInt_NoNest(); tmp = 1; } if(req ==1) { SWReq = 1; } else if(req ==2) HdlMacSig= 1; #if 0 GPIO_REG_WRITE(GPIO_STATUS_W1TS_ADDRESS, 0x40); #else if(PendSvIsPosted == 0) { PendSvIsPosted = 1; xthal_set_intset(1<<ETS_SOFT_INUM); } #endif if(tmp == 1) vPortExitCritical(); }
void PendSV( char req ) { char tmp=0; if(ClosedLv1Isr == 0) { vPortEnterCritical(); tmp = 1; } if(req ==1) { SWReq = 1; } else HdlMacSig= 1; #if 0 GPIO_REG_WRITE(GPIO_STATUS_W1TS_ADDRESS, 0x40); #else if(PendSvIsPosted == 0) { PendSvIsPosted = 1; xthal_set_intset(1<<ETS_SOFT_INUM); } #endif if(tmp == 1) vPortExitCritical(); }
/* PendSV is called in place of vPortYield() to request a supervisor call. The portYIELD macro calls pendSV if it's a software request. The libpp and libudhcp libraries also call this function, assuming always with arg==2 (but maybe sometimes with arg==1?) In the original esp_iot_rtos_sdk implementation, arg was a char. Using an enum is ABI-compatible, though. */ void IRAM PendSV(enum SVC_ReqType req) { vPortEnterCritical(); if(req == SVC_Software) { pending_soft_sv = 1; } else if(req == SVC_MACLayer) pending_maclayer_sv= 1; xthal_set_intset(BIT(INUM_SOFT)); vPortExitCritical(); }