Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
22 Часть I. Общие принципы устройства и функционирования Atmel AVR глобальных и локальных переменных в ОЗУ и от явного использования стека, операции с которым усложняют и загромождают программу. П ОДРОБНОСТИ В ранних архитектурах обращение к памяти занимало много процессорного времени, потому в целях ускорения выполнения арифметических операций их стали произво- дить в специально выделенных регистрах (регистрах общего назначения, РОН), к ко- торым часто добавлялся специальный регистр-аккумулятор. В AVR от единого акку- мулятора отказались в пользу большого количества равноправных РОН, что облегча- ет создание программ непосредственно в инструкциях процессора (на ассемблере), но усложняет и запутывает задачу компилятора с языков высокого уровня. Наконец, в архитектуре STM (и 8-ми и 32-битовых) опять отказались от концепции РОН в пользу единственного аккумулятора — все операции АЛУ производит непосредственно с пе- ременными в оперативной памяти, — но на этот раз они выполняются за один такт. Иными словами, в архитектуре STM вы можете насоздавать сколько угодно аналогов регистров общего назначения — ограничивает только объем памяти. Платой за это в STM8 служит, во-первых, весьма запутанная система распределения памяти, за чем приходится внимательно следить (помните первую компьютерную аксиому: «Заклады- вая что-то в память компьютера, помните, куда вы это положили»?), во-вторых, неко- торая неопределенность с временем выполнения команд перехода из-за наличия трехуровневого конвейера. Зато и по части совместимости с языком С — никаких про- блем. Большое количество разнообразных команд (инструкций), номенклатура кото- рых (примерно от 90 до 130, в зависимости от модели контроллера) для AVR больше, чем в других RISC-семействах. Противоречия с концепцией RISC тут нет, поскольку значительная часть этих инструкций — псевдонимы, и введены они исключительно для удобства программирования. Так что изучать все инст- рукции сразу не потребуется. Flash-память программ (10 000 циклов стирание/запись) — с возможностью внутрисистемного перепрограммирования, т. е. загрузки программ прямо в го- товой схеме (In System Programming, ISP). ISP не следует путать с программиро- ванием через последовательный (Serial) порт с помощью отдельной программы- загрузчика (Bootloader), как это делается в Arduino (подобно об этом рассказано в главах 5 и 6 ). Отдельная область энергонезависимой памяти (EEPROM, 100 000 циклов стирание/запись) — для хранения данных с возможностью записи программным путем или внешней загрузки через ISP, подобно программам (см. главу 10 ). Встроенные устройства для обработки аналоговых сигналов : аналоговый компаратор и многоканальный 10-разрядный АЦП (см. главу 11 ). Сторожевой таймер , позволяющий осуществлять автоматическую перезагрузку контроллера через определенные промежутки времени (например, для выхода из «спящего» режима — см. главу 14 ). Последовательные интерфейсы SPI , TWI ( I 2 C ) и UART ( USART ), позволяю- щие осуществлять обмен данными с большинством стандартных датчиков и других внешних устройств аппаратными средствами (см. главы 12 , 13 и 15 ).
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==