Жизнь настолько коротка, что времени едва хватает на то, чтобы совершить необходимое количество ошибок, а повторять их – непозволительная роскошь.Теги: #микроконтроллеры #avr микроконтроллеры #программирование микроконтроллеровВ этом посте мы поговорим о том, как не повторять чужих ошибок, что также является пустой тратой такого ценного ресурса, как время.
И вроде бы ошибка не так фатальна и есть масса примеров, где она исключена и ее можно было бы давно научиться избегать, но почему-то с упорством, достойным лучшего использования, она возникает снова и снова в исходники программ для МК (может и для больших систем тоже, но я ими не занимаюсь), причем авторы этих программ не совсем новички во встроенном программировании, но тем не менее мы видим то, что видим.
Я искренне надеюсь, что после того, как вы прочитали этот пост (при попытке ввести комбинацию «после прочтения» в строго определенном месте текста Word To Go вылетел 6 раз - впервые за 2 года использования, так что я смирился и написал немного другому - это вопрос об ошибках, хотя вряд ли такое поведение связано именно с тем, о котором я пишу, иначе было бы особенно пикантно).
Вы навсегда поймете недопустимость столь ошибочной конструкции и не наступите именно на эти грабли, ведь вокруг так много других валяется в ожидании своей очереди.
Сформулируем задачу – нам необходимо взаимодействовать с каким-то ресурсом (аппаратным, но не будем ограничиваться), который в силу внутренних особенностей не всегда готов к работе (для завершения текущей операции требуется время, но мы опять же будем предпочитают расширенную формулировку).
Для определения готовности ресурса существует определенная процедура проверки состояния и фактическое взаимодействие должно осуществляться при достижении определенного значения этого состояния.
Если переходить к языку конкретики, то в попавшемся на глаза примере был рассмотрен процесс передачи данных через SPI интерфейс на ATMEL МК (ну в общем опять про Ардуино, вы не дальше читать не надо).
Итак, задача состоит в том, чтобы организовать такое взаимодействие с учетом вышеперечисленных особенностей; нам нужно будет проверить готовность и инициализировать операцию и вопрос в каком порядке их применять.
Так как у нас всего две сущности, их можно расположить только двумя способами – первая спереди или вторая.
В переводе на язык конкретной задачи, вопрос заключается в том, нужно ли проверять готовность устройства перед передачей, ожидая, пока она произойдет, или можно сначала осуществить передачу, а потом дождаться ее завершения.
Давайте посмотрим на код, вот первый (неисправный) вариант, взятый из рассматриваемой реализации:
static inline void writeSPI(const byte b) {
-
Все Светодиодные Лампы Икеа
19 Oct, 24 -
Почему Lte Не 4G?
19 Oct, 24 -
Российского Робота Сделали На Базе «Газели»
19 Oct, 24 -
Максимальное Исключающее Или
19 Oct, 24 -
Немного О Яндекс Защита
19 Oct, 24