Я знаком с использованием микроконтроллеров, как с такими фреймворками, как Arduino, так и изначально (PIC/AVR). Я также знаком с общей архитектурой встраиваемых систем, поскольку знаю, что у вас есть процессор с дискретной ОЗУ и ПЗУ/флеш-памятью, подключенными через различные шины. Однако я никогда не создавал проект с нуля с использованием микропроцессора.
Что я должен знать, прежде чем переходить к микропроцессорным проектам? Например, на микроконтроллере я привык просто отправлять какой-то код через свой компилятор и получать бинарник, который можно загрузить через ISP или подобное — как это работает с процессором с дискретной флэш-памятью? А как насчет источников тактовых импульсов — процессоры обычно имеют внутренние часы, как микроконтроллеры? Я уверен, что есть много "неизвестных неизвестных" - где я должен искать, чтобы начать?
Меня в первую очередь интересуют платформы ARM и x86, но общие советы тоже будут полезны.
Основное различие в этих системах заключается в том, что они, как правило, не запускают большую часть файлов непосредственно из флэш-памяти — вместо этого во флэш-памяти будет небольшая программа, которая действует как загрузчик, а затем программа будет скопирована с какого-либо носителя, такого как SD-карту, SSD или жесткий диск в ОЗУ, откуда она затем запускается. Если есть необходимость обновить загрузчик, будут какие-то средства, либо через микропроцессор, либо внешние, чтобы обновить его перепрограммировать.
Поэтому, когда вы обновляете свою программу, она будет загружена в вашу систему, а затем записана на SD-карту, SSD или жесткий диск, что бы у вас ни было.
Когда он работает, на самом деле нет никакой разницы между микроконтроллером и микропроцессором. Просто в последнем случае оперативной памяти намного больше (возможно, несколько сотен МБ), чем в микроконтроллере. Процессору все равно, не хватает ли ему оперативной памяти или флэш-памяти. Одна вещь, на которую вы должны обратить внимание: ошибочная программа может стереть себя в ОЗУ, тогда как во флэш-памяти этого не может произойти.
Микропроцессоры почти всегда будут иметь внешний кварц в качестве источника тактового сигнала. Процессор может использовать PLL (петля фазовой автоподстройки частоты) для умножения частоты кристалла до гораздо более высокого значения (несколько сотен МГц или даже ГГц). Это будет частью кода инициализации.
Доступ к периферийным устройствам практически такой же, как и к микроконтроллеру; они просто внешние по отношению к чипу, а не внутри него, поэтому доступ не такой быстрый. (Единственными «периферийными устройствами», как правило, на чипе x86 являются таймеры, DMA и контроллер прерываний.) Процессор взаимодействует с периферийными устройствами через порты ввода-вывода.
На мой взгляд, один из лучших методов различения MPU и MCU заключается в том, включает ли ЦП модуль управления памятью (MMU), то есть аппаратный механизм для отображения несмежных блоков памяти в виртуальное непрерывное пространство на муха, при этом отображение зависит от того, какой процесс выполняется.
Это позволяет отдельным процессам использовать любую память, которую они «видят», и защищает любую память, которую они «не видят», от случайного доступа.
CPU с MMU — это MPU; ЦП без MMU является MCU.
Игнасио Васкес-Абрамс
Полиномиальный
Игнасио Васкес-Абрамс
pjc50
Спехро Пефхани
Полиномиальный
Рикардо