Цитата(Александр1 @ Nov 1 2017, 13:49)
При возникновении прерывания проверяете состояние порта: при 1-выполняется одна задача, при 0-другая.
Это то понятно, у меня вопрос был в другом как выйти из цикла по этому прерыванию и вернуться в начало этого цикла обратно.
Поясню:
Возникло прерывание на порту стало 1, на это у меня прописана функция мигать светодиодом. При этом программа выполняла какую то другую задачу из моих трёх основных циклов. Возникло повторное прерывание, я проверил, что стало 0, и мне надо вернуться именно в тот цикл (причем в начало), откуда я вышел.
Мне это видится так:
в функции
interrupt [PC_INT2] void pin_change_isr2(void)
я пишу, цикл в котором мигаю светодиодом, пока на этой ноге 1.
Как только там стало 0, я выхожу из цикла и прописываю условия перехода обратно в ранее исполняемые циклы:
начинаю сравнивать значения переменных которые меняются в двух первых циклах.
Если предположим первая переменная не приняла значение 1, то я ставлю на этот цикл метку М1: , и отправляюсь туда операцией goto M1.
Если значения переменных во втором цикле 0, то ставлю туда метку М2:, и отправлюсь туда goto M2.
Если значения переменных обоих циклов приняли значения 1, то значил в момент прерывания выполнялся третий цикл, и я отправляюсь туда goto M3.
правильное ли такое рассуждение?
Попробовав написать такой код, понял, что с goto такое не прокатит, эта операция не может выполняться из одной функции в другую.