ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1460450 Топик полностью
il-2 (01.09.2024 07:27, просмотров: 162) ответил klen на riscv32imAc: попробывал использовать атомарные инструкции для реализации спинлока ради изучения - интересно и почти понятно :) вроде работает. может кому будет интересно.
Спасибо, интересно. Кстати, по поводу запретов прерываний в критических секциях и фатальных последствий от этого. Эта проблема на самом деле решаема на программном уровне, но приходится конечно поработать пальчиками :-) 

Про аппаратное решение проблемы - у ARM CM3 и выше имеется регистр BASEPRI, который позволяет "отсечь" прерывания, которые не будут запрещаться. Конечно, в таких прерываниях нельзя использовать функции RTOS, но проблему фатальных последствий получается избежать. У меня есть такой проект, где в RTOS (TN-Kernel) используется BASEPRI.

У WCH RISC-V (у серии CH57x/58x/59x - может и у других) есть регистр PFIC_ITHRESDR. Который вроде бы делает то-же что и BASEPRI. Но надо проверять - описание очень убогое, непонятно написано.

А по поводу программного решения проблемы - надо просто функции RTOS по запрету/разрешению прерываний переписать под свой конкретный проект, и там реализовать выборочный запрет.