mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2024-12-25 14:22:27 +03:00
ffa3996a5e
* clang-format: AllowShortEnumsOnASingleLine: false * clang-format: InsertNewlineAtEOF: true * clang-format: Standard: c++20 * clang-format: AlignConsecutiveBitFields * clang-format: AlignConsecutiveMacros * clang-format: RemoveParentheses: ReturnStatement * clang-format: RemoveSemicolon: true * Restored RemoveParentheses: Leave, retained general changes for it * formatting: fixed logging TAGs * Formatting update for dev Co-authored-by: あく <alleteam@gmail.com>
33 lines
725 B
C
33 lines
725 B
C
#include "common_defines.h"
|
|
|
|
#include <FreeRTOS.h>
|
|
#include <task.h>
|
|
|
|
__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();
|
|
} 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();
|
|
} else {
|
|
__enable_irq();
|
|
}
|
|
}
|