Что мне следует знать, если я хочу перейти с микроконтроллеров на микропроцессоры? [закрыто]

Я знаком с использованием микроконтроллеров, как с такими фреймворками, как Arduino, так и изначально (PIC/AVR). Я также знаком с общей архитектурой встраиваемых систем, поскольку знаю, что у вас есть процессор с дискретной ОЗУ и ПЗУ/флеш-памятью, подключенными через различные шины. Однако я никогда не создавал проект с нуля с использованием микропроцессора.

Что я должен знать, прежде чем переходить к микропроцессорным проектам? Например, на микроконтроллере я привык просто отправлять какой-то код через свой компилятор и получать бинарник, который можно загрузить через ISP или подобное — как это работает с процессором с дискретной флэш-памятью? А как насчет источников тактовых импульсов — процессоры обычно имеют внутренние часы, как микроконтроллеры? Я уверен, что есть много "неизвестных неизвестных" - где я должен искать, чтобы начать?

Меня в первую очередь интересуют платформы ARM и x86, но общие советы тоже будут полезны.

Единственное, что действительно меняется, — это механизм загрузки. И этот механизм может принимать любую из десятков форм.
@ IgnacioVazquez-Abrams Я не понимаю, как это может быть так - наверняка есть сложности с доступом к ОЗУ / ПЗУ, которых нет в микроконтроллерах?
Только с тем, как это связано. В противном случае он по-прежнему просто использует шины адреса и данных как обычно.
В современных SoC различие между ними довольно незначительно и в значительной степени зависит от педантичности. Скорее вопрос о том, какие вещи у вас есть в системе, например, внешняя DRAM, контроллеры памяти и т. д.
В современных микропроцессорах шина ввода-вывода более «отсоединена» от ядра, чем в небольших микроконтроллерах. Посмотрите на такую ​​метрику, как скорость переключения вывода ввода-вывода с помощью программного обеспечения, деленная на MIPS. На маленьком микроконтроллере он легко может быть более чем на порядок выше.
Не хотел бы downvoter объяснить свои рассуждения? Я не могу писать лучшие вопросы без обратной связи.
Я не против голосования, но я вижу, что голосование за закрытие в первую очередь основано на мнении (и из-за этого вопрос попал в очередь на рассмотрение закрытия голосования - вот как я к нему попал). Это может быть причиной отрицательного голоса. Я не голосую за то, чтобы закрыть или оставить его открытым (т. е. я пропускаю вопрос), но длинная очередь комментариев, которая формируется по вопросу и одному из ответов, может быть признаком слишком большого обсуждения.

Ответы (2)

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

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

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

Микропроцессоры почти всегда будут иметь внешний кварц в качестве источника тактового сигнала. Процессор может использовать PLL (петля фазовой автоподстройки частоты) для умножения частоты кристалла до гораздо более высокого значения (несколько сотен МГц или даже ГГц). Это будет частью кода инициализации.

Доступ к периферийным устройствам практически такой же, как и к микроконтроллеру; они просто внешние по отношению к чипу, а не внутри него, поэтому доступ не такой быстрый. (Единственными «периферийными устройствами», как правило, на чипе x86 являются таймеры, DMA и контроллер прерываний.) Процессор взаимодействует с периферийными устройствами через порты ввода-вывода.

XIP, безусловно, великолепен.
@ IgnacioVazquez-Abrams Спасибо, не знал об этом.

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

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

CPU с MMU — это MPU; ЦП без MMU является MCU.

Извините, но просто неправильно. Более ранние микропроцессоры (8080, 6800, 6502, оригинальный 8086, Z80, даже 68000) не имели MMU, но они определенно были микропроцессорами, а не микроконтроллерами. У них не было встроенной памяти или периферийных устройств. 68030 был одним из первых микропроцессоров со встроенным MMU. 8051 был одним из первых микроконтроллеров. Лучшее различие между микропроцессорами и микроконтроллерами заключается в том, есть ли у них внешняя адресная шина, что верно в большинстве случаев. Смотрите этот ответ для получения дополнительной информации.
@tcrosley Нет, я не ошибаюсь; если бы я ошибался, я бы знал. На самом деле я ссылаюсь на мнение ARM; Я думаю, что я на достаточно безопасном основании, признавая, что они знают, о чем говорят. Могут применяться некоторые дополнительные критерии, например внешняя память, но наличие MMU имеет смысл из-за его актуальности для многозадачности (в отличие от многопоточности).
ARM — это особый случай, потому что они производят некоторые микроконтроллеры с внешними адресными шинами, поэтому они представляют собой комбинацию микропроцессора и микроконтроллера. Как они хотят их называть, это их дело. Это не основная точка зрения. Смотрите это , это и это . Нет упоминания MMU в качестве критерия.
@trcosley да ... Это не более чем руководства по продажам, я думаю, что буду придерживаться точки зрения ARM. Я не говорю, что другие факторы не имеют значения, но наличие MMU делает или разрушает это, насколько я понимаю.
Так вы говорите, что 8080, 6800, 6502, 8086, Z80 и 68000 не были микропроцессорами? Кем они были? Уж точно не микроконтроллеры, у них не было ни памяти, ни периферии на чипе. Уже тогда они делали различие между микроконтроллерами (8048, 8051) и микропроцессорами.
@tcrosley Как я уже сказал, не единственный критерий, а самый важный. Кроме того, вероятно, существуют исторические ограничения технических возможностей, которые объясняют, почему большинство из перечисленных вами процессоров не были однокристальными решениями - это просто еще не могло быть сделано (по крайней мере, по приемлемой цене). Черт, мне все равно, называйте их как хотите, вы начинаете капризничать насчет семантики. Нравится вам это или нет, но наши мнения не совпадают и вряд ли совпадут. Мы могли бы поспорить о том, является ли черный цвет следующим цветом или оттенком, если хотите?
Пока вы признаете историческое значение первых микропроцессоров, не имевших MMU, в то время как я соглашусь с тем, что практически все современные микропроцессоры имеют MMU (я не могу придумать ни одного, у которого их нет), тогда, я думаю, мы можем закончить. наш спор.
@tcrosley Согласен.