ARM Cortex-M, RISC-V и AVR: архитектуры МК
Тема дорожной карты · Embedded / Системный программист
Три семейства ядер покрывают почти весь рынок микроконтроллеров. ARM Cortex-M стоит в STM32, NXP LPC и Kinetis, Nordic nRF, Raspberry Pi RP2040. RISC-V — открытая архитектура, которую выбирают Espressif для ESP32-C3, GigaDevice, WCH и растущее число российских разработчиков кристаллов. AVR — классика 8-битного мира, сердце Arduino Uno. Разница между ними определяет модель прерываний, набор инструкций, работу с памятью и доступный тулчейн, поэтому понимать её нужно раньше, чем выбирать конкретную плату.
Как это работает
Cortex-M — это 32-битные ядра с набором инструкций Thumb-2 и линейкой от M0+ (минимум транзисторов, два конвейера) до M7 (суперскаляр, FPU с двойной точностью, кэши) и M33 с TrustZone. Общий для всех контроллер прерываний NVIC поддерживает вложенные прерывания с приоритетами, а системный таймер SysTick и регистры отладки CoreSight входят в спецификацию ядра, поэтому одна и та же RTOS переносится между вендорами почти без правок. Стандарт CMSIS задаёт единые имена регистров и заголовки.
RISC-V определяет базовый набор RV32I плюс расширения: M для умножения, C для сжатых 16-битных инструкций, F для плавающей точки. Контроллер прерываний не зафиксирован: одни чипы используют простой CLINT, другие — CLIC с приоритетами, аналогичный NVIC. Открытость спецификации означает свободу для производителей кристаллов, но и разнообразие в деталях загрузки и обработки исключений, которые приходится читать в документации на каждый чип.
AVR — 8-битное RISC-ядро с гарвардской архитектурой: код во флеше и данные в ОЗУ адресуются по-разному, и для чтения таблиц из флеша нужны специальные функции pgm_read_byte. Прерывания имеют один уровень, регистров общего назначения 32, а любая 16- или 32-битная операция занимает несколько инструкций и может быть прервана посередине.
Когда применять
Cortex-M — выбор по умолчанию для коммерческих изделий: широчайшая экосистема, зрелые отладчики, сертифицированные компиляторы, множество совместимых семейств. RISC-V оправдан там, где важна независимость от лицензий ARM, низкая цена или отечественная элементная база; ESP32-C3 и CH32V — практичный способ начать. AVR имеет смысл для простейших задач и обучения: пять регистров конфигурации, прозрачный даташит и мгновенная обратная связь, но для новых серийных продуктов его чаще заменяют 32-битными ядрами по той же цене.
Типичные ошибки
Разработчики, пришедшие с Cortex-M на RISC-V, ожидают вложенных прерываний с приоритетами и получают потерю событий, если чип поддерживает только CLINT. На AVR частая ошибка — чтение 16-битной переменной, разделяемой с прерыванием, без блокировки: старший и младший байты читаются по отдельности. На Cortex-M новички забывают, что приоритет с меньшим числом выше, и вызывают функции FreeRTOS из прерывания с «слишком важным» приоритетом. Ещё одна ловушка — считать, что Thumb-код и ARM-код взаимозаменяемы: на Cortex-M нет режима ARM, и адрес функции обязан иметь младший бит, равный единице. Наконец, выбор архитектуры по цене кристалла без учёта стоимости отладчика, RTOS и сертификации регулярно приводит к пересмотру решения через полгода.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- interrupt /ˌɪntəˈrʌpt/ ударение на последний слог разбор: Фразы митингов: перебить вежливо, уточнить, подвести итог
- register /ˈrɛdʒɪstər/ стилистический регистр разбор: Письменная коммуникация
- compatible /kəmˈpætəbl/ ударение на второй слог, «кэмпЭтэбл» разбор: Читаем changelog: breaking change, deprecated, hotfix, backport
- variable /ˈvɛəriəbl/ ударение на первый слог, а не «вэриЭйбл» разбор: Как читать код вслух
- component /kəmˈpoʊnənt/ ударение на второй слог разбор: Немые буквы и ударение: cache, queue, suite, height
- interface /ˈɪntərfeɪs/ ударение на первый слог разбор: Немые буквы и ударение: cache, queue, suite, height
- architecture /ˈɑːrkɪtɛktʃər/ ударение на первый слог, «Аркитекчер» разбор: Письменная коммуникация