Цитата(rudy_b @ May 22 2013, 11:28)

А чтобы после reseta понять что именно случилось - можно записать что-то в память или во флешь. А в начале программы (от reset) поставить анализ этого со стиранием в исходное состояние.
Как раз
Xenia это и предлагала:
Цитата
char semafor = false;
main()
{
if( semafor)
{
// определенные экстренные действия
}
for(;;)
{
// бесконечный цикл
}
}
В прерывании же при обнаружении экстренного случая взводится светофор (semafor = true) и программа запускается с нулевого адреса (setjmp 0).
P.S. Кажись с пронеслась я со своей идеей, т.к. при инициализации semafor тоже почистится. Впрочем, в качестве семафора можно взять какой-нибудь аппаратный регистр.
Цитата(Сергей Борщ @ May 21 2013, 10:45)

Было же грамотное решение - функция с атрибутом noreturn. И вызывать ее как функцию, без всяких указателей и т.д. Компилятору этого noreturn по идее должно быть достаточно, чтобы не сохранять лишние регистры в каждом прерывании.
Тогда в этом случае я должен буду сам позаботится о сохранении используемых регистров, а как я догадаюсь, какие регистры вздумает задействовать компилятор ?
Цитата(Сергей Борщ @ May 21 2013, 10:45)

Решение с goto из одной функции в другую ущербное каким бы хаком оно бы ни было реализовано. longjump() еще куда ни шло - он поддержан компилятором.
В чем именно ущербность
goto ?
Сообщение отредактировал MaxiMuz - May 25 2013, 08:07