fix(freertos): Corrected xPortCanYield() for esp32p4

This commit updates the xPortCanYield() for esp32p4 by correcting the
return condition. Previously, the API would return true if an ISR of
priority 1 was received which is incorrect.
This commit is contained in:
Sudeep Mohanty 2023-08-31 17:45:17 +08:00
parent e0f5d3c527
commit d9a3e3bb86

View File

@ -641,6 +641,12 @@ FORCE_INLINE_ATTR bool xPortCanYield(void)
uint32_t threshold = REG_READ(INTERRUPT_CORE0_CPU_INT_THRESH_REG); uint32_t threshold = REG_READ(INTERRUPT_CORE0_CPU_INT_THRESH_REG);
#if SOC_INT_CLIC_SUPPORTED #if SOC_INT_CLIC_SUPPORTED
threshold = threshold >> (CLIC_CPU_INT_THRESH_S + (8 - NLBITS)); threshold = threshold >> (CLIC_CPU_INT_THRESH_S + (8 - NLBITS));
/* When CLIC is supported, the lowest interrupt threshold level is 0.
* Therefore, an interrupt threshold level above 0 would mean that we
* are either in a critical section or in an ISR.
*/
return (threshold == 0);
#endif /* SOC_INT_CLIC_SUPPORTED */ #endif /* SOC_INT_CLIC_SUPPORTED */
/* when enter critical code, FreeRTOS will mask threshold to RVHAL_EXCM_LEVEL /* when enter critical code, FreeRTOS will mask threshold to RVHAL_EXCM_LEVEL
* and exit critical code, will recover threshold value (1). so threshold <= 1 * and exit critical code, will recover threshold value (1). so threshold <= 1