Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
1 62 Часть 11. Программирование микроконтроллеров АVR на ассемблере задачности» Windows 3.х, доставляло немало неприятностей в «компромиссных» Windows 9х, и даже в настоящих многозадачных ОС, по крайней мере, заставит об рывать работу программы принудительно. Потому в таких задачах программисты «на уровне подкорки» приучены применять средства, позволяющие выйти из тако го цикла альтернативными методами: по таймеру или какими-то пользовательски ми действиями (нажатием клавиши <Esc> или кнопки Cancel). Вся очередь задач в Windows, по сути, есть одно из таких решений, встроенное в систему изначально и направленное на то, чтобы не позволить компьютеру зациклиться в ожидании какого-то события . В программировании для МК подход иной. И в фирменных «аппнотах», и в приме рах в тексте технических описаний контроллеров вы запросто можете встретить бесконечный цикл ожидания очистки какого-нибудь бита, и в теории, если этот бит никогда не очистится, МК так и «повиснет» . ПК-программист от такой ситуации пришел бы в ужас, и в Arduino, в основном как раз программистами и создавав шемся, такой подход тоже не афишируется. Конечно, есть средства вывести кон троллер из этого состояния - наиболее кардинальным является использование сторожевого таймера, который в конце концов перезапустит систему. Более гра мотно было бы заставить контроллер ожидать не самой по себе очистки бита, а свя занного с этим прерывания (что позволит выполнять остальные функции без за держек), но далеко не всегда это возможно - например, запись байта во встроен ную EEPROM заставляет МК «висеть» несколько миллисекунд, пока этот процесс не закончится, но соответствующее прерывание в ряде моделей просто отсутствует, а если даже имеется, то задействовать на практике его неудобно из-за значительно го усложнения логики построения программы. Однако если вдуматься, стоит задать себе вопрос : а так ли это страшно в случае контроллеров? Если по ходу дела требуется записать что-то в EEPROM, а она ока зывается неисправной, то, очевидно, функциональность системы и так окажется нарушенной, и тут уже выходом из «зависания» делу не поможешь. В критичных случаях, разумеется, системы оснащают резервированием с возможностью автома тического переключения между запасными модулями, но для обычных бытовых устройств принятие подобных мер только безосновательно удорожает изделие. Но если вы будете бояться подобных ситуаций, то это только хорошо: понимание, что вы делаете что-то не совсем так, как «надо бы», еще никому не мешало. Зато с ассемблером вы имеете все преимущества, о которых уже упоминалось: прежде всего это полное владение всеми системами контроллера с точным расче том того, что происходит, когда, по каким причинам и чем закончится. Даже «чис тый» С, как уже упоминалось, не может дать гарантии того, сколько именно про длится та или иная процедура и сколько времени займет ее вызов. В Arduino, ис пользующем теневые прерывания и Bootloader, эта неопределенность намного больше, что в значительной степени обесценивает, например, режимы энергосбе режения . И кроме этого есть еще много всяких задач, где необходима лаконичность кода и точный расчет, которые без ассемблера провести было бы затруднительно.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==