Внутри одной функции переход с одной позиции в другую может только через явные операторы goto, break continue или посредством других конструкций языка программирования если таковые есть или же перезагрузкой самого контроллера. Мне ваша логика непонятна - хотите ли вы совершать какие то действия после того как команда отправлена или не желаете ждать ответа от команды и проверять результат на правильность или на что то другое?
Для вашего случая (не знаю слово рецидив подходит или нет )) ) можно вот что предложить : - выделить одну переменную для значения результата - в самом начале main сохранить контекст setjmp() - все инициализации переменных и констант выделить в отдельную функцию и вызвать ее до сохранения сохранения контекста в main(), причем переменная результата тоже инитиализируется там . - в прерывании где обнаруживается ошибка - вызывается программа инициализации переменных - затем в том же прерывании присваивается значение результата - и в том же прерывании переходится на контекст сохраненый при загрузке . - в main() сразу после сохранения контекста ввести условие в соответствии с переменной результата
То есть вы програмным путем делаете контролируемую загрузку с контролем инициализации переменных, что позволяет вам определить был ли это reset или переход по ошибке. Конечно можно было просто перейти на вектор прерывания reset но будет неоднозначность значения переменной результата - на случай если состояние оперативной памяти на время загрузки неопределенно.
Но поверьте мне - овчинка не стоит выделки ...
--------------------
Зачем лаять на караван , когда на него можно плюнуть?
|