Программирование Различия между микроконтроллером и микропроцессором?


9

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

Например, Atmel ATtiny2313 .... Я видел некоторые учебники, некоторые называют это микропроцессором, некоторые называют его микроконтроллером?

Что он? и программирование их (в основном) то же самое? (в сборе)



1
@Kellenjb: Было бы, если бы не спрашивали о различиях в программировании. Я думаю, что это достаточно отличается, чтобы не закрыть.
BG100

1
@ BG100 принятый ответ только действительно объяснил разницу, а не разницу в программировании.
Кортук

Ответы:


14

Это действительно два вопроса в одном ...

Во-первых, в чем разница между микроконтроллером и микропроцессором?

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

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

Во-вторых, программирование микроконтроллера и микропроцессора одинаково?

В некоторых отношениях да, а в некоторых нет.

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

Однако разные типы процессоров понимают различный набор инструкций процессора. Например, если вы напишите программу на языке ассемблера, которая работает с микроконтроллером pic 16F877, это будет полной чепухой для микропроцессора или любого другого микроконтроллера, не входящего в семейство микроконтроллеров pic 16Fxxx.

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


Ну, я имел в виду, что да, ASM будет отличаться для каждого ..... но команды / и т. Д. В целом одинаковы (или выполняются одинаково) между MC и MP ... Я имею в виду, что MC имеет MP так что я бы так предположил .. (минус память)

@Sauron: Нет, не совсем ... хотя некоторые команды могут быть похожи между устройствами, например add, mov, sub и т. Д., Они, вероятно, реализованы по-разному и не будут портировать между устройствами.
BG100

1
Отличный ответ, и тот, который, вероятно, мог бы помочь мне, когда я начинал свой класс микропроцессоров.
pfyon

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

@ Саурон: Да, это правильно.
BG100

10

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

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


О, хорошо, это имеет больше смысла, но ASM для каждого из них в основном одинаков?

Ты имеешь в виду, что если я научусь писать код для серии Cortex M, я тоже смогу писать код для серии Cortex A ??
0xakhil

В основном, да, оба вопроса, инструкции asm одинаковы (хотя могут быть незначительные различия, как разные версии ARM могут добавлять конкретные инструкции). Но всякий раз, когда вы используете вещи вне процессора (кеш, контроллер прерываний, периферия и т. Д.), Будут большие различия.
Воутер ван Оойен

8

Несмотря на то, что это, как правило, «серая зона», другим распространенным отличием между микроконтроллерами и микропроцессорами является то, что микроконтроллеры часто используют архитектуру Гарварда (отдельное адресное пространство для кода и данных), в то время как микропроцессоры почти все используют архитектуру фон Неймана (объединенное адресное пространство для кода и данных) ,

Примеры семейств микронтроллеров, использующих архитектуру Гарварда: AVR, Intel 8051, PIC (кроме PIC32, см. Ниже) и ARM Cortex-M3. Заметным исключением являются процессоры Freescale, такие как HCS08, которые используют архитектуру фон Неймана, как и пропеллер Parallax.

Это влияет на программирование несколькими способами (примеры, показанные ниже, используют C):

Может быть несколько типов оперативной памяти, каждый со своим адресным пространством. Например, 8051 имеет внешние данные (xdata), которые адресуются отдельно от первых 256 байтов ОЗУ, хотя оба они реализованы на одном чипе. Поэтому необходимо использовать квалификаторы в объявлениях переменных, таких какunsigned int xdata foo;

Если константы объявлены в памяти кода, их может потребоваться скопировать в ОЗУ, прежде чем к ним можно будет получить доступ. Или должен существовать способ доступа к памяти кода, как если бы это были данные - например, спецификатор кода для 8051-го или функция PIC Program Space Visiblity (PSV).

Эти нестандартные способы доступа к коду и оперативной памяти, как правило, являются основным отличием (помимо периферийных устройств) при переносе кода C из одного семейства чипов в другое.

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


1

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

Микропроцессор обеспечивает вычислительные функции, но не периферийные функции.

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

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


1

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

Некоторые микроконтроллеры используют те же наборы команд, что и популярные микропроцессоры. Набор команд 68000, использовавшийся в оригинальных линиях персональных компьютеров Macintosh, Amiga и Atari ST, также использовался в некоторых микроконтроллерах. Несмотря на то, что набор инструкций, используемых Macintosh и платой управления на базе 68HC340, одинаков, программирование для этих двух платформ может сильно отличаться. На Macintosh к тому времени, когда запускается пользовательская программа, большая часть системы уже «настроена». Код, который хочет блок памяти, может загрузить регистры с необходимым количеством и выполнить команду «A-trap». Затем ОС Macintosh вернет указатель на некоторую память, которая ранее не была выделена для какой-либо другой цели, и отметит эту область памяти, чтобы она победила ' не может быть распределен снова, пока не будет указано, что исходный получатель больше не нуждается в нем. Напротив, на плате с 68HC340 и 128K RAM нет необходимости или возможности «запрашивать» RAM. Когда программа запускается, она «получает» 128K, которые она может использовать по своему усмотрению; ничто другое не будет его использовать, но, с другой стороны, пользовательская программа должна отслеживать, какие области она использует для каких целей, поскольку ничто другое не будет отслеживать это.

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


0

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

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


Добро пожаловать в EE.SE, Майк. Используйте <enter> x 2 для разрыва абзаца. Я исправил это для тебя.
Транзистор
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.