eddy_em: (Default)
eddy_em ([personal profile] eddy_em) wrote2018-06-09 03:19 pm

Рукожопие продолжается!

Итак, еще сутки назад я обнаружил, что как-то странно себя ведет контроллер термодатчиков: в режиме конечного автомата, когда идет автоматическое измерение температуры, он постоянно считывает 0 с одного датчика (что интересно, если на шине 2 датчика, то с первого считывалось все нормально). Пришлось даже натыкать уйму диагностических сообщений, но на бешеной скорости автомата непонятно было, где же проблема. Вставил команду принудительного вызова процедуры sensors_process() и увидел на осциллограмме, что при отправлении команды "scan" сразу после ACK сигнал обрывается. Виной этому то, что я не дожидался окончания передачи, а сразу отключал мультиплексор. Поэтому добавил (все равно вызовы блокирующие) ожидание окончания и все стало хорошо.

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

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org