По Вопросу Заказа Оператора

Жизнь настолько коротка, что времени едва хватает на то, чтобы совершить необходимое количество ошибок, а повторять их – непозволительная роскошь.

В этом посте мы поговорим о том, как не повторять чужих ошибок, что также является пустой тратой такого ценного ресурса, как время.

И вроде бы ошибка не так фатальна и есть масса примеров, где она исключена и ее можно было бы давно научиться избегать, но почему-то с упорством, достойным лучшего использования, она возникает снова и снова в исходники программ для МК (может и для больших систем тоже, но я ими не занимаюсь), причем авторы этих программ не совсем новички во встроенном программировании, но тем не менее мы видим то, что видим.

Я искренне надеюсь, что после того, как вы прочитали этот пост (при попытке ввести комбинацию «после прочтения» в строго определенном месте текста Word To Go вылетел 6 раз - впервые за 2 года использования, так что я смирился и написал немного другому - это вопрос об ошибках, хотя вряд ли такое поведение связано именно с тем, о котором я пишу, иначе было бы особенно пикантно).

Вы навсегда поймете недопустимость столь ошибочной конструкции и не наступите именно на эти грабли, ведь вокруг так много других валяется в ожидании своей очереди.

Сформулируем задачу – нам необходимо взаимодействовать с каким-то ресурсом (аппаратным, но не будем ограничиваться), который в силу внутренних особенностей не всегда готов к работе (для завершения текущей операции требуется время, но мы опять же будем предпочитают расширенную формулировку).

Для определения готовности ресурса существует определенная процедура проверки состояния и фактическое взаимодействие должно осуществляться при достижении определенного значения этого состояния.

Если переходить к языку конкретики, то в попавшемся на глаза примере был рассмотрен процесс передачи данных через SPI интерфейс на ATMEL МК (ну в общем опять про Ардуино, вы не дальше читать не надо).

Итак, задача состоит в том, чтобы организовать такое взаимодействие с учетом вышеперечисленных особенностей; нам нужно будет проверить готовность и инициализировать операцию и вопрос в каком порядке их применять.

Так как у нас всего две сущности, их можно расположить только двумя способами – первая спереди или вторая.

В переводе на язык конкретной задачи, вопрос заключается в том, нужно ли проверять готовность устройства перед передачей, ожидая, пока она произойдет, или можно сначала осуществить передачу, а потом дождаться ее завершения.

Давайте посмотрим на код, вот первый (неисправный) вариант, взятый из рассматриваемой реализации:

   

static inline void writeSPI(const byte b) {

Теги: #микроконтроллеры #avr микроконтроллеры #программирование микроконтроллеров
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.