Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП МПУ-13.doc
Скачиваний:
7
Добавлен:
01.04.2025
Размер:
5.78 Mб
Скачать

2.2.Техническое задание и разработка алгоритма (блок-схемы)

Техническое задание (ТЗ) представляет собой набор требований к разрабатываемому устройству или программе. Как правило, ТЗ разрабатывает исполнитель работы и согласовывает его с заказчиком. Исходным материалом для составления ТЗ выступают потребности заказчика и опыт исполнителя.

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

Алгоритмизация – процесс разбиения задачи на элементарные операции. Сам процесс плохо формализуем, конечный результат во многом зависит от выбора средств…

При разработке программ на языке ассемблера широкое распространение получило представления алгоритма в виде блок-схем. Основные элементы «языка» блок-схем представлены на рис. 2.1:

  • блоки начала (входа) и конца (выхода) программы или подпрограммы;

  • блок элементарных действий (которому соответствует одна или несколько машинных команд не из группы передачи управления);

  • блок сложных действий или подпрограмма;

  • условный блок с одним входом и минимум двумя выходами, возле которых написаны альтернативные условия;

  • линии передачи управления между блоками, стрелки на которых можно опускать при движении вниз и вправо. Для блоков, расположенных последовательно сверху вниз прорисовка вертикальных связывающих линий не обязательна.

Рис. 2.1

2.3. Языки программирования и синтаксическая проверка проекта

Язык программирования Ассемблер

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

Хотя следующий текст этого раздела ориентирован на Ассемблер-1 для МК семейства AVR в среде AVR_Studio, общие принципы едины для всех разновидностей ассемблеров любых процессоров.

Запись программы выполняется построчно. Строка может содержать до 120 символов (буквы, цифры, знаки, пробелы). Строчные и прописные символы не различаются.

Строка может быть пустой. В строке выделяются четыре поля:

[Метка:] Команда/.Директива [Операнд/ы] [;Комментарий]

[Label:] Instruction/.Directive [Operands] [;Comment]

Слева находится поле для записи метки. Метка представляет собой последовательность из букв, цифр и некоторых знаков и начинается с буквы. Запись метки заканчивается знаком «:». Поле метки может быть пустым. Положение метки определяет исполнительный адрес для одноименного операнда-адреса в соответствующем поле.

Справа от поля метки находится поле для записи мнемокодов команд или директив ассемблера. Поле может быть пустым.

Следом за командой или директивой могут следовать операнды – данные или адрес. Команды бывают безоперандные, одно- и двухоперандные. Численные значения операндов для удобства восприятия заменяют символическими именами. Два операнда отделяются запятой, первый является приемником результата, второй – источником.

Далее находится поле для записи комментария. Запись комментария начинается со знака «;». Поле комментария может быть пустым.

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

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

Директивы ассемблера выполняют следующие функции:

• определяют тип сегмента (директивы .CSEG, .ESEG, .DSEG);

• распределяют память микроконтроллера (директивы .ORG, .DB, .DW, .BYTE);

• присваивают имена и значения символическим именам (директивы .DEF, .EQU, .SET);

• управляют процессом ассемблирования (директивы .DEVICE, .INCLUDE, .EXIT, .MACRO, .ENDMACRO);

• управляют формированием листинга (директивы .NOLIST, .LIST, .LISTMAC).

Краткое рассмотрение команд и директив находится в Приложениях 3 и 4, подробное можно найти в HelpAVR Studio.

Язык программирования С/С++

Семейство языков программирования С/С++ относится к текстовым языкам высокого уровня и широко применяется для программирования МК/МП для встроенных приложений. Эти языки относятся к языкам высокого уровня (ЯВУ), то есть формально один и тот же язык может использоваться для программирования МК/МП различных семейств. Для программирования конкретного семейства необходимо иметь соответствующий транслятор и знать особенности архитектуры семейства – адресацию конкретных областей памяти и регистров. Преимущества ЯВУ перед машинно-зависимым языком (ассемблером) – более высокая производительность труда программиста и гибкость в переносе алгоритмов с одного МК/МП на другой.

В реальности стандарты языков С/С++ не были ориентированы на особенности архитектуры МК/МП для встраиваемых применений, такие как разделение памяти на память программ и память данных, выделение регистров ввода/вывода, энергонезависимой памяти данных, наличие механизма прерываний. Поэтому разработчики трансляторов и систем программирования вынуждены были добавлять свои решения для поддержки этих механизмов. Эти решения не тождественны по синтаксису у различных разработчиков, что усложняет перенос алгоритмов с одного семейства МК/МП на другое.

Следует иметь в виду, что код, порождаемый транслятором ЯВУ всегда несколько проигрывает перед программой на ассемблере по времени выполнения и расходу памяти программ (при одинаково хорошем уровне программистов). Современные трансляторы ЯВУ имеют гибкую настройку оптимизации кода по времени выполнения или по объему кода, но использовать такую оптимизацию следует осторожно (возможна потеря некоторых действий, «лишних» с точки зрения транслятора). И все же эффективность трансляторов не является серьезным сдерживающим фактором, так как и объем памяти и производительность легко выбираются по параметрам конкретных МК/МП. Исключение составляет подгруппа цифровых сигнальных процессоров, для которых эффективность кода по быстродействию является одним из важнейших критериев, что заставляет использовать в ответственных частях алгоритмов вставки на ассемблере.

Ряд устаревших моделей МК AVR at90xxxx с малым числом выводов (от 6 до 8) не имеют ОЗУ, что делает невозможным использование языка С.

При разработке архитектуры МК семейства AVR-8 учитывались особенности реализации трансляторов с языка С, что обеспечивает высокую эффективность кода. К таким трансляторам относятся CodeVisionAVR, IAR, AVR_GCC и др.

CodeVisionAVR

Среда CodeVisionAVR (http://www/hpinfotech.com) предназначена для разработки программ для МК серии AVR на языке С и ориентирована прежде всего на начинающих программистов. Основные элементы среды:

- текстовый редактор, дружественный к синтаксису языка С (цветовое выделение, выделение и свертка выражений в скобках и пр.),

- транслятор с языка С в машинный код (форматы hex и др.) и в код, предназначенный для символьной отладки (cof) в среде AVR_Studio либо в среде моделирования Proteus VSM,

- генератор исходного текста CodeWizardAVR обеспечивает удобство по инициализации регистров ввода/вывода, реализации функций прерывания и функций программной реализации некоторых последовательных интерфейсов и пр.,

- внутрисистемный программатор (ISP или JTAG), поддерживающий процессы загрузки/выгрузки кодов программы и данных в кристалл МК с использованием различных аппаратных загрузчиков (параллельный через LPT, последовательные через COM, USB и пр.),

- встроенный Терминал служит для аппаратной отладки устройств, поддерживающих канал последовательной связи RS-232 (COM-port),

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

Перечень расширений языка С в среде CodeVisionAVR (аналогично и в трансляторах других фирм):

- описатели sfrb/sfrw обеспечивают доступ к регистрам ввода/вывода (РСФ), например (см. файлы описания <xxxx.h>):

sfrb PINA=0x19;  /* 8 bit access to the SFR */

sfrw TCNT1=0x2c; /* 16 bit access to the SFR */

- выражение, состоящее из имени РВВ, точки и номера бита обеспечивает доступ к прямо адресуемым битам РВВ по адресам 0…1Fh для sfrb и 0…1Eh для sfrw (бит – элемент структуры типа байт или слово), например:

- выражение PIND.0 эквивалентно PIND & (1<<0), то есть возвращает состояние указанного бита («0» или «1»);

- выражение PORTD.0 = 1 эквивалентно выражению PORTD |= (1<<0) – установка указанного бита в «1»;

- описатель типа переменной flash размещает указанную константу или массив констант в энергонезависимой памяти программ FlashROM:

- описатель типа переменной eeprom размещает указанную константу или массив констант в энергонезависимой памяти данных EEPROM;

- описатель типа переменной bit резервирует один бит в регистрах общего назначения R2…R14 – для глобальных и R15 – для локальных переменных;

- описатель функции interrupt [2] размещает указанную функцию по адресу вектора 2 и завершает ее тело командой выхода из подпрограммы прерываний, пример:

interrupt [2] void external_int0(void) {/* Place your code here */}

- директивы #asm и #endasm позволяют вставлять как отдельные команды, так и цепочки команд ассемблера в текст программы на языке С, например :

#asm("sei") /* enable interrupts */