mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-04-18 17:35:05 +00:00
* app loading wip * various improvements irq/isr stuff is now working lvgl locking where needed hello world now uses proper mutex for app unlocking etc? * various improvements * cmsis_esp improvements * implement interrupts
35 lines
850 B
C
35 lines
850 B
C
#include "critical.h"
|
|
#include "furi_core_defines.h"
|
|
|
|
#include <freertos/FreeRTOS.h>
|
|
#include <freertos/task.h>
|
|
|
|
static portMUX_TYPE prv_critical_mutex;
|
|
|
|
__FuriCriticalInfo __furi_critical_enter(void) {
|
|
__FuriCriticalInfo info;
|
|
|
|
info.isrm = 0;
|
|
info.from_isr = FURI_IS_ISR();
|
|
info.kernel_running = (xTaskGetSchedulerState() == taskSCHEDULER_RUNNING);
|
|
|
|
if (info.from_isr) {
|
|
info.isrm = taskENTER_CRITICAL_FROM_ISR();
|
|
} else if (info.kernel_running) {
|
|
taskENTER_CRITICAL(&prv_critical_mutex);
|
|
} else {
|
|
__disable_irq();
|
|
}
|
|
|
|
return info;
|
|
}
|
|
|
|
void __furi_critical_exit(__FuriCriticalInfo info) {
|
|
if (info.from_isr) {
|
|
taskEXIT_CRITICAL_FROM_ISR(info.isrm);
|
|
} else if (info.kernel_running) {
|
|
taskEXIT_CRITICAL(&prv_critical_mutex);
|
|
} else {
|
|
__enable_irq();
|
|
}
|
|
} |