сохраняет какието данные в устройство(допустим выводит на консоль текстовые данные в небольшом размере(порядка десятков байт))
нужно:
1) чтобы эта функция могла работать в критических по времени выполнения местах наприер в обработчике прерываний
2) была возможность создать другую похожую функцию, но которая может работать из потоков с более низким приоритетом, и допустим код этой второй функции немного более вермязатратный, допустим она еще чтото с данными делает, например к ним таймстемп лепит
как это лучше реализовать с точки зрения применения блокировок?
А подробности можно?) А то вижу двух сферических коней в вакууме, а упряжки для них пока не вижу)
ну примерно так и есть) только теория
тогда, чисто теоретически, в одном случае - просто сохраняйте на устройство, во втором - лепите к данным таймстэмп и в критической секции сохраняйте на устройство=)
а оно не залочится когда допустим низкоприоритетный поток войдет в критическую секцию и будет вытеснен кодом прерывания который тоже захочет воспользоваться блокировкой?
А это как напишете=) Вот тут уже надо курить IPC вообще и таргета - в частности=)
Идеальное решение- ничего не делать в обработчике прерываний кроме schedule задачи на выполнение чего-то. Смотреть про top half и bottom half : https://stackoverflow.com/questions/45095735/top-halves-and-bottom-halves-concept-clarification#:~:text=The%20so%2Dcalled%20top%20half,later%2C%20at%20a%20safer%20time.
Контекста задачи нет в принципе: мож это МК и там подход с top half и bottom half неприменим? Да и сама концепция не говорит о том, что в прерывании не надо ничего делать, просто обработчик прерывания не должен выполняться дольше очень условных n микросекунд, если верить ldd.
Она применима только в случае некритичных ко времени выполнения частей алгоритма
Есть подходы типа в прерыания демаес флаги и в майн лупе обрататываем
Обсуждают сегодня