Рукожопие продолжается!
Итак, еще сутки назад я обнаружил, что как-то странно себя ведет контроллер термодатчиков: в режиме конечного автомата, когда идет автоматическое измерение температуры, он постоянно считывает 0 с одного датчика (что интересно, если на шине 2 датчика, то с первого считывалось все нормально). Пришлось даже натыкать уйму диагностических сообщений, но на бешеной скорости автомата непонятно было, где же проблема. Вставил команду принудительного вызова процедуры sensors_process() и увидел на осциллограмме, что при отправлении команды "scan" сразу после ACK сигнал обрывается. Виной этому то, что я не дожидался окончания передачи, а сразу отключал мультиплексор. Поэтому добавил (все равно вызовы блокирующие) ожидание окончания и все стало хорошо.
Что интересно, обнаружил вообще необъяснимую лажу: как только я комментирую вызов sensors_process() здесь, то происходит полный бред! В main() проверка if(usartrx()) всегда возвращает 0, несмотря на то, что данные пришли и переменная была выставлена в 1! Такое впечатление, что глобальная переменная linerdy (которую, собственно, макрос usartrx() и возвращает) становится локальной для main()!!! Повозившись с этим с полчаса я плюнул, и решил лучше заняться более актуальными проблемами. А это списать на волю злых демонов ☺
Что интересно, обнаружил вообще необъяснимую лажу: как только я комментирую вызов sensors_process() здесь, то происходит полный бред! В main() проверка if(usartrx()) всегда возвращает 0, несмотря на то, что данные пришли и переменная была выставлена в 1! Такое впечатление, что глобальная переменная linerdy (которую, собственно, макрос usartrx() и возвращает) становится локальной для main()!!! Повозившись с этим с полчаса я плюнул, и решил лучше заняться более актуальными проблемами. А это списать на волю злых демонов ☺