Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
готовый вариант1_булева алгебра_Can_Sat device....doc
Скачиваний:
6
Добавлен:
02.12.2018
Размер:
314.37 Кб
Скачать

Инновационный образовательный проект

«CanSat в России»

научно методические материалы

(сопровождающие материалы)

к российскому конструктору

CanSat

Булева алгебра

1. булева алгебра

2. основы цифровой электроники (триггеры, регистры, логические элементы, простые АЛУ, машинный цикл, такт), азы цифровой электроники, логические "0", "1", частота работы логич. автомата

3. обзор микроконтроллеров-процессоров в смысле функционала

4. обзор языков программирования: ассемблер, бейсики, ... си-си, компиляторы

5. среда программирования

1 Булева Алгебра. Двоичная система исчисления

Система счисления, которой все мы приучены– десятеричная.  Мы считаем так:

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18… и т.д.

Однако кроме десятеричной системы счисления существуют и другие… что такое – «десятеричная», «двоичная» и т.п.? Название системы счисления (с.с.) говорит нам, какое у нее основание.

Основание – это количество значений, которое может принять один разряд числа в данной с.с. Иными словами, сколько чисел можно записать с помощью одного знака.

Для десятеричной с.с. – основание = 10 (от 0 до 9, итого – 10 значений). В двоичной с.с – основание = 2 (0 или 1, итого – 2 значения).

В десятеричной системе, после исчерпания значений при текущей разрядности, добавляется один старший разряд. После 9 идет 10, после 99 – 100 и т.д.

В

Десятеричная

Двоичная

0

0

1

1

2

10

3

11

4

100

5

101

6

110

7

111

8

1000

9

1001

10

1010

двоичной с.с. – то же самое. Вот как мы будем считать до 10 в двоичной с.с.:

0 это 0, 1 это1. Все, значения 1-разрядных чисел исчерпаны. Добавляем слева новый разряд: Опять исчерпались значения. Пишем еще разряд: И так далее…

О Булевой алгебре

Начинаем освоение околоцифрового пространства.

Все, что мы с вами видим, слышим, чувствуем – это аналоговые величины. В комнате может быть яркое освещение, может быть просто светло, может быть мрачно или вообще темно. Звук может быть очень громкий, может быть просто громкий, или вовсе негромкий, или совсем даже тихий. На улице может быть невыносимо жарко. Или просто жарко. Или тепло. Или холодно.

Короче говоря, аналоговая величина может принять какое угодно значение. Может быть 25 градусов, может – 25.4 , может 10,3; -5,2; +17,47…  Количество значений, которое может принять аналоговая величина – бесконечно.

Любая цифровая величина может принимать только два значения. «Истинно» или «ложно». Иначе говоря – «1» или «0». В этом принципиальное отличие цифры от аналога.

Что же можно записать с помощью одной цифровой переменной (их еще называют Булевы переменные)?

например: ответ на однозначный вопрос – да/нет, время суток – день/ночь, знак температуры за окном - +/-, пол – м/ж, и т.п.

Хорошо. А что же такое – цифровой звук, цифровое видео и пр.? Ответ такой- это аналоговый сигнал, представленный с помощью некоторого количества цифровых переменных.

Для начала попробуем «оцифровать» время суток. То есть, присвоить каждому времени суток свою уникальную комбинацию переменных. У нас этих переменных четыре: утро, день, вечер, ночь. Для начала поделим эти 4 значения по какому-то признаку на 2 группы, чтоб записать при помощи одной цифровой переменной.

Допустим:  утро, день – «светлое время» (0) вечер, ночь – «темное время» (1)

Теперь надо каждую группу разбить еще на две части. Пусть утро и вечер будут «первой частью» (0) соответственно светлого и темного времени. День и ночь будут «второй частью» (1).

Теперь опишем каждое время суток при помощи введенных нами терминов. Итак: УТРО – светлое время (0), первая часть (0); ДЕНЬ – светлое время (0), вторая часть (1); ВЕЧЕР – темное время (1), первая часть (0); НОЧЬ – темное время (1), вторая часть (1).

Таким образом, мы получили для каждого времени суток свой единственный и неповторимый набор признаков: Утро = 00 День = 01 Вечер = 10 Ночь = 11.

То есть, мы описали четыре состояния с помощью двух цифровых переменных. Иначе говоря, с помощью двух бит.

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

2. Основы цифровой электроники.

Абсолютно все цифровые микросхемы состоят из одних и тех же логических элементов – «кирпичиков» любого цифрового узла.

Логический элемент – это схема, у которой несколько входов и один выход. Каждому состоянию сигналов на входах, соответствует определенный сигнал на выходе.

Итак, какие бывают элементы? 

Элемент «И» (AND)

Иначе его называют «конъюнктор».

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

Вот так выглядит элемент «И» и его таблица истинности:

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

Смотрим таблицу истинности, и проясняем принцип. Понять его не сложно: единица на выходе элемента «И» возникает только тогда, когда на оба входа поданы единицы. Это объясняет название элемента: единицы должны быть И на одном, И на другом входе.

Если посмотреть иначе, то можно сказать так: на выходе элемента «И» будет ноль в том случае, если хотя бы на один из его входов подан ноль.

Элемент «ИЛИ» (OR)

По другому, его называют «дизъюнктор».

На выходе возникает единица, когда на один ИЛИ на другой ИЛИ на оба сразу входа подана единица. Этот элемент можно назвать также элементом «И» для негативной логики: ноль на его выходе бывает только в том случае, если и на один и на второй вход поданы нули.

Элемент «НЕ» (NOT)

Чаще, его называют «инвертор».

Следующие два элемента получаются путем установки инвертора на выход элементов «И» и «ИЛИ».

Элемент «И-НЕ» (NAND)

Элемент И-НЕ работает точно так же как «И», только выходной сигнал полностью противоположен. Там где у элемента «И» на выходе должен быть «0», у элемента «И-НЕ» - единица. И наоборот. Э то легко понять по эквивалентной схеме элемента:

Элемент «ИЛИ-НЕ» (NOR)

То же – элемент «ИЛИ» с инвертором на выходе.

Следующий устроен несколько хитрее: 

Элемент «Исключающее ИЛИ» (XOR)

Он вот такой:

Операция, которую он выполняет, часто называют «сложение по модулю 2». На самом деле, на этих элементах строятся цифровые сумматоры.

Смотрим таблицу истинности. Когда на выходе единицы?- когда на входах разные сигналы. На одном – 1, на другом – 0.

Эквивалентная схема такая:

Это и есть основные логические элементы. На их основе строятся абсолютно любые цифровые микросхемы.

Арифме́тико-логи́ческое устро́йство (АЛУ) (англ. arithmetic and logic unit, ALU) — блок процессора, который под управлением устройства управления (УУ) служит для выполнения арифметических и логических преобразований.

История

Разработчик компьютера ENIAC, Джон фон Нейман, был первым создателем АЛУ. В 1945 году он опубликовал первые научные работы по новому компьютеру, названному англ. Electronic Discrete Variable Computer (EDVAC). Годом позже он работал со своими коллегами над разработкой компьютера для Принстонского института новейших исследований (IAS). Архитектура этого компьютера позже стала прототипом архитектур большинства последующих компьютеров. В своих работах фон Нейман указывал устройства, которые, как он считал, должны присутствовать в компьютерах. Среди этих устройств присутствовало и АЛУ. Фон Нейман отмечал, что АЛУ необходимо для компьютера, поскольку оно гарантирует, что компьютер будет способен выполнять базовые математические операции включая сложение, вычитание, умножение и деление.

Организация и принципы действия

Арифметико-логическое устройство в зависимости от выполнения функций можно разделить на две части:

- микропрограммное устройство (устройство управления), задающее последовательность микрокоманд (команд);

- операционное устройство (АЛУ), в котором реализуется заданная последовательность микрокоманд (команд).

Ниже приведена схема 4-х битного АЛУ:

Операции в АЛУ

Все выполняемые в АЛУ операции являются логическими операциями (функциями), которые можно разделить на следующие группы:

-операции двоичной арифметики для чисел с фиксированной точкой;

-операции двоичной (или шестнадцатеричной) арифметики для чисел с плавающей точкой;

-операции десятичной арифметики;

-операции индексной арифметики (при модификации адресов команд);

-операции специальной арифметики;

-операции над логическими кодами (логические операции);

-операции над алфавитно-цифровыми полями.

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

К арифметическим операциям относятся сложение, вычитание, вычитание модулей («короткие операции») и умножение и деление («длинные операции»). Группу логических операций составляют операции дизъюнкция (логическое ИЛИ) и конъюнкция (логическое И) над многоразрядными двоичными словами, сравнение кодов на равенство. Специальные арифметические операции включают в себя нормализацию, арифметический сдвиг (сдвигаются только цифровые разряды, знаковый разряд остаётся на месте), логический сдвиг (знаковый разряд сдвигается вместе с цифровыми разрядами). Обширна группа операций редактирования алфавитно-цифровой информации. Каждая операция в АЛУ является логической функцией или последовательностью логических функций описываемых двоичной логикой для двоичных ЭВМ.

3. что такое процессор и микроконтроллер

Микропроцессор.

Введение.

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

    Микропроцессор, как правило, представляет из себя сверхбольшую интегральную схему, реализованную в едином полупроводниковом кристалле и способную выполнять функции центрального процессора. Степень интеграции определяется размерами кристалла  и количеством реализованных в нём транзисторов. Часто интегральными микросхемы  называют чипами (chips).

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

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

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

    С внешними устройствами микропроцессор может «общаться» благодаря шинам адреса, данных и управления, выведенных на специальные контакты корпуса микросхемы. Стоит отметить,  что разрядность внутренних регистров микропроцессора может не совпадать с количеством внешних выводов для линий данных. Иначе говоря, микропроцессор с 32-разрядными регистрами может иметь, например только 16 линий внешних данных. Объём физически адресуемой микропроцессорной памяти однозначно определяется разрядностью внешней шины адреса как 2 в степени N, где N - количество адресных линий.

   Важнейшие определения.

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

    Любое внешнее устройство, совершающее по отношению к микропроцессору операции ввода-вывода, можно назвать периферийным.

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

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

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

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

    В режиме прямого доступа (DMA, Direct Memory Access) периферийное устройство связано с оперативной памятью непосредственно, минуя внутренние регистры микропроцессора. Наиболее эффективна такая передача данных в ситуациях, когда требуется высокая скорость обмена при передаче большого количества информации (например, при загрузке данных в память с внешнего накопителя).

    Довольно часто для адресов, номеров портов, прерываний и т.д. используется шестнадцатеричная система счисления. В этом случае после соответствующего числа стоит буква  ‘h’ (hexadecimal).

    Семейство процессоров x88/x86.

    Первый микропроцессор - i4004 - был изготовлен 1971 году и с тех пор фирма Intel (INTegrated Electronics) прочно удерживает лидирующее положение на данном сегменте рынка. Стоит, пожалуй, напомнить, что максимальная тактовая чистота этого прапрадедушки современных «числодробилок» составляла всего 750 кГц.

    Реализация ряда следующих проектов фирмы Intel по разработке однокристаллических микропроцессоров (i4040, i8008) возвестила о наступлении новой эры персональных компьютеров. Наиболее успешным был, пожалуй, проект разработки микропроцессора i8080. Кстати, впоследствии именно на этом микропроцессоре был основан компьютер «Альтаир», для которого молодой Бил Гейтс написал свой первый интерпретатор Бейсика. Этот 8-разрядный микропроцессор был выполнен по n-канальной МОП-технологии (n-MOS), а его тактовая частота не превышала 2 МГц. Не будет преувеличением сказать, что классическая архитектура i8080 оказала огромное влияние на дальнейшее развитие однокристальных микропроцессоров. Несмотря на заслуженный успех i8080, настоящим промышленным стандартом для персональных компьютеров стал другой микропроцессор фирмы Intel.

    i8088

    Микропроцессор i8088 был анонсирован Intel в июне 1979 года, а в 1981-м «Голубой Гигант» (фирма IBM) выбрал этот микропроцессор для своего первого персонального компьютера и, надо сказать не ошибся. Новый чип содержал примерно 29 тысяч транзисторов. Одним из существенных достоинств микропроцессора i8088 была возможность (благодаря 20 адресным линиям) физически адресовать область памяти в 1 Мбайт. Здесь следует, правда, отметит, что для IBM PC в этом пространстве было отведено всего лишь 640 Кбайт. Хотя с внешними периферийными устройствами  (дисками, видео) i8088 был связан внешнюю 8-разрядную шину данных, его внутренняя структура (адресуемые регистры) позволяла работать с 16-разрядными словами.

Как известно, на системной шине IBM PC для передачи данных было отведено 8 линий (1 байт). Первоначально микропроцессор i8088 работал на частоте

4,77 МГц и имел быстродействие 0,33 MIPS (Million Instruction Per Second), однако впоследствии были разработаны его клоны, рассчитанные на  более высокую тактовую частоту (например, 8 МГц).

    i8086

    Чип 8086, появившийся ровно на год раньше своего счастливого последователя (в июне 1978 года), стал популярен благодаря компьютеру Compaq DeskPro. Программная модель (доступные регистры) этого микропроцессора полностью совпадает с моделью i8088. Основное отличие данных микропроцессора состоит в различной разрядности внешней шины данных: 8 разрядов у i8088 и 16 у i8086. Понятно, что более высокой производительности с новым микропроцессором можно было достичь  при использовании компьютера, на системной шине которого под данные предусмотрено  16 линий. Адресная шина микропроцессора i8086 по-прежнему позволяла адресовать 1 Мбайт памяти.

    i80286

    Опираясь на архитектуру i8086 и учитывая запросы рынка, в феврале 1982 года фирма Intel  выпустила свой новый микропроцессор - i80286. На кристалле было реализовано около 130 тысяч транзисторов. Надо сказать, что этот чип появился практически одновременно с новым компьютером фирмы IBM - PC/AT. Наряду с увеличением производительности этот микропроцессор (i80286) мог теперь работать в двух режимах - реальном и защищённом. Если первый режим был (за рядом исключений) похож на обычный режим работы i8088/86, то второй использовал более изощрённую технику управления памятью. В частности, защищённый режим работы позволял, например, таким программным продуктам, как Windows 3.0 и OS/2, работать с оперативной памятью свыше 1 Мбайта. Благодаря 16 разрядам данных на новой системной шине, которая была впервые использована в IBM PC/AT286, мог обмениваться с периферийными устройствами 2-байтными сообщениями. 24 адресные линии нового микропроцессора позволяли в защищённом режиме обращаться уже к

16 Мбайтам памяти. В микропроцессоре i80286 впервые на уровне микросхем были реализованы многозадачность и управление виртуальной памятью. При тактовой частоте 8 МГц достигалась производительность   1,2 MIPS.

    i80386DX

    В октябре 1985 года фирмой Intel был анонсирован (представлен) первый

32-разрядный микропроцессор i80386. Новый чип содержал примерно 275 тысяч  транзисторов. Первым компьютером, использующий этот процессор, был Compaq Desk Pro 386 (другие источники говорят о лидерстве фирмы ALR). Полностью 32-разрядная архитектура (32-разрядные регистры и 32-разрядная внешняя шина данных) в новом микропроцессоре была дополнена расширенным устройством управления памятью MMU (Memory Management Unit), которая помимо блока сегментации (Segmentation Unit) было дополнено блоками управления страницами (Paging Unit). Это устройство позволяло легко переставлять сегменты из одного места памяти в другое (свопинг) и освобождать драгоценные килобайты памяти. На тактовой частоте 16 МГц быстродействие нового процессора составляло примерно 6 MIPS.

    В реальном режиме (после включения питания) микропроцессор i80386 работал как « быстрый i8088 » (адресное пространство 1 Мбайт, 16-разрядные регистры). Защищённый режим был полностью совместим с аналогичным режимом в i80286. Тем не менее в этом режиме i80386  мог выполнять и свои

« естественные » (native) 32-разрядные программы. Напомним, что 32 адресные линии микропроцессора позволяли физически адресовать 4 Гбайта памяти. Кроме того был введён новый режим - виртуального процессора (V86). В этом режиме могли одновременно выполняться несколько задач, предназначенных для i8086.

        i486  

    На осенней выставке Comdex в 1989 году фирма Intel впервые анонсировала микропроцессор i486DX, который содержал более миллиона  транзисторов (а точнее, 1,2 миллиона) на одном кристалле и был полностью совместим с процессором ряда х86. Напомним, что на кристалле первого члена этого семейства - микропроцессора i8088 - насчитывалось около 29 тысяч транзисторов. В борьбе с микропроцессорами-клонами фирма Intel намеренно убрала из названия нового устройства число 80. Новая микросхема впервые объединила на одном чипе такие устройства, как центральный процессор, математический сопроцессор и кэш-память. Использование конвейерной архитектуры, присущей RISC-процессорам, позволило достичь четырёхкратной производительности обычных 32-разрядных систем. Это связано с уменьшением количества тактов для реализации каждой команды. 8-Кбайтная встроенная кэш-память ускоряет выполнение программ за счёт промежуточного хранения часто используемых команд и данных. На тактовой частоте 25 МГц микропроцессор показал производительность 16,5 MIPS. Созданная в июне 1991 года версия микропроцессора с тактовой частотой

50 МГц позволила увеличить производительность ещё  на 50%. Встроенный математический сопроцессор существенно облегчал и ускорял математические вычисления. Однако впоследствии стало ясно, что подобный сопроцессор необходим только 30% пользователей.

          Pentium

    В марте 1993 года фирма Intel объявила о начале промышленных поставок 66- и 60-мегагерцовых версий процессора Pentium, известного ранее как 586 или P5. Название нового микропроцессора является зарегистрированной торговой маркой корпорации Intel . Таким образом, в системах Intel Inside микропроцессор 586 фигурировать не будет. Системы, построенные на базе Pentium, полностью совместимы со 100 миллионов персональных компьютеров, использующих микропроцессоры i8088, i80286, i80386, i486. Новая микросхема содержит около 3,1 миллиона транзисторов  и имеет 32-разрядную адресную и 64-разрадную внешнюю шину данных, что обеспечивает обмен данными с системной платой со скоростью до 528 Мбайт/с. В отличие от 486-х процессоров, для производства которых использовалась CMOS-технология, для Pentium фирмы Intel применила 0,8-микронную BiCMOS-технологию.

    Pentium с тактовой частотой 66 МГц имеет производительность 112  MIPS (миллионов операций в секунду). Суперскалярная архитектура содержит два пятиступенчатых блока исполнения, работающих независимо и обрабатывающих две инструкции за один такт синхронизации. Pentium имеет два  раздельных 8-Кбайтных кэша: один для команд и один для данных. Одним из наиболее интересных новшеств, используемых в Pentium, является небольшая кэш-память, называемая Branch Target Buffer - BTB (буфер меток перехода), которая позволяет динамически предсказывать переходы в исполняемых программах. По скорости выполнения операций с плавающей точкой Pentium оставляет далеко позади всех своих «собратьев по классу» - i486DX-33 (почти в 10 раз), i486DX2-66 (2,5 раза). Это достигается, в частности, благодаря реализации оптимальных алгоритмов, а также специализированным блокам сложения, умножения и деления с восмиступенчатой конвейеризацией, что позволяет выполнять операции с плавающей точкой за один такт. Как известно, в процессорах i486 специального конвейера для устройств с плавающей точкой предусмотрено не было.

                

Несколько слов о производительности.

    До недавнишнего времени основной мерой производительности микропроцессоров (да и компьютеров)  считалась их тактовая частота работы, и это было, вообще говоря, справедливо. Однако по мере усложнения архитектуры микропроцессоров (RISC - ядро, встроенная кэш-память, технология внутреннего умножения тактовой частоты) данный параметр работы устройств, хотя и остаётся важным показателем их производительности, уже не является определяющим. Именно этим можно объяснить, например, тот факт, что микропроцессор i486SX-25 производительнее i386DX-33.

    В 1992 году фирма Intel предложила индекс для оценки производительности своих микропроцессоров - iCOMP (Intel Comparative Microprocessor Performance). Сам индекс представляет из себя число, которое отражает относительную производительность данного устройства по сравнению с другими микросхема семейства х86 и Pentium. Производительность процессора 486SX-25 принимается за 100. Заметим, что новый индекс не заменяет известные тестовые программы (benchmark) уже хотя бы потому, что измеряет относительную производительность микропроцессора, а не системы в целом. Кстати говоря, при вычислении индекса iCOMP учитываются операции со следующими «взвешенными» компонентами (числами): 16-разрядные целые (67%),16-разрядные действительные (3%), 32-разрядные целые (25%), 32-разрядные действительные (5%). К слову, именно величина производительности с индексом iCOMP использовалась фирмой Intel в новой системе маркировки процессоров Pentium, например 73590 и 815100 для  тактовой частоты 90 и 100 МГц. Следует, однако, учитывать, что в реальных системах может наблюдаться другое соотношение производительности процессоров. Связанно это как с особенностями конкретных системных плат, так и, в случае с Pentium, с тем, что для достижения максимальной производительности требуется оптимизация программных кодов. 

Микроконтроллер.

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

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

Неполный список периферии, которая может присутствовать в микроконтроллерах, включает в себя:

универсальные цифровые порты, которые можно настраивать как на ввод, так и на вывод;

различные интерфейсы ввода-вывода, такие как UART, I²C, SPI, CAN, USB, IEEE 1394, Ethernet;

аналого-цифровые и цифро-аналоговые преобразователи;

компараторы;

широтно-импульсные модуляторы;

таймеры;

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

контроллеры дисплеев и клавиатур;

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

массивы встроенной флеш-памяти;

встроенный тактовый генератор и сторожевой таймер;

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

Первым прототипом микроконтроллера считается разработанный в 1971 году сотрудниками Texas Instruments, запатентовавшими свое изобретение под названием «однокристальная микро-ЭВМ». Отличительной особенностью этого устройства является размещение непосредственно на кристалле не только вычислительного ядра, но и запоминающего устройства, хранящего инструкции и данные, устройства ввода-вывода, а также набор встроенных периферийных устройств. Первым по настоящему коммерчески успешным считается выпущенный в 1980 году фирмой Intel микроконтроллер i8051.

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

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

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

  • Быстродействие.

  • Габаритные размеры и тип корпуса.

  • Энергопотребление, наличие энергосберегающего режима работы, необходимость охлаждения.

  • Встроенные периферийные устройства, начиная от EEPROM-памяти и заканчивая LAN или LCD-контроллером.

  • Надежность.

Еще одной важной характеристикой, влияющей как на практичность, так и на цену устройства, является способ программирования:

  • Перепрограммируемые микроконтроллеры с УФ или электрическим стиранием, являются самыми дорогими, но вместе с тем, и наиболее практичными устройствами для мелкосерийного и экспериментального производства.

  • Однократно-программируемые микроконтроллеры дешевле перепрограммируемых, однако, программирование возможно только один раз.

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

Первый микроконтроллер 

Закон Мура

     Выступая в 1965 году на конференции International Electron Devices Meeting, один из будущих основателей Intel Гордон Мур (Gordon Moore) отметил, что новые модели микросхем разрабатывались спустя более-менее одинаковые периоды времени — 18-24 месяца — после появления их предшественников, а емкость их при этом возрастала каждый раз примерно вдвое.       Наблюдение Мура, еще не возведенное в то время в ранг закона, впоследствии блестяще подтвердилось, а обнаруженная им закономерность наблюдается и в наши дни. За 30 лет, истекшие с момента появления микропроцессора 4004 в 1971 году и вплоть до выпуска процессора Pentium® 4, количество транзисторов выросло более чем в 18000 раз - с 2 300 до 42 миллионов. 

Закон Рока

     Дополнение Артура Рока (Arthur Rock) к закону Мура: стоимость основных фондов, используемых в производстве полупроводников, удваивается каждые четыре года.

   Перый микроконтроллер появился на свет в 1976 году, через 5 лет после создания первого микропроцессора. Это была микросхема фирмы Intel, получившая имя 8048.     Помимо центрального процессора, на кристалле находились 1 КБайт памяти программ, 64 байта памяти данных, два восьмибитных таймера, генератор часов и 27 портов ввода/вывода.    Микроконтроллеры семейства 8048 использовались в игровых консольных приставках Magnavox Odyssey, в клавиатурах первых IBM PC и в ряде других устройств.    Существует также мнение, что первым микроконтроллером был 4-х pазpядный TMS1000 от Texas Instruments, котоpый содеpжал ОЗУ (32 байта), ПЗУ (1К), часы и поддеpжку ввода-вывода, что позволяло считать его именно первым микpоконтpоллеpом. Выпущенный в 1972 году, он имел новую по тем временам возможность - добавление новых инструкций.    8051     Следующий микроконтроллер Intel 8051, выпущенный в 1980 году, стал поистине классическим образцом устройств данного класса. Этот 8-битный чип положил начало целому семейству микроконтроллеров, которые господствовали на рынке вплоть до недавнего времени.    Аналоги 8051 выпускали советские предприятия в Минске, Киеве, Воронеже, Новосибирске, на них выросло целое поколение отечественных разработчиков.    Большинство фирм производителей микроконтроллеров и сегодня выпускают устройства, основанные на этой архитектуре. Среди них Philips, Atmel, Dallas, OKI, Siemens — можно перечислить более полутора десятков имен. Но 51-е семейство постепенно сдает свои позиции более молодым и совершенным микроконтроллерам.    Motorola и Zilog     Другими яркими представителями восьмиразрядных микроконтроллеров явились изделия компаний Motorola (68HC05, 68HC08, 68HC11) и Zilog (Z8).    Motorola длительное время не предоставляла средств, позволяющих дешево и быстро начать работать с ее контроллерами, что явно не способствовало их популярности у некорпоративных разработчиков. Однако стоит заметить, что за рубежом микроконтроллеры от Motorola занимают лидирующее положение на рынке. В нашей стране их популярность не очень высока, возможно, еще в силу отсутствия достаточного количества доступных учебных материалов и средств разработки.     Микроконтроллеры фирмы Zilog, основанной бывшими сотрудниками Intel, еще недавно казавшиеся столь многообещающими, не выдержали гонки в стремительно развивающемся секторе рынка, и сегодня система команд Z8 выглядит достаточно устаревшей.    Microchip 

   Чтобы перепрограммировать такой PIC-микроконтроллер, необходимо было посветить некоторое время в специальное окошечко кварцевой лампой. Сегодня новые микроконтроллеры от Microchip оснащаются электрически перепрограммируемой Flash-памятью программ.

   Первые значительные перемены произошли с появлением PIC-контроллеров фирмы Microchip. Эти чипы предлагались по рекордно низким ценам, что позволило им в короткий срок захватить значительную часть рынка микроконтроллеров. К тому же кристаллы от Microchip оказались не уступающими, а нередко и превосходящими микроконтроллеры х51 по производительности и не требовали дорогостоящего программатора.     Вместе с контроллерами появились дешевые комплекты PICSTART, содержащие все, что было нужно для того, чтобы, не имея ни средств, ни навыков работы с PIC-контроллерами, быстро создать и отладить на нем продукт.     Эти микроконтроллеры имели хорошие порты, но все остальное было сделано весьма неудобно. Архитектура оставляла желать лучшего, система команд была крайне ограничена. Тем не менее, PIC-контроллеры остаются популярными в тех случаях, когда требуется создать недорогую систему, не предъявляющую высоких требований по ее управлению.    Scinex     На волне успеха PIC-контроллеров появились очень похожие на них изделия фирмы Scinex. Они обладали уже 52-мя командами против PIC-овских 33-х. Были добавлены хорошие инструкции для работы с памятью, улучшена архитектура, каждая команда выполнялась за один такт, что при прочих равных условиях было вчетверо быстрее, чем у Microchip, и к тому же их тактовая частота достигала 100 МГц.     Столь высокая скорость контроллера позволяет его создателям отказаться от различной периферии — таймеров, счетчиков, регистров сдвига в приемопередатчиках, — все это рекомендуется реализовывать чисто программными средствами, благо быстродействия для этого хватает: внутри — лишь сверхбыстрое ядро, память да порты ввода/вывода.     Atmel     Настоящая революция в мире микроконтроллеров произошла в 1996 году, когда корпорация Atmel представила свое семейство чипов на новом прогрессивном ядре AVR. Более продуманная архитектура AVR, быстродействие, превосходящее контроллеры Microchip, привлекательная ценовая политика способствовали оттоку симпатий многих разработчиков от недавних претендентов на звание контроллера номер 1.     Микроконтроллеры AVR имеют более развитую систему команд, насчитывающую до 133 инструкций, производительность, приближающуюся к 1 MIPS/МГц, Flash ПЗУ программ с возможностью внутрисхемного перепрограммирования. Многие чипы имеют функцию самопрограммирования. AVR-архитектура оптимизирована под язык высокого уровня Си. Кроме того, все кристаллы семейства совместимы "снизу вверх".    Огромную роль сыграла доступность программного обеспечения и средств поддержки разработки. У Atmel много бесплатно распространяемых программных продуктов. Хорошо известно, что развитые средства поддержки разработок при освоении и знакомстве с любым микроконтроллерным семейством играют не менее значимую роль, чем сами кристаллы. Фирма Atmel уделяет этому вопросу большое внимание. Чрезвычайно удачная и совершенно бесплатная среда разработки AVR Studio, работающая под Windows.    Ведущие сторонние производители выпускают полный спектр компиляторов, программаторов, ассемблеров, отладчиков, разъемов и адаптеров.    Для начинающего разработчика немаловажным является и то, что для программирования AVR можно обойтись вовсе без аппаратного программатора. Самым популярным способом программирования этих микроконтроллеров являются пять проводков, подсоединенных к параллельному порту персонального компьютера.    Можно считать, что AVR постепенно становится еще одним индустриальным стандартом среди 8-разрядных микроконтроллеров общего назначения. Они легкодоступны в России и отличаются в среднем невысокой стоимостью, успешно конкурируя с изделиями компании MICROCHIP. Все это делает микроконтроллеры Atmel AVR одними из самых привлекательных для обучения.

Lego RCX

     В основе RCX лежит микроконтроллер Hitachi H8/3297 (семейство процессоров H8/300 с 32Kb оперативной памяти). Микроконтроллер используется для управления тремя моторами, тремя сенсорами и инфракрасным портом.      Встроенная в чип 16Kb ROM содержит драйвер, который запускается при первом включении RCX. Возможности прошитого драйвера расширяются при загрузке в RCX 16Kb программного обеспечения (firmware). Вместе они позволяют выполнять команды, полученные с компьютера через ИК порт. Программы, созданные пользователем, загружаются в RCX как байт-код и хранятся в отведенном для них 6Kb участке памяти. 

Lego NXT

     Контроллерный блок NXT работает под управлением 32-битного микроконтроллера семейства ARM7 (Atmel AT91SAM7S256) на частоте 48 MHz. Имеет 256 Kb Flash-памяти программ и 64 Kb RAM. Кроме того, в NXT трудится 8-битный микроконтроллер Atmel AVR с 4 Kb FLASH-памяти и 512 Byte RAM. NXT имеет встроенный Bluetooth-модуль, порт USB, 4 порта для датчиков, 3 порта для моторов, графический LCD-дисплей (100 x 64) и громкоговоритель. 

   Список микроконтроллеров, упомянутых на этой странице, далеко не полный. Среди крупных производителей микроконтроллеров следовало бы подробнее упомянуть Cypress, Texas Instruments, Dallas Semiconductor, Philips, Infineon (Siemens), STMicroelectronics, Futjitsu, Mitsubishi Electronics, Temic, National Semoconductor, Oki Semiconductor и др.    Отдельного упоминания заслуживают мощные контроллеры фирмы Toshiba. Хотя у них и отсутствует внутренняя память программ, нужен кристалл внешнего ПЗУ, но они имеют хорошо развитую периферию и способны поддерживать модули памяти типа SIMM, используемые в IBM. За рубежом эти контроллеры ставятся в DVD-проигрыватели, CD-проигрыватели, автоответчики, — словом, туда, где надо работать с большими объемами памяти.    Также следует сказать о самых маленьких в мире микроконтроллерах ACE. Это 8-разрядные чипы размерами около 3х4 мм, из 8 выводов 6 - это порты ввода/вывода. По возможностям они похожи на Microchip или AVR, но в очень маленьком корпусе. Им можно сделать минимальное обрамление и поместить в ручку какого-нибудь изделия.    И, конечно же, нельзя пройти мимо широко развитой линии микроконтроллеров H8 фирмы Hitachi. Это большая семья микроконтроллеров, включающая H8/300, H8/300H, H8/500 и H8S серии. Основа архитектуры H8 базируется на решениях фирмы DEC и их легендарном компьютере PDP-11. Несколько компаний выпускают для этих микроконтроллеров компиляторы ассемблера и языков высокого уровня. H8 могут быть найдены в цифровых фотокамерах, контроллерах принтеров и различных автоматических подсистемах. Также они трудятся в контроллерных блоках RCX робоконструкторов Lego MindStorm. 

4. Языки программирования

Языки программирования и их классификация

Существуют различные классификации языков программирования.

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

Если язык близок к естественному языку программирования, то он называется языком высокого уровня, если ближе к машинным командам, – языком низкого уровня.

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

Машинно–ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).

К языкам программирования высокого уровня относят Фортран (переводчик формул – был разработан в середине 50–х годов программистами фирмы IBM и в основном используется для программ, выполняющих естественно – научные и математические расчеты), Алгол, Кобол (коммерческий язык – используется, в первую очередь, для программирования экономических задач), Паскаль, Бейсик (был разработан профессорами Дармутского колледжа Джоном Кемени и Томасом Курцом.), Си (Деннис Ритч – 1972 году), Пролог (в основе языка лежит аппарат математической логики) и т.д.

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

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

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

Языки программирования также можно разделять на поколения:

– языки первого поколения: машинно–ориентированные с ручным управлением памяти на компьютерах первого поколения.

– языки второго поколения: с мнемоническим представлением команд, так называемые автокоды.

– языки третьего поколения: общего назначения, используемые для создания прикладных программ любого типа. Например, Бейсик, Кобол, Си и Паскаль.

– языки четвертого поколения: усовершенствованные, разработанные для создания специальных прикладных программ, для управления базами данных.

– языки программирования пятого поколения: языки декларативные, объектно–ориентированные и визуальные. Например, Пролог, ЛИСП (используется для построения программ с использованием методов искусственного интеллекта), Си++, Visual Basic, Delphi.

Языки программирования также можно классифицировать на процедурные и непроцедурные.

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

Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.

Непроцедурное (декларативное) программирование появилось в начале 70-х годов 20 века, К непроцедурному программированию относятся функциональные и логические языки.

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

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

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

Первый объектно-ориентированный язык программирования Simula был создан в 1960-х годах Нигаардом и Далом.

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

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

    1. Компиляторы и интерпретаторы

С помощью языка программирования создаётся не готовая программа, а только её текст, описывающий ранее разработанный алгоритм. Чтобы получить работающую программу, надо этот текст либо автоматически перевести в машинный код (для этого служат программы компиляторы) и затем использовать отдельно от исходного текста, либо сразу выполнять команды языка, указанные в тексте программы (этим занимаются программы-интерпретаторы).

Интерпретатор берёт очередной оператор языка из текста программы, анализирует его структуру и затем сразу исполняет (обычно после анализа оператор транслируется в некоторое промежуточное представление или даже машинный код для более эффективного дальнейшего исполнения). Только после того как текущий оператор успешно выполнен, интерпретатор перейдёт к следующему. При этом если один и тот же оператор будет выполняться в программе многократно, интерпретатор будет выполнять его так как, как будто встретил впервые. Вследствие этого программы,в которых требуется осуществить большой объём вычислений, будут выполняться медленно. Кроме того, для выполнения программы на другом компьютере там тоже должен стоять интерпретатор – ведь без него текст является просто набором символов.

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

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

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

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

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

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