BaN (27.08.2011 15:01, просмотров: 214) ответил BaN на В read() нет бесконечного цикла.
Нет, я был не прав. Регистры сохраняются. Каким-то образом пропустил вызов функции мимо глаз. Ошибка, похоже, аппаратная. До куда доходил контроллер в коде я ориентировался по зажиганию светодиода, но это было неправильно. Порт светодиода настраивается на вывод в самом начале, выводится 1. Он притянут к плюсу питания и зажигается выводом нуля. После первой же посылки команды к трансиверу, похоже, что-то происходит с питанием и содержимое регистра PORTC (и, возможно, некоторых других тоже) сбрасывается в 0, а содержимое DDRC остается неизменным и светодиод зажигается.
И программа спокойно продолжает выполняться. Но на цикле for, который я приводил выше, она зацикливается. Похоже, после каждого обращения к трансиверу происходит какой-то сбой и это влияет на проверку условия цикла/переменной цикла.
Хотя, все не так однозначно. Похоже все еще запутаннее, т.к. если поставить заглушку while(1); в любом месте после первого обращения к трансиверу и до конца этого цикла for, включая содержимое этого цикла, то светодиод загорится. А если поставить заглушку после этого цикла for или не ставить её вообще, то светодиод не будет гореть.
Хотя, светодиод может включаться на доли секунды, незаметные глазу, нет под рукой осциллографа, чтобы посмотреть, что происходит на светодиоде.
В общем, пойду разбираться с питанием схемы.