Библиотека Ссылки Поиск по теме Индивидуальное задание На главную


Автореферат




Тема магистерской работы:
"Разработка и исследование мультиплатформенной системы оптимальной генерации кода для микроконтроллеров"
Руководитель: проф.Святный В.А.


Основной особенностью современного этапа развития микропроцессорных систем (МПС) является завершение перехода от систем, выполненных на основе нескольких больших ИС, к однокристальным микроконтроллерам (МК), которые объединяют в одном кристалле все основные элементы МПС: центральный процессор (ЦП), постоянное запоминающее устройство (ПЗУ), оперативное запоминающее устройство (ОЗУ), порты ввода/выводы, таймеры.

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

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

Таким образом, на долю специалистов вычислительной техники выпадает разработка автоматизированных сред проектирования ППО. В целом задача состоит в том, чтобы максимально облегчить разработку ППО, то есть обеспечить возможность разработчику не привязываться к конкретному типу микроконтроллера, его архитектуре, набору команд, устройству памяти, а дать возможность разработки эффективного алгоритма. Система в итоге должна сама обеспечить генерацию кода для выбранного уже исходя из цены и других соображений микроконтроллера. Поэтому на данном этапе развития микропроцессорной техники изучение принципов генерации оптимального кода для микроконтроллеров различных семейств и интеграция этих модулей в единую систему является очень актуальной задачей. Оптимизированный к конкретному типу микроконтроллера код может еще более повысить эффективность удачно разработанного алгоритма.

При выборе элементной базы для создания нового устройства разработчик рассматривает не только технические характеристики того или иного микроконтроллера, но также большое внимание уделяет средствам поддержки – как аппаратным, так и программным. В настоящее время AVR – микроконтроллеры фирмы Atmel завоевали достаточно широкую популярность. Таким образом, для данного семейства микроконтроллеров существует достаточно много средств поддержки. Среди них можно выделить следующие:

• AVR STUDIO: данная оболочка включает в себя текстовый редактор, менеджер проектов, отладчик. Менеджер проекта объединяет в проект группу файлов и обеспечивает интерфейс для подключения внешнего ассемблера/компилятора. Таким образом, есть возможность писать программу на выбранном языке и компилировать ее выбранным компилятором. Мощный текстовый редактор позволяет редактировать исходный код в окне ввода. Одной из важных характеристик AVR STUDIO является встроенная поддержка работы с внутрисхемным эмулятором. При запуске программы производится опрос COM – портов компьютера на предмет наличия подключенного эмулятора.

• Архитектура AVR – микроконтроллеров спроектирована под компиляторы с языков высокого уровня. В частности, большое к4оличество регистров общего назначения (РОНов) удобно для хранения «регистровых переменных при написании программ на языке С». Из известного многообразия С – компиляторов наиболее популярен компилятор фирмы IAR Systems. Продукты данной фирмы поддерживают до 20 типов микроконтроллеров разных фирм производителей. Девиз фирмы: «Различные архитектуры. Одно решение». Такой подход имеет неоднозначную оценку пользователей. С одной стороны, среда разработки облегчает переход от одного типа микроконтроллера к другому, с другой – усложняется настройка опций компиляции и оптимизации – приходится разбираться среди массы возможно не имеющих отношения к данному типу микроконтроллера ключей и настроек. Кроме того цена полнофункционального коммерческого программного продута от IAR Systems в зависимости от комплектации составляет от 2500 до 3600 долларов США, что затрудняет использование данного программного продукта разработчиками ППО.

• Необходимо отметить эмулятор Keil µVision, который поддерживает и разработку ППО для SISC – микроконтроллеров.

В данной работе разрабатывается среда с возможностью построения графической блок-схемы алгоритма с дальнейшей генерацией кода. Но найден аналог, имеющий возможность построения блок-схемы – это программный продукт Algoritm Builder for AVR, Copyright by Genndy Gromov. Данная среда обеспечивает полный цикл разработки, начиная от ввода алгоритма, включая отладку, и заканчивая внутрисхемным программированием кристалла. Графические технологии программы раскрывают возможности вводить программы на плоскости в виде алгоритма с древовидной структурой. В результате вся логическая структура программы становится наглядной. Основным назначением таких технологий является максимальное приведение интерфейса разработки к природе человеческого восприятия. Освоение такой среды намного проще, чем освоение классического ассемблера. Такой подход позволяет на порядок сократить разработку ППО.

В данной работе решаются следующие задачи:

• построение графического интерфейса для визуального построения граф-схем алгоритмов с использованием кроссплатформенной библиотеки QT;

• изучение архитектуры, набора команд SISC и RISC – микроконтроллеров;

• написание модулей генерации оптимального кода для микроконтроллеров различных архитектур.

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

Классификация и структура микроконтроллеров

В настоящее время выпускается целый ряд типов МК. Все эти приборы можно условно разделить на три основных класса:

• 8-разрядные МК для встраиваемых приложений;

• 16- и 32-разрядные МК;

• цифровые сигнальные процессоры (DSP).

Наиболее распространенным представителем семейства МК являются 8-разрядные приборы, широко используемые в промышленности, бытовой и компьютерной технике. Они прошли в своем развитии путь от простейших приборов с относительно слаборазвитой периферией до современных многофункциональных контроллеров, обеспечивающих реализацию сложных алгоритмов управления в реальном масштабе времени. Причиной жизнеспособности 8-разрядных МК является использование их для управления реальными объектами, где применяются, в основном, алгоритмы с преобладанием логических операций, скорость обработки которых практически не зависит от разрядности процессора.

Росту популярности 8-разрядных МК способствует постоянное расширение номенклатуры изделий, выпускаемых такими известными фирмами, как Motorola, Microchip, Intel, Zilog, Atmel и многими другими. Современные 8-разрядные МК обладают, как правило, рядом отличительных признаков. Перечислим основные из них:

• модульная организация, при которой на базе одного процессорного ядра (центрального процессора) проектируется ряд (линейка) МК, различающихся объемом и типом памяти программ, объемом памяти данных, набором периферийных модулей, частотой синхронизации;

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

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

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

При модульном принципе построения все МК одного семейства содержат процессорное ядро, одинаковое для всех МК данного семейства, и изменяемый функциональный блок, который отличает МК разных моделей. Структура модульного МК приведена на рис.1.

Рис.1. Модульная организация микроконтроллера.

Процессорное ядро включает в себя:

• центральный процессор;

• внутреннюю контроллерную магистраль (ВКМ) в составе шин адреса, данных и управления;

• схему синхронизации МК;

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

Изменяемый функциональный блок включает в себя модули памяти различного типа и объема, порты ввода/вывода, модули тактовых генераторов (Г), таймеры. В относительно простых МК модуль обработки прерываний входит в состав процессорного ядра. В более сложных МК он представляет собой отдельный модуль с развитыми возможностями. В состав изменяемого функционального блока могут входить и такие дополнительные модули как компараторы напряжения, аналого-цифровые преобразователи (АЦП) и другие. Каждый модуль проектируется для работы в составе МК с учетом протокола ВКМ. Данный подход позволяет создавать разнообразные по структуре МК в пределах одного семейства.

Процессорное ядро микроконтроллера

Структура процессорного ядра МК

Основными характеристиками, определяющими производительность процессорного ядра МК, являются:

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

• система команд процессора;

• способы адресации операндов в пространстве памяти;

• организация процессов выборки и исполнения команды.

С точки зрения системы команд и способов адресации операндов процессорное ядро современных 8-разрядных МК реализует один из двух принципов построения процессоров:

• процессоры с CISC-архитектурой, реализующие так называемую полную систему команд (Complicated Instruction Set Computer);

• процессоры с RISC-архитектурой, реализующие сокращенную систему команд (Reduced Instruction Set Computer).

CISC-процессоры выполняют большой набор команд с развитыми возможностями адресации, давая разработчику возможность выбрать наиболее подходящую команду для выполнения необходимой операции. В применении к 8-разрядным МК процессор с CISC-архитектурой может иметь однобайтовый, двухбайтовый и трехбайтовый (редко четырехбайтовый) формат команд. Время выполнения команды может составлять от 1 до 12 циклов. К МК с CISC-архитектурой относятся МК фирмы Intel с ядром MCS-51, которые поддерживаются в настоящее время целым рядом производителей, МК семейств НС05, НС08 и НС11 фирмы Motorola и ряд других.

В процессорах с RISC-архитектурой набор исполняемых команд сокращен до минимума. Для реализации более сложных операций приходится комбинировать команды. При этом все команды имеют формат фиксированной длины (например, 12, 14 или 16 бит), выборка команды из памяти и ее исполнение осуществляется за один цикл (такт) синхронизации. Система команд RISC-процессора предполагает возможность равноправного использования всех регистров процессора. Это обеспечивает дополнительную гибкость при выполнении ряда операций. К МК с RISC-процессором относятся МК AVR фирмы Atmel, МК PIC16 и PIC17 фирмы Microchip и другие.

На первый взгляд, МК с RISC-процессором должны иметь более высокую производительность по сравнению с CISC МК при одной и той же тактовой частоте внутренней магистрали. Однако на практике вопрос о производительности более сложен и неоднозначен.

С точки зрения организации процессов выборки и исполнения команды в современных 8-разрядных МК применяется одна из двух уже упоминавшихся архитектур МПС: фон-неймановская (принстонская) или гарвардская.

Основной особенностью фон-неймановской архитектуры является использование общей памяти для хранения программ и данных, как показано на рис.2.

Рис. 2. Структура МПС с фон-неймановской архитектурой.

Основное преимущество архитектуры Фон-Неймана – упрощение устройства МПС, так как реализуется обращение только к одной общей памяти. Кроме того, использование единой области памяти позволяло оперативно перераспределять ресурсы между областями программ и данных, что существенно повышало гибкость МПС с точки зрения разработчика программного обеспечения. Размещение стека в общей памяти облегчало доступ к его содержимому. Неслучайно поэтому фон-неймановская архитектура стала основной архитектурой универсальных компьютеров, включая персональные компьютеры.

Основной особенностью гарвардской архитектуры является использование раздельных адресных пространств для хранения команд и данных, как показано на рис.3.

Рис.3. Структура МПС с гарвардской архитектурой.

Гарвардская архитектура почти не использовалась до конца 70-х годов, пока производители МК не поняли, что она дает определенные преимущества разработчикам автономных систем управления.

Дело в том, что, судя по опыту использования МПС для управления различными объектами, для реализации большинства алгоритмов управления такие преимущества фон-неймановской архитектуры как гибкость и универсальность не имеют большого значения. Анализ реальных программ управления показал, что необходимый объем памяти данных МК, используемый для хранения промежуточных результатов, как правило, на порядок меньше требуемого объема памяти программ. В этих условиях использование единого адресного пространства приводило к увеличению формата команд за счет увеличения числа разрядов для адресации операндов. Применение отдельной небольшой по объему памяти данных способствовало сокращению длины команд и ускорению поиска информации в памяти данных.

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

Большинство производителей современных 8-разрядных МК используют гарвардскую архитектуру. Однако гарвардская архитектура является недостаточно гибкой для реализации некоторых программных процедур. Поэтому сравнение МК, выполненных по разным архитектурам, следует проводить применительно к конретному приложению.

Система команд процессора МК

Так же, как и в любой микропроцессорной системе, набор команд процессора МК включает в себя четыре основные группы команд:

• команды пересылки данных;

• арифметические команды;

• логические команды;

• команды переходов.

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

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

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

Схема синхронизации МК

Схема синхронизации МК обеспечивает формирование сигналов синхронизации, необходимых для выполнения командных циклов центрального процессора, а также обмена информацией по внутренней магистрали. В зависимости от исполнения центрального процессора командный цикл может включать в себя от одного до нескольких (4 — 6) тактов синхронизации. Схема синхронизации формирует также метки времени, необходимые для работы таймеров МК. В состав схемы синхронизации входят делители частоты, которые формируют необходимые последовательности синхросигналов.

Память программ и данных МК

В МК используется три основных вида памяти. Память программ представляет собой постоянную память (ПЗУ), предназначенную для хранения программного кода (команд) и констант. Ее содержимое в ходе выполнения программы не изменяется. Память данных предназначена для хранения переменных в процессе выполнения программы и представляет собой ОЗУ. Регистры МК — этот вид памяти включает в себя внутренние регистры процессора и регистры, которые служат для управления периферийными устройствами (регистры специальных функций).

Память программ

Основным свойством памяти программ является ее энергонезависимость, то есть возможность хранения программы при отсутствии питания.

Память данных

Память данных МК выполняется, как правило, на основе статического ОЗУ. Термин «статическое» означает, что содержимое ячеек ОЗУ сохраняется при снижении тактовой частоты МК до сколь угодно малых значений (с целью снижения энергопотребления). Большинство МК имеют такой параметр, как «напряжение хранения информации» — USTANDBY. При снижении напряжения питания ниже минимально допустимого уровня UDDMIN, но выше уровня USTANDBY работа программы МК выполняться не будет, но информация в ОЗУ сохраняется. При восстановлении напряжения питания можно будет сбросить МК и продолжить выполнение программы без потери данных. Уровень напряжения хранения составляет обычно около 1 В, что позволяет в случае необходимости перевести МК на питание от автономного источника (батареи) и сохранить в этом режиме данные ОЗУ.

Объем памяти данных МК, как правило, невелик и составляет обычно десятки и сотни байт. Это обстоятельство необходимо учитывать при разработке программ для МК. Так, при программировании МК константы, если возможно, не хранятся как переменные, а заносятся в ПЗУ программ. Максимально используются аппаратные возможности МК, в частности, таймеры. Прикладные программы должны ориентироваться на работу без использования больших массивов данных.

Регистры МК

Как и все МПС, МК имеют набор регистров, которые используются для управления его ресурсами. В число этих регистров входят обычно регистры процессора (аккумулятор, регистры состояния, индексные регистры), регистры управления (регистры управления прерываниями, таймером), регистры, обеспечивающие ввод/вывод данных (регистры данных портов, регистры управления параллельным, последовательным или аналоговым вводом/выводом). Обращение к этим регистрам может производиться по-разному.

В МК с RISC-процессором все регистры (часто и аккумулятор) располагаются по явно задаваемым адресам. Это обеспечивает более высокую гибкость при работе процессора.

Одним из важных вопросов является размещение регистров в адресном пространстве МК. В некоторых МК все регистры и память данных располагаются в одном адресном пространстве. Это означает, что память данных совмещена с регистрами. Такой подход называется «отображением ресурсов МК на память».

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

Стек МК

В микроконтроллерах ОЗУ данных используется также для организации вызова подпрограмм и обработки прерываний. При этих операциях содержимое программного счетчика и основных регистров (аккумулятор, регистр состояния и другие) сохраняется и затем восстанавливается при возврате к основной программе.

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

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

Необходимо помнить, что МК обеих архитектур имеют ограниченную емкость памяти для хранения данных. Если в процессоре имеется отдельный стек и объем записанных в него данных превышает его емкость, то происходит циклическое изменение содержимого указателя стека, и он начинает ссылаться на ранее заполненную ячейку стека. Это означает, что после слишком большого количества вызовов подпрограмм в стеке окажется неправильный адрес возврата. Если МК использует общую область памяти для размещения данных и стека, то существует опасность, что при переполнении стека произойдет запись в область данных либо будет сделана попытка записи загружаемых в стек данных в область ПЗУ.

Внешняя память

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

Если МК содержит специальные аппаратные средства для подключения внешней памяти, то эта операция производится штатным способом (как для МП).

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

Основы QT

В данной работе интерфейсная часть разрабатывается с использованием кроссплатформенной библиотеки QT. Qt — это межплатформенная библиотека для С++, более конкретно — библиотека классов, сами создатели именуют это как framework, то есть программная оболочка.

В терминологии Qt, все визуальные компоненты, из которых строится графический интерфейс, называются виджетами (widgets). Виджеты Qt имеют возможность посылать приложению сигналы, извещая его о том, что пользователь произвел какое-либо действие или о том, что виджет изменил свое состояние. Сигнал может быть "подключен" к функции-обработчику (такие функции-обработчики в Qt называются слотами). То есть основные механизмы QT – это сигналы (события) и слоты (реакции на события). Таким образом, когда виджет посылает сигнал, автоматически вызывается слот. Пример приложения на QT – окно с кнопкой Quit:


#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPushButton *button = new QPushButton("Quit", 0);
QObject::connect(button, SIGNAL(clicked()),&app, SLOT(quit()));
app.setMainWidget(button);
button->show();
return app.exec();
}

В данном примере сигнал clicked() от кнопки (QPushButton) подключен к слоту quit(), экземпляра класса QApplication. Вызовы SIGNAL() и SLOT() -- это макроопределения. Виджеты обычно располагают внутри областей выравнивания (layouts). В общем случае подход к формированию интерфейса в Qt очень прост для понимания и чрезвычайно гибок: программист выбирает необходимые ему виджеты, размещает их внутри областей выравнивания, которые в свою очередь принимают на себя обязанности по размещению виджетов, и настраивает свойства виджетов. На заключительном этапе устанавливаются взаимосвязи виджетов, через механизм сигналов и слотов, которые обусловливают поведение пользовательского интерфейса.

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

Рис.2. Анимация. Преобразование блок-схемы алгоритма в ассемблерный код микроконтроллера.

Идея работы состоит в том, чтобы разработать модули генерации кода для микроконтроллеров различных архитектур (SISC и RISC). Из-за их концептуального различия, скорее всего, придется разрабатывать не один, а разделенные модули генерации, но необходимо сделать попытку каким-то образом обобщить принципы формирования кода. Это будет основной исследовательской задачей.

Оптимизация по быстродействию для разных архитектур микроконтроллеров имеет различный смысл:

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

• Для RISC – архитектуры команды имеют одинаковый формат (длину), но их не так много, как предусмотрено в SISC – архитектуре, а выполняются команды быстрее. Поэтому сложные операции необходимо реализовывать как набор более простых команд. Поэтому для RISC – архитектуры, скорее всего, более актуальной при осуществлении оптимизации кода по быстродействию будет возможность реализации кусков кода с минимальным набором команд (то есть написание стандартных подпрограмм, реализующих часто встречающиеся куски алгоритмов).

Кроме того, в данной работе хотелось бы реализовать независимость пользователя от размерности регистров микроконтроллера, то есть если нам нужна 16-тиразрядная переменная, а окончательный выбор был остановлен на 8-разрядном микроконтроллере, то необходимо предоставить пользователю набор групп команд для осуществления операций с подобными переменными. Кроме того, актуальным остается вопрос о хранении переменных: в статической памяти, оперативной памяти, стеке в зависимости от их использования.

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

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

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

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

Литература

1. Андреев Д.В. "Программирование микроконтроллеров MCS-51", учебное пособие - Ульяновск, 2000г.

2. Основы микропроцессорной техники. – Статья.
Источник - http://www.intuit.ru

3. Королев Н., Королев Д. “AVR – микроконтроллеры: программные средства”
Источник - http://ims-ua.narod.ru/dokum/art_avr1.pdf

4. Help к программному продукту Algoritm Builder for AVR @ by Gennady Gromov.

5. Jasmin Blanchette, Mark Summerfield, перевод Андрея Киселёва “Разработка графического интерфейса с помощью библиотеки Qt3”.
Источник: оригинал книги http://phptr.com/content/images/0131240722/downloads/blanchette_book.pdf