Вы понимаете что такое директива? Вот:
__monitor void foo(void){
....
}
__monitor - это директива. Видя это, среда разработки (у меня IAR) при сборке проекта при входе в функцию выключит прерывания, на выходе их снова включит. ПРИ ЧЕМ ТУТ МАКРОСЫ К АТОМАРНОСТИ?
P.S. Вас что из темы по stm32 прогнали за неграмотность?
.




