Програмування відмінностей між мікроконтролером та мікропроцесором?


9

Тому я часто бачу книги / підручники та довідники при програмуванні в зборі до мікропроцесору ..... тоді я бачу, що деякі відносять його до мікроконтролера.

Наприклад, Atmel ATtiny2313 .... я бачив кілька навчальних посібників, деякі називають його мікропроцесором, деякі називають його мікроконтролером?

Що це таке? і програмування їх (в основному) однакове? (в зборі)



1
@Kellenjb: Як би не запитували про відмінності в програмі. Я думаю, що це досить різне, щоб не закривати.
BG100

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

Відповіді:


14

Це справді два питання в одному ...

По-перше, у чому різниця між мікроконтролером та мікропроцесором?

Мікропроцесор - це суто центральний процесор, який слідує набору інструкцій, прочитаних із зовнішньої шини пам'яті. Він управляє зовнішніми периферійними пристроями (такими як екран, клавіатура, миша, жорсткий диск тощо) за допомогою зовнішньої шини зв'язку. Коли ви програмуєте мікропроцесор, ваша програма є зовнішньою для пристрою. У комп'ютері ця пам'ять спочатку являє собою завантажувальний BIOS ROM, який спочатку зчитує операційну систему з жорсткого диска в оперативну пам'ять, а потім продовжує виконувати її звідти.

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

По-друге, програмування мікроконтролера та мікропроцесора однакове?

У чомусь так, а в чомусь ні.

Мова складання - це широкий термін, який описує набір інструкцій, які ЦП може безпосередньо зрозуміти. Коли ви "компілюєте" мову складання, вона насправді нічого не компілює, все це робить, вона перетворює її в послідовність байтів, які представляють команди та плагіни в деяких відносних місцях пам'яті. Це властиво як мікропроцесорам, так і мікроконтролерам.

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

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


Ну, що я мав на увазі, що так, ASM буде різним для кожного ..... але команди / тощо, як правило, однакові (або зроблені однаково) між MC та MP ... Я маю на увазі, MC має MP тому я б припустив так .. (мінус пам’ять)

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

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

Добре, що я мав на увазі, це ...... Як, оскільки мікроконтролер має в ньому центральний процесор ... інструкції збірки більше спрямовані на фактичний процесор, а не на компоненти навколо нього.

@Sauron: Так, це правильно.
BG100

10

Різниця полягає в тому, що мікроконтролер включає в себе пам’ять на мікросхемі, як Flash EEPROM і RAM, і такі периферійні пристрої, як паралельний і послідовний введення / виведення. З першими мікропроцесорами це були всі зовнішні пристрої. Замість мікропроцесорів вводу-виводу мікропроцесори мали адресу та шину даних, підведені до своїх штифтів.
Спосіб написання коду для обох однаковий.

Щоб проілюструвати цей момент: існують архітектури (наприклад, ARM), де той самий процесор доступний як мікроконтролер (з усім кодом і пам'яттю даних на мікросхемі), як мікропроцесор (весь код і пам'ять даних зовнішній), або як гібридний (деякі пам'ять на мікросхемі, але для більшості програм ви додасте зовнішню пам'ять). Процесор є однаковим, тому програмування (в сенсі інструкцій щодо процесора) однакове.


О, добре, що має більше сенсу, але ASM для кожного з них в основному однаковий?

Ви маєте на увазі, якщо я навчусь кодувати серії Cortex M, то я можу також кодувати серію Cortex A ??
0xakhil

В основному, так для обох питань, інструкції ASM однакові (хоча можуть бути незначні варіанти, як і різні версії ARM можуть додавати конкретні інструкції). Але щоразу, коли ви використовуєте речі поза процесором (кеш, контролер переривання, периферійні пристрої тощо), будуть великі відмінності.
Wouter van Ooijen

8

Хоча це, як правило, сіра область, ще одна поширена відмінність мікроконтролерів від мікропроцесорів полягає в тому, що мікроконтролери часто використовують гарвардську архітектуру (окремий адресний простір для коду та даних), тоді як мікропроцесори майже всі використовують архітектуру Фон Ноймана (комбінований адресний простір для коду та даних) .

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

Це впливає на програмування кількома способами (приклади, показані нижче, використовують C):

Оперативної пам'яті може бути декілька типів, кожен з яких має свій адресний простір. Наприклад, 8051 має зовнішні дані (xdata), які адресовані окремо від перших 256 байт оперативної пам'яті, хоча обидва реалізовані на одній мікросхемі. Отже, треба використовувати класифікатори для декларацій змінних, якunsigned int xdata foo;

Якщо константи оголошені в кодовій пам'яті, їх, можливо, потрібно буде скопіювати в оперативну пам'ять, перш ніж отримати доступ до них. Або ж повинен бути спосіб отримати доступ до пам'яті коду так, як ніби це дані - наприклад, класифікатор коду для 8051-х чи функція програмної візуальності космічної простори PIC (PSV).

Ці нестандартні способи доступу до коду та оперативної пам’яті, як правило, є основною відмінністю (крім периферійних пристроїв) при перенесенні коду С з однієї сімейства чіпів в іншу.

Ви не можете виконати код з оперативної пам’яті в суворій гарвардській архітектурі, тому не може бути ніякого коду, що самозмінюється (якщо тільки ви не рахуєте повторну мерехтіння програмної пам’яті на льоту). Однак PIC32 має змінену Гарвардську архітектуру, яка дозволяє виконувати код в оперативній пам'яті. Пропелер Parallax фактично використовує свою здатність змінювати код для виконання повернень підпрограми, оскільки не має апаратного стеку.


1

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

Мікропроцесор забезпечує обчислювальні функції, але не периферійні функції.

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

Для даної архітектури (скажімо, на базі x86 на процесорі та MCU) "обчислювальне" кодування буде ідентичним. Але спосіб доступу до периферійних функцій буде відрізнятися, і тому у вас буде дуже різний апаратний кодування, який потрібно робити, виходячи з того, як периферійна функціональність реалізована на вашому цільовому обладнання.


1

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

Деякі мікроконтролери використовують ті ж набори інструкцій, що і популярні мікропроцесори. Набір інструкцій 68000, який використовується в оригінальних лініях персональних комп'ютерів для Macintosh, Amiga та Atari ST, також використовується в деяких мікроконтролерах. Навіть незважаючи на те, що набір інструкцій, який використовується Macintosh та на основі 68HC340, є однаковим, однак програмування для двох платформ може бути дуже різним. На Macintosh до моменту запуску програми, що надається користувачем, значна частина системи вже буде "налаштована". Код, який хоче блок пам'яті, може завантажувати регістри з необхідною кількістю та виконувати інструкцію "A-trap". Потім Macintosh OS поверне вказівник на деяку пам'ять, яка раніше не була виділена для іншої мети, і відзначить цю область пам'яті, щоб вона виграла ' t не буде виділено знову, поки не з’явиться інструкція, що оригінальний одержувач більше не потребує цього. На противагу цьому, на платі з 68HC340 і 128 Кб оперативної пам’яті немає потреби або можливості «запитувати» оперативну пам’ять. Коли програма запуститься, "отримає" 128K, яку вона може використовувати, як хоче; більше нічого не буде використовувати його, але з іншого боку, програма користувача повинна відслідковувати, які області він використовує для яких цілей, оскільки більше нічого цього не буде відстежувати.

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


0

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

Мікроконтролер: Повний модуль, який містить мікропроцесор з внутрішньою пам'яттю на додаток до інших модулів.


Ласкаво просимо на EE.SE, Майк. Використовуйте <enter> x 2 для перерви абзацу. Я це виправив.
Транзистор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.