Цитата
ИМХО, это не от "камня" зависит
Если смущает модификатор __raw (а это единственная вещь в приведенном коде, характерная для IAR'а, хотя, имеющая аналог, например, в GCC) - так он только для того, чтобы уменьшить время нахождения в состоянии с запрещенными прерываниями. Без него тоже все стреляет. А основную работу тут делают
библиотечные функции setjmp/longjmp.
Объясняю, почему "камень класса AVR" - потому что нет режима супервизора. На ARM, например, метод тоже имеет право на существование, но либо в виде принудительного переключения на другой поток (типа yield()), либо с отдельным костылем (возможно на асме, возможно intrinsic-функцией компилятора, если таковая существует) для сохранения и восстановления User Mode SP в процедуре IRQ.
Аналогичный код с принудительным переключением прекрасно работает на x86 (однако, например MSVC слишком умный, он по longjmp уничтожает все объекты, созданные в стеке, посему работу с setjmp/longjmp надо выносить в отдельный файл, который собирать в режиме C, а не C++).
PS Доктор, Вы теперь в каждой теме считаете нужным отписаться, а вдруг флуд поднимется?
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин