Распродажа

Электронные компоненты со склада по низким ценам, подробнее >>>

Журнал Радио

2004: 
1, 2, 3, 4, 5, 6, 7, 8
2003: 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
2002: 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
2000: 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
1999: 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
1998: 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
1971: 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
1947: 
1, 2, 3, 4, 5
1946: 
1, 2, 3, 4-5, 6-7, 8-9

Новости электроники

В 14 раз выросло количество россиян на MediaTek Labs ? проекте по созданию устройств "интернета вещей" и "носимых гаджетов"

Сравнив статистику посещения сайта за два месяца (ноябрь и декабрь 2014 года), в MediaTek выяснили, что число посетителей ресурса из России увеличилось в 10 раз, а из Украины ? в 12. Таким образом, доля русскоговорящих разработчиков с аккаунтами на labs.mediatek.com превысила одну десятую от общего количества зарегистрированных на MediaTek Labs пользователей.

Новое поколение Джобсов или как MediaTek создал свой маленький "Кикстартер"

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

Семинар и тренинг "ФеST-TIваль инноваций: MAXIMум решений!" (14-15.10.2013, Новосибирск)

Компания Компэл, приглашает вас принять участие в семинаре и тренинге ?ФеST-TIваль инноваций: MAXIMум решений!?, который пройдет 14 и 15 октября в Новосибирске.

Мне нравится

Комментарии

дима пишет в теме Параметры биполярных транзисторов серии КТ827:

люди куплю транзистар кт 827А 0688759652

тамара плохова пишет в теме Журнал Радио 9 номер 1971 год. :

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

Ивашка пишет в теме Параметры отечественных излучающих диодов ИК диапазона:

Светодиод - это диод который излучает свет. А если диод имеет ИК излучение, то это ИК диод, а не "ИК светодиод" и "Светодиод инфракрасный", как указано на сайте.

Владимир пишет в теме 2Т963А-2 (RUS) со склада в Москве. Транзистор биполярный отечественный:

Подскажите 2т963а-2 гарантийный срок

Владимир II пишет... пишет в теме Параметры биполярных транзисторов серии КТ372:

Спасибо!

Журнал Радио 3 номер 2000 год. МИКРОПРОЦЕССОРНАЯ ТЕХНИКА

МИКРОКОНТРОЛЛЕРЫ ДЛЯ НАЧИНАЮЩИХ. И НЕ ТОЛЬКО... кросс средства для мк

В. КРАСНОВ, г. Москва 

Продолжение. Начало см. в "Радио", 2000, ╧ 2

Разработка программы — один из наиболее важных этапов в создании устройства на базе МК. Без нее он "мертв", не реагирует на внешние воздействия и не выдает управляющих сигналов.

При включении питания МК немедленно начинает исполнять программу, находящуюся в подключенной к нему памяти программ (обычно это ПЗУ). Ее выполнение начинается с некоторого фиксированного адреса, чаще всего нулевого. Адрес — это просто номер ячейки ПЗУ Процесс осуществляется следующим образом: МК считывает число, хранящееся в памяти программ, и в зависимости от его значения, называемого машинным кодом, выполняет определенные действия над содержимым регистров АЛУ. памяти, портов и т. д. Например, прочитав из памяти программ число 32Н. МК "соображает", что нужно считать значение из входного порта номер 2 и поместить его в регистр-аккумулятор. Часто одного байта для описания действия не хватает, и тогда МК считывает из пампяти дополнительные байты.

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

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

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

Первым шагом в облегчении процесса создания программ была компьютерная программа — так называемый транслятор с языка ассемблера. Идея состояла в том, чтобы выражать выполняемые МК действия на более понятном человеку языке и затем преобразовывать эти выражения в машинные коды. В приведенном выше примере машинной инструкции, которая считывает значение порта 2 и помещает его в аккумулятор, выполняемые действия можно условно обозначить как MOV A.P2.

Здесь слово MOV (от англ. move), называемое мнемоникой инструкции, обозначает пересылку значения, а А и Р2, именуемые операндами, указывают, откуда взять значение и куда его поместить. Система подобных обозначений называется языком ассемблера. Программа, написанная на нем. обрабатывается транслятором, который преобразует конструкции языка ассемблера в машинные коды.

Программирование на ассемблере широко распространено по сей день. Трансляторы с языка ассемблера для всех популярных семейств микроконтроллеров бесплатны.

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

С появлением трансляторов разработка программ для МК резко упростилась. Если, например, нужно сложить в программе два числа, то теперь достаточно просто написать а = b + с. а транслятор преобразует это выражение в необходимую последовательность машинных команд в зависимости от типов переменных a, b и с.

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

Рассмотрим процесс создания программы для МК на языке Си. В процессе разработки потребуется персональный компьютер.

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

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

Описанный процесс выглядит довольно громоздким: разработчик должен вручную запускать разнообразные программы (текстовый редактор, компилятор Си, линкеру помнить управляющие ключи, искать ошибки в программе по номерам строк в файле. Последним на сегодняшний день шагом в облегчении труда разработчика программ для МК стало появление интегрированных сред разработки (Integrated Development Environment. IDE). Интегрированная среда разработки — это компьютерная программа, связывающая воедино все этапы разработки программы. Она совмещает в себе текстовый редактор для написания исходных текстов, трансляторы с ассемблера и Си, линкер, отладчик, справочную информацию по МК и другие средства, необходимые разработчику. Настройка трансляторов, линкера и других компонентов производится не методом указания ключей в командной строке, а в виде диалоговых окон, где нужно только расставить "галочки" в нужных местах. Преобразование исходных текстов программ в файл машинных кодов запускается одной клавишей.

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

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

Основные характеристики наиболее популярных пакетов средств разработки приведены в таблице.


Показать в полный размер

СИМВОЛЬНАЯ ОТЛАДКА ПРОГРАММ ДЛЯ МК

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

Другие используют в своей практике самодельные отладочные мониторы — наборы специальных подпрограмм, загружаемых в МК вместе с основной программой. Последняя вызывает в контрольных точках подпрограммы монитора, а те выдают информацию о состоянии ресурсов МК. Таким способом можно отладить практически любую программу, но у него есть недостатки, которые могут оказаться существенными. Во-первых, отладочному монитору необходимо предоставить для работы часть ресурсов МК: как минимум — часть адресного пространства кода и некоторое число ячеек стека, а как максимум — еще и часть ОЗУ и периферийные устройства МК. используемые монитором для отображения информации. Выделить ресурсы отладочному монитору бывает непросто, если основная программа сама активно загружает МК. Например, у МК PIC 16С5х (Microchip) всего две ячейки стека, и использовать вызовы подпрограмм отладочного монитора затруднительно. Во-вторых, вызовы монитора отнимают время у основной программы и, следовательно, его нельзя вызывать из критичных ко времени частей программы. В-третьих, создание отладочного монитора, само по себе, требует времени.

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

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

Каковы же преимущества программирования на Си по сравнению с программированием на ассемблере? Вкратце они заключаются в следующем:

— отпадает необходимость заботиться об операциях с числами большой разрядности. Компилятор автоматически сгенерирует правильный код для операции а+Ь. если а и b будут 8-, 16-, 32-битными числами, числами с плавающей запятой и даже числами разных типов;
— в комплекте с компилятором поставляется обширная библиотека функций (подпрограмм), реализующих различные математические операции (тригонометрические функции, возведение в степень и т. п.). работу с символьными строками, форматированный ввод/вывод и т. д.;
— многие ошибки программиста диагностируются компилятором: он, например, не позволит передать функции неверное число параметров или параметры неверных типов, забыть поставить оператор возврата и т. п.;
— исходный текст, написанный на Си, гораздо легче читается, он компактнее, легче модифицируется;
— программы, написанные на Си. легче переносятся на МК других семейств.
Чтобы эффективно отлаживать программы, написанные на языке высокого уровня, разработчик должен иметь в своем распоряжении отладочные средства, предоставляющие адекватные возможности по отображению используемых в программе данных, а также по отслеживанию выполнения программы по ее исходному тексту. Для обеспечения таких возможностей необходимы два условия:
— компилятор должен предоставлять достаточную информацию о структуре программы и используемых ею данных. Эту информацию называют символьной (отладочной);
— отладчик должен уметь интерпретировать эту информацию. Все современные компиляторы и ассемблеры в том или ином виде генерируют символьную информацию, но в настоящее время еще не разработано универсального формата, и каждый компилятор генерирует ее в собственном формате. Это создает дополнительные трудности для отладчиков, которые должны уметь "понимать" несколько символьных форматов.

Теперь рассмотрим, как отладчик должен интерпретировать символьную информацию и какие возможности должны в связи с этим предоставляться пользователю.

ОТСЛЕЖИВАНИЕ ВЫПОЛНЕНИЯ ПРОГРАММЫ ПО ЕЕ ИСХОДНОМУ ТЕКСТУ

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

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

ОТОБРАЖЕНИЕ ДАННЫХ, ИСПОЛЬЗУЕМЫХ В ОТЛАЖИВАЕМОЙ ПРОГРАММЕ

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

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

ДАННЫЕ В АССЕМБЛЕРНЫХ ПРОГРАММАХ

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

— имя объекта:
— адрес объекта в памяти;
— адресное пространство МК, в котором располагается объект. Многие МК имеют более одной области данных. Например, в МК семейства MCS-51 есть внутренняя память данных, внешняя память данных и битовое пространство;
— разрядность объекта, т. е. занимаемое им число байт. 16-битные МК, такие как представители семейства MCS-96, "умеют" оперировать 8-. 16-. 32-битными данными. Здесь необходимо отметить один существенный момент. Для разработчика важно, какой логический размер имеет объект. Например, восьмиразрядные МК семейства PIC (Microchip) оперируют только байтами. Если же необходимо иметь в программе, например, 16-битный счетчик, то манипулировать каждым байтом приходится в отдельности. Но программисту при отладке хотелось бы видеть не каждый байт счетчика в отдельности, а оба байта сразу, в виде 16-битной переменной. Популярные кросс-ассемблеры такой возможности не предоставляют. Исключение — кросс-ассемблер PASM-PIC фирмы "Фитон", который позволяет объявлять в программе данные размером байт, слово, двойное слово, а также массивы таких объектов. При отладке программ, написанных с помощью PASM-PIC. все объекты отображаются в виде, соответствующем их логическому размеру и структуре;
— область видимости объекта. Если программа состоит из нескольких модулей, у программиста есть возможность локализовать область видимости имени в пределах одного модуля. Таким образом, в разных модулях могут существовать объекты с одинаковыми именами, но разными остальными атрибутами. Отладчик должен "разбираться", когда какой объект активен, и правильно отображать его. Заметим, однако, что практика использования одинаковых имен в разных модулях часто приводит к путанице и ошибкам. В случае, если объект объявлен глобальным (PUBLIC) и виден во всех модулях, трудностей с интерпретацией не возникает.

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

ДАННЫЕ В ПРОГРАММАХ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ

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

СТРУКТУРА ОБЪЕКТОВ

Помимо простых переменных разной разрядности, в программах на Си используются также переменные с плавающей запятой, структуры (struct), объединения или союзы (union), указатели, одномерные и многомерные массивы. Последние могут состоять как из простых объектов, так и из сложных (структур, союзов, указателей).

Использование сложных объектов в программах, безусловно, удобно. Однако ввиду сложности их структуры крайне желательно иметь возможность ее адекватного отображения на этапе отладки. В отладчиках фирмы "Фитон" сложные объекты могут отображаться как в сжатом (список значений элементов), так и в развернутом виде с указанием адреса, значения и типа каждого элемента массива и/или члена структуры. Реализация указателей в разных компиляторах различна. То, что МК обычно имеет несколько адресных пространств, создает дополнительные трудности, так как при работе с указателем должно быть известно, помимо адреса, и адресное пространство, куда указывает указатель. В некоторых реализациях идентификатор адресного пространства является составной частью значения указателя, в других компилятор заранее "знает" это и генерирует соответствующий код.

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

СПОСОБЫ РАЗМЕЩЕНИЯ ОБЪЕКТОВ В ПАМЯТИ

Помимо статических объектов, адреса которых не изменяются за время выполнения программы, в программе, написанной на языке высокого уровня, могут существовать так называемые автоматические объекты, память под которые временно отводится в стеке МК. Адреса таких объектов не абсолютны, а определяются динамически на этапе выполнения программы. Обычно они отсчитываются от текущего значения некоторой статической переменной, называемой указателем фрейма стека (Base Pointer или BP). Так как значение BP формируется программой динамически на этапе выполнения, значения автоматических объектов доступны только в пределах их области видимости, т. е. при правильном значении BP. Отладчик при отображении значений автоматических объектов должен "знать" способ, которым определяются адреса, а также отслеживать правильность значения BP

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

ОБЛАСТЬ ВИДИМОСТИ ОБЪЕКТА

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

Переменная с именем "а" существует все время, пока выполняется функция f, но в зависимости от того, какая часть функции выполняется, имя "а" обозначает разные переменные. При трассировке функции f отладчик должен в зависимости от того, какая переменная активна, правильно показывать ее значение.

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

(Продолжение следует)

Вернуться к содержанию журнала "Радио" 3 номер 2000 год







Ваш комментарий к статье
Журнал Радио 3 номер 2000 год. МИКРОПРОЦЕССОРНАЯ ТЕХНИКА :
Ваше имя:
Отзыв: Разрешено использование тэгов:
<b>жирный текст</b>
<i>курсив</i>
<a href="http://site.ru"> ссылка</a>