Если кто-то использовал PIC uC, насколько отличается переход на использование другого uC, например, Arduino или ARM?

Кажется, что существует довольно много поставщиков, производящих UC, и некоторые UC более популярны, чем другие говорят, например, Arduino и PIC из-за их низкой стоимости и множества функций, а ARM из-за его высокой производительности. Я хочу знать, насколько отличается переход на ARM uC после того, как вы использовали PIC и поняли его периферийные устройства и язык/компилятор (например, C++ с CCS C Compiler).

Есть ли у ARM, Arduino или других UC от TI и других, возможно, менее известных имен, большая разница в том, что они могут делать, по сравнению с PIC?

Позвольте мне сделать вопрос более простым. Предположим, я сделал проект с использованием PIC, в котором используются его таймер, АЦП, компаратор, SPI и периферийные устройства I2C. Теперь предположим, что я хочу полностью перейти на новый микроконтроллер, скажем, на ARM или Arduino. Я понимаю, что набор инструментов (IDE), используемый с этими другими микроконтроллерами для компиляции кода, должен быть другим, но что нужно изучить, прежде чем можно будет перенести такой проект на другие микроконтроллеры? Я не уверен, есть ли у микроконтроллеров ARM и Arduino такие периферийные устройства или у них есть больше периферийных устройств, которых нет в PIC. Я где-то читал, что у ARM также есть какой-то графический движок, это выглядело как странная блок-схема процессора.

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

Несправедливо сравнивать микроконтроллер, такой как PIC или ARM, с Arduino. Arduino — это целая экосистема, включающая аппаратное обеспечение, программное обеспечение (библиотеки) и IDE. Лучше было бы сравнить его с AVR, голым микроконтроллером, который используется на Arduino. Также вы должны сравнивать с микроконтроллером ARM, а не с ARM SoC (системой на кристалле). SoC действительно реализует такие вещи, как графический процессор, на самом деле это целый компьютер, часто работающий под управлением Linux.
Поначалу меня немного беспокоил переход с PIC на ARM, потому что я был близко знаком с архитектурой PIC и соглашением об именах. Как только я погрузился в ARM, я обнаружил, что они действительно вполне сопоставимы, и теперь мне очень комфортно с обоими. Разница становится прозрачной очень быстро, ИМХО.

Ответы (3)

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

Вероятно, самые большие различия заключаются просто в особенностях инструментов. Если вы привыкли к простоте наличия предварительно запрограммированных загрузчиков в ваших AVR (вплоть до предварительно запрограммированных загрузчиков USB в частях -U), у вас могут возникнуть проблемы с покупкой совместимого JTAG-программатора для определенных чипов ARM. Если вы привыкли к богатым функциям отладки микросхем с поддержкой JTAG, возвращение к встроенной отладке в недорогих PIC и AVR может вызвать культурный шок. Но это то, к чему вы привыкаете после некоторого использования цепочки инструментов. Кроме того, некоторые чипы требуют значительных затрат на использование их инструментов, например, Freescale и Renesas.

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

Дополнение: это на самом деле не применимо, когда вы переходите на процессоры не в реальном времени, такие как ARM серии A, x86 и Cell. Их очень сложно запрограммировать на низком уровне, инструменты дороги, а чипы трудно достать и внедрить.

Что здесь означает процессор не в реальном времени? Я знаю об ОС жесткого реального времени, мягкого реального времени и не реального времени, но не процессорах.
Это процессор, который используется исключительно с ОС не реального времени. Процессоры реального времени, напротив, часто используются вообще без операционной системы или, возможно, с операционной системой реального времени на очень «голом железе».

Сначала почистим несколько терминов.

Arduino — это линейка плат для разработки, в основном основанная на микроконтроллере Atmel AVR (обычно ATMega328). Он не производит микроконтроллер. Считайте, что Arduino похож на Dell, они берут разные части и производят полноценный продукт. Сопоставимые платы разработки PIC - это Parallax Basic Stamps и даже PICAxe (микросхемы PIC с проприетарным базовым эмулятором).

ARM — это тип архитектуры, а не конкретная линейка микроконтроллеров. Это как процессоры x86. А микроконтроллеры на базе ARM обычно 32-разрядные или выше, и их едва ли можно назвать микроконтроллером, так же как и микросхему на базе x86. С ARM вы получаете доступ к микропроцессорам, SBC и полномасштабным вычислениям.

Чипы ARM производят несколько компаний, в том числе Atmel, TI, NXP (Phillips), Freescale (Motorola), Broadcom, AMD, Samsung и т. д.

У Microchip нет чипов на базе ARM, но есть PIC32 (на базе MIPS), которые технически конкурируют с ARM, но не на самом деле. Трудно когда-либо найти потребительский продукт с одним внутри.

Когда вы говорите, что привыкли к PIC, большинство людей решат, что вы имеете в виду PIC16/18 и меньше. Сопоставимыми (и известными среди потребителей / любителей) популярными чипами для PIC будут различные линейки MSP430 от TI, линейки ATtiny / ATMega от Atmel и микропроцессоры, совместимые с Intel 8051.

В качестве аналогии: все это игрушечные автомобили по сравнению с полноразмерными спортивными автомобилями ARM.

(небольшое дополнение) PIC32 основан на ядре MIPS от компании MIPS, которую технически можно назвать конкурентом ARM.
Есть чипы ARM, которые определенно являются микроконтроллерами. Возьмем младшую модель LPC1114: 4 КБ ОЗУ, 32 КБ флэш-памяти, без внешней шины адреса/данных.

Большинство различий между PIC и ARM представляют собой неудобства, с которыми ARM справляется, но есть несколько исключений.

На PIC 18xx можно безопасно читать и записывать биты LATxx и TRISxx в основном коде, а также записывать другие биты того же порта в прерывании. На процессорах ARM это вообще небезопасно. Утверждение типа: LATC |= 2;будет переведено как одна инструкция. Типичный прямой эквивалент ARM PTC->PODR |= 2;стал бы последовательностью инструкций, эквивалентной uint32_t temp = PTC->PDOR; temp |= 2; PTC->PDOR = temp;. Если прерывание, которое происходит между первым и третьим оператором этой последовательности, модифицирует выходной регистр PORTC, такое изменение будет отменено третьей инструкцией последовательности выше.

Чтобы смягчить эту проблему, большинство вариантов ARM имеют специальные адреса «бит порта установлен» и «бит порта очищен». Например, можно использовать PTC->PSOR=2;, чтобы установить один бит PORTC в высокий уровень, не затрагивая ничего другого, или PTC->PCOR=2;`, чтобы установить один бит в низкий уровень. Этот подход будет безопасным, даже если процедура обработки прерывания попытается записать какой-либо другой бит в порт. К сожалению, хотя большинство частей обеспечивают такую ​​логику для основного регистра вывода данных, они непоследовательны в своей поддержке установки или очистки отдельных битов других регистров ввода-вывода.

Еще одна деталь, на которую следует обратить внимание, — это сон. Спящий режим на PIC довольно прост; в то время как ядро ​​ARM поддерживает спящий режим стандартным образом среди всех частей ARM, большинство поставщиков предлагают дополнительные режимы, которые обеспечивают существенную дополнительную экономию тока, но не все они делают это одинаково. Кроме того, хотя PIC обычно можно разбудить с помощью любого из его входов асинхронных прерываний, многие устройства ARM, по-видимому, используют отдельное оборудование для обработки прерываний, а не для пробуждения из режимов сна с низким энергопотреблением. Ожидайте, что режим сна будет намного сложнее с ARM, чем с PIC.