Published using Google Docs
Приемущества перехода на 32-разрядную архитектуру микроконтроллеров
Updated automatically every 5 minutes

lab.rabota-ka.ru/article/6

В последние годы наблюдается активный переход разработчиков встраиваемых систем на использование 32-разрядной архитектуры. В статье рассматриваются причины такого перехода и преимущества, которые при этом получают разработчики. Анализируются особенности 32-разрядных микроконтроллеров и, в частности, микроконтроллеров на базе ядра Cortex-M, в сравнении с 8- и 16-разрядными процессорами. Обсуждаются проблемы портирования программного обеспечения на 32-разрядные микроконтроллеры.

Самой важной причиной движения в сторону 32-разрядных микроконтроллеров (МК) является усложнение встраиваемых устройств под влиянием требований рынка. Так как встраиваемые продукты становятся все более функционально насыщенными, 8- и 16-разрядные МК не позволяют обеспечить требуемую производительность. Даже если 8- и 16-разрядные МК отвечают требованиям сегодняшних проектов, возможности дальнейшей модернизации таких устройств и повторного использования программного кода в будущих разработках уменьшаются.

Следующей причиной является то, что разработчики встраиваемых систем начинают все более ясно осознавать преимущества перехода на 32-разрядные МК, которые обеспечивают не только более чем десятикратное превосходство в производительности, но также позволяют снизить энергопотребление, уменьшить размер программы, ускорить разработку программного обеспечения и многократно его использовать.

Еще одной причиной является возможность широкого выбора и доступность МК на базе ARM. В настоящее время все больше поставщиков МК предлагают приборы на базе ARM-процессора. Эти продукты обеспечивают широкий выбор периферии, производительности, объема памяти, типов корпусов, стоимости и т.д.

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

Выбор МК на базе ARM-ядра является также наилучшей инвестицией по сравнению с другими архитектурами. Программный код, разработанный для ARM-устройств, можно использовать в течение ряда лет для микроконтроллеров, предлагаемых большим числом поставщиков. Так как ARM-архитектура распространяется все шире, то становится все проще найти инженера-программиста с опытом разработки ARM-устройств, чем других архитектур.

Разрядность команд процессора

Многие полагают, что 8-разрядные МК используют 8-битовые команды, а 32-разрядные — 32-битовые команды. На самом деле, многие команды 8-разрядных МК имеют разрядность 16, 24 бит или другую, например, микроконтроллер PIC18 имеет длину команд 16 бит.

Даже для устаревшей архитектуры 8051 наряду с командами длиной 1 байт, существую команды длиной 2 или 3 байта. То же самое относится и к 16-разрядной архитектуре: некоторые команды для микроконтроллера MSP430 имеют длину 6 байт (или даже 8 байт для MSP430X).

ARM-процессоры Cortex-M3 и Cortex-M0 основаны на технологии Thumb-2, которая обеспечивает превосходную плотность кода. Данная технология поддерживает набор команд Thumb, который включает 16-битные команды, а также 32-битные команды, которые обладают функциональностью расширенной 16-битной версии команд. В большинстве случаев компилятор C будет использовать 16-битную версию команды, несмотря на то, что операция может выполняться только с помощью 32-битной версии. Рисунок 1 иллюстрирует разрядность команд различных процессоров.

Рис. 1. Длина команды в различных процессорах

В программе, скомпилированной для процессоров Cortex-M, число 32-битных команд занимает лишь небольшую часть от общего количества команд. Например, 32-битные команды в программе теста Dhrystone, скомпилированной для Cortex-M3, занимают только 15,8% от всего числа команд (средняя длина команды равна 18,53 бит).

Для Cortex-M0 доля 32-битных команд еще меньше — 5,4% (средняя длина команды равна 16,9 бит).

Эффективность набора команд

Эффективность использования набора команд Thumb в ARM-процессоре Cortex-M также весьма высока. Например, множественные команды загрузки и хранения, а также команды введения в стек (push) и извлечения из стека (pop) в микроконтроллерах на базе ARM позволяют выполнять несколько пересылок данных с помощью одной команды.

Кроме того, мощные режимы адресации позволяют упростить доступ к памяти в ARM-микроконтроллерах. Например, доступ к памяти может быть осуществлен с помощью таких режимов адресации в одной команде, как регистровое смещение, прямое смещение, относительная адресация от PC или адресация по указателю стека (эффективная для локальных переменных). Доступны также дополнительные функции, например, автоматическая настройка указателя памяти.

Все ARM-процессоры весьма эффективны при манипуляции с 8- и 16-битными данными. В распоряжении имеется весь набор компактных команд доступа к памяти для 8-, 16- и 32-битных данных со знаком и без знака. Кроме того, имеется ряд команд, специально предназначенных для преобразования типов данных. В общем, обработка 8- и 16-битных данных в ARM-процессорах также проста и эффективна, как и 32-битных данных.

Микроконтроллеры на базе ядра Cortex-M предоставляют широкие возможности для условного исполнения команд. Помимо полного набора условий ветвления для всех типов данных со знаком и без знака, которые доступны на всех ARM-микроконтроллерах, процессоры Cortex-M3 также обеспечивают условное исполнение команд и выполнение совмещенных команд сравнения и ветвления.

Как Cortex-M0, так и Cortex-M3 поддерживает 32-битные однотактные множественные операции. Кроме того, микроконтроллеры на базе Cortex-M3 также поддерживают операции целочисленного деления, операции с насыщением, операции 32- и 64-битного умножения и аккумулирования (MAC), а также ряд операций над битовым полем.

Мифы 8-разрядных приложений

Многие разработчики встраиваемых систем ошибочно полагают, что их приложение выполняет обработку только 8-битных данных, поэтому нет необходимости переходить на 32-разрядные процессоры. Однако, взглянув в руководство для компилятора C, можно обнаружить, что в действительности в 8-разрядных МК простые целочисленные данные являются 16-битными. Поэтому каждый раз, когда выполняется целочисленная операция или при обращении к библиотеке функций C, которая требует выполнения целочисленной операции, выполняется обработка 16-битных данных. 8-разрядное процессорное ядро вынуждено выполнять последовательность команд и использовать дополнительные такты для обеспечения требуемой производительности.

Та же ситуация применима и к указателям. В большинстве 8- и 16-разрядных МК необходимо, по крайней мере, 16 бит для указателя адреса. Это число может увеличиться при использовании групповых указателей памяти в 8051-процессоре или использовании переключения банков памяти или подобные ему методы, чтобы преодолеть барьер памяти объемом 64 Кбайт. В результате, в 8-разрядных системах обработка указателей памяти может быть весьма неэффективна.

Так как каждая целочисленная переменная в регистровом банке занимает несколько регистров, использование 8-разрядных МК также приводит к увеличению числа циклов доступа к памяти, т.е. использованию дополнительных операций чтения/записи памяти и операций со стеком.

Как это выглядит при выполнении какого-либо определенного теста? На-

пример, результаты компилирования программы теста Dhrystone для различных архитектур с оптимизацией размера кода представлены в таблице 1.

Таблица 1. Результаты компилирования программы Dhrystone на различных процессорах

Микроконтроллер

C8051F320 SiliconLabs

Cortex-M0

Cortex-M3

Программный инструмент

Keil µVision 3.8PK51 8.18

RVDS 4.0-SP2

RVDS 4.0-SP2

Объем выходного двоичного кода, число байт

3186

912

900

Большинство приложений выигрывают при переходе на микроконтроллеры на базе Cortex-M благодаря уменьшению объема кода и, как следствие, снижению стоимости устройства из-за меньшей требуемой памяти. Уменьшенный размер кода ARM-микроконтроллеров влияет на производительность, а также потребляемую мощность и стоимость.

Производительность и потребляемая мощность

Одна из причин, по которой разработчики переходят с 8- и 16-разрядных МК на 32-разрядные, заключается в необходимости улучшения производительности. Менее очевидным является тот факт, что переход на применение ARM-микроконтроллеров обеспечивает также снижение энергопотребления и увеличение срока службы батарей.

Сравним производительность МК различных архитектур. Распространенным способом сравнения производительности процессоров является использование теста Dhrystone. Он является бесплатным, кроме того, простым и достаточно компактным для использования в микроконтроллерах с весьма небольшим объемом памяти (хотя это и не идеальный тестовый пакет).

Производительность первых процессоров 8051 была всего 0,0094 DMIPS/МГц. Новые модификации процессора 8051 имеют несколько лучшие показатели. Например, процессор Maxim 80C310 имеет производительность 0,027 DMIPS/МГц, а самые быстрые микропроцессоры 8051 — 0,1 DMIPS/МГц. Это все же намного меньше производительности микроконтроллеров на базе ARM Cortex-M: для процессора Cortex-M3 этот показатель равен 1,25 DMIPS/МГц, а для Cortex-M0 — 0,9 DMIPS/МГц.

Производительность микроконтроллера PIC18 равна 0,02 DMIPS/МГц, т.е. меньше, чем у некоторых процессоров 8051. 16-разрядные процессоры Microchip также более чем наполовину уступают микроконтроллерам на базе ARM Cortex-M3.

Ограничения 8- и 16-разрядных МК

Проблемой, которая вызывает неэффективность многих 8- и 16-разрядных микроконтроллеров, является ограниченный набор команд и моделей программирования. Например, работа процессора 8051 в значительной степени основана на использовании аккумулятора (ACC) и указателя данных (DPTR) для передачи и обработки данных. В результате, появляется необходимость в использовании команд перемещения данных в/из ACC и DPTR, что приводит к увеличению размера кода и количества тактов исполнения команд.

Интерфейс памяти также ограничивает производительность 8- и 16-разрядных процессоров. Например, многие команды процессора 8051 имеют длину несколько байт. Так как интерфейс памяти программ является 8-разрядным, то для выборки таких команд нужно выполнить несколько циклов считывания.

Производительность 8- и 16-разрядных МК еще больше снижается, если требуется осуществить доступ к памяти, превышающей 64 Кбайт. Данная архитектура разработана для работы с 16-битными адресами (используются 16-битные счетчики программ, 16-битные указатели данных, а набор команд разработан для поддержки адресного пространства 64 Кбайт). Если требуется память более 64 Кбайт, то необходимы аппаратные и командные издержки для генерации дополнительных адресных бит.

Для типового процессора 8051, которому нужно осуществить доступ к памяти более 64 Кбайт, память разделяется на банки, и все коды переключения банков выполняются через фиксированный банк. В результате, увеличение размера кода и числа тактовых циклов может снизить эффективность использования памяти. Некоторые 16-разрядные МК избегают этого с помощью использования счетчика программ большей разрядности или сегментации памяти, но манипулирование большими значениями адресов также требует дополнительных ресурсов и, следовательно, снижает производительность, приводит к увеличению программного кода.

Мощность потребления МК

ARM-микроконтроллеры на базе ядра Cortex-M потребляют меньше энергии, чем многие 8- и 16-разрядные микроконтроллеры. В ARM-процессорах реализованы многие методы, позволяющие снизить потребляемую мощность. Например, процессоры Cortex-M0 и Cortex-M3 поддерживают различные дежурные режимы работы и функцию sleep-on-exit (которая позволяет процессору возвращаться в спящий режим сразу по завершении обработки прерывания).

Для того, чтобы понять, почему МК на базе Cortex-M могут снизить энергопотребление встраиваемой системы, рассмотрим структуру типичного МК. В современных микроконтроллерах процессорное ядро не занимает самую большую часть площади кристалла (см. рис. 2).

05012010_emeu_ne_crh_yiu3large.jpg

Рис. 2. Использование ARM-процессоров на базе Cortex-M позволяет уменьшить площадь кристалла

Как было сказано выше, плотность кода 8-разрядных микроконтроллеров весьма низка. В результате необходим блок флэш-памяти большего объема, что увеличивает общую потребляемую мощность. Высокая плотность кода ARM-микроконтроллеров позволяет использовать в них меньшие по размеру блоки флэш-памяти и снизить как потребляемую мощность, так и стоимость.

Эффективность доступа к памяти

Использование 32-разрядной шины снижает энергопотребление за счет уменьшения числа требуемых циклов обращения к памяти. Для копирования того же объема данных в память 8-разрядный МК требует в четыре раза больше циклов обращения к памяти при большем числе вызовов команд, необходимых для этой операции. Следовательно, даже при одном и том же объеме памяти, 8-разрядный МК потребляет больше энергии для выполнения той же задачи.

Выборка команд в МК на базе Cortex-M также намного более эффективна, чем у 8- и 16-разрядных МК, так как каждая выборка команды является 32-разрядной, что позволяет выбирать до двух 16-разрядных команд Thumb за один такт и обеспечивает большую полосу пропускания шины при доступе к данным. При одинаковой длине последовательности команд для 8-разрядного МК необходимы четыре цикла обращения к памяти, а для 16-разрядного — в два раза больше вызовов команд. В результате, 8- и 16-разрядные МК потребляют намного больше энергии, чем микроконтроллеры на базе ARM.

Снижение потребляемой мощности за счет уменьшения рабочей частоты

Высокая производительность 32-разрядных МК позволяет снизить потребляемую мощность за счет работы приложения на более низкой тактовой частоте. Например, приложение с рабочей частотой 30 МГц на процессоре 8051 может быть запущено на ARM-микроконтроллере Cortex-M3 на тактовой частоте 3 МГц, обеспечив при этом тот же уровень производительности.

Снижение потребляемой мощности за счет уменьшения активных циклов

Используя микроконтроллер на базе ARM в дежурном режиме, можно еще больше снизить энергопотребление после завершения выполнения задания. Микроконтроллеры на базе Cortex-M имеют намного более высокую производительность по сравнению с 8- и 16-разрядными МК, поэтому у них имеется возможность завершить задачу и перейти в дежурный режим намного быстрее, что снижает общее число активных циклов в системе (см. рис. 3).

05012010_emeu_ne_crh_yiu4large.jpg

Разработка программного обеспечения

Разработка программного обеспечения для МК на базе Cortex-M может быть выполнена значительно проще, чем для 8-разрядных устройств. Процессоры на базе Cortex-M полностью программируются на C, а также содержат различные усовершенствованные функции отладки, помогающие обнаружить в программе какие-либо проблемы. Кроме того, в интернете существует огромное число примеров и руководств, а также дополнительных ресурсов, включая наборы разработчиков.

Портирование программного обеспечения с 8- и 16-разрядных МК на ARM-микроконтроллеры

МК на базе Cortex-M имеют, как правило, большее количество регистров в периферии, чем 8-разрядные МК. Периферийные устройства МК на базе ARM обычно содержат больше встроенных функций и, следовательно, в них доступно большее количество программируемых регистров. Для упрощения программирования поставщики МК на базе ARM предлагают библиотеки драйверов устройств, что позволяет выполнять установку периферийных устройств с помощью всего нескольких вызовов функций.

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

Важно корректно использовать типы данных для конкретной архитектуры процессора: они оказывают существенно влияние на размер кода и производительность системы. Данные разных типов для микроконтроллеров на базе ARM и 8- и 16-разрядных микроконтроллеров отличаются по длине (см. табл. 2).

Таблица 2. Типы данных для разных архитектур процессоров

Тип данных

Длина данных, бит

8-/16-разрядные

микроконтроллеры

Микроконтроллеры на базе ARM

Целочисленный (integer)

16

32 бита (или short int для 16)

Перечислимый (enum)

8/16

8/16/32

Указатель (pointer)

16 и более

32

С плавающей запятой двойной точности

(double precision floating point)

32 (одинарная точность)

64 (или float для 32)

Если приложение зависит от разрядности данных, например, при переполнении целочисленных данных за границу 16 бит, то необходима модификация кода для оптимизации его работы на ARM-микроконтроллерах.

Различие в разрядности данных оказывает влияние также и на размер массива данных. Например, массив целых чисел в ПЗУ для приложения на базе 8-разрядного МК можно определить, как

const int mydata = {1234, 5678,}.

Для систем на базе ARM-микроконтроллере для того, чтобы избежать увеличения объема ПЗУ данное выражение следует изменить на

const short int mydata = {1234, 5678,}.

Различия в командах с плавающей запятой могут также привести к незначительной разнице в результатах вычислений. Из-за ограниченной производительности 8- и 16-разрядных МК, в случае, когда используется двойная точность, данные обрабатываются с одинарной точностью (32 бита). В микроконтроллерах на базе ARM данные с двойной точностью имеют разрядность 64 бита, следовательно, для 32-битных данных (одинарная точность) следует использовать тип данных с плавающей запятой.

Для пользователей процессора Cortex-M3 доступны дополнительные функции отладки с помощью трассировки. Базовый процессор Cortex-M3 поддерживает выборочную трассировку данных, трассировку событий, трассировку исключений и текстовый выходной канал (инструментальную трассировку). Данные трассировки собираются с помощью однопроводного интерфейса Serial Wire Output, который использует разъем JTAG/Serial Wire при соединении платы с отладочным компьютером. Это обеспечивает сбор полезной информации о ходе выполнения программы с помощью недорогого аппаратного отладчика без необходимости использования дополнительных устройств для трассировки.

Многие МК на базе Cortex-M3 также поддерживают технологию Embedded Trace Macrocell (ETM), которая обеспечивает полную трассировку команд. Эта функция позволяет детально анализировать ход выполнения кода приложения, а также профилировать код. Из-за схожести архитектуры процессоров Cortex-M0 и Cortex-M3 имеется возможность разрабатывать и отлаживать приложения на Cortex-M3 с трассировкой команд, а затем портировать приложение на Cortex-M0 лишь с незначительной модификацией.

05012010_emeu_ne_crh_yiu6large.jpg

Совместимость программного обеспечения

МК на базе ядра Cortex-M обеспечивают высокий уровень совместимости программного обеспечения. Хотя существует множество поставщиков микроконтроллеров, каждый из которых предлагает собственные библиотеки драйверов устройств, а также много поставщиков компиляторов C, программное обеспечение можно легко портировать с помощью стандарта Cortex Microcontroller Software Interface Standard (CMSIS).

Стандартный интерфейс CMSIS включен в библиотеки драйверов устройств МК многих производителей. Он обеспечивает программный интерфейс к функциям ядра, регистрам ядра, а также предоставляет имена для стандартизированного системного обработчика исключений. Программное обеспечение, разработанное с помощью CMSIS, можно легко портировать между различными МК на базе Cortex-M. Это позволяет осуществлять поддержку встраиваемых ОС или микропрограммных средств, а также компиляторов различных поставщиков.

Затраты при переходе на новую архитектуру

Сегодня стоимость МК на базе ARM Cortex сопоставима с уровнем цен на 8- и 16-разрядные МК. Для микроконтроллеров на базе ARM Cortex-M доступны недорогие или даже бесплатные наборы разработчика. Переход с 8-разрядных МК на ARM-микроконтроллеры может обеспечить значительно более высокую производительность и позволит разработать сложное программное обеспечение с малыми затратами. Сравнение различных архитектур микроконтроллеров приведено в таблице 3.

Таблица 3. Сравнение различных архитектур микроконтроллеров

8051

Другие 8-разрядные архитектуры

16-разрядные архитектуры

Другие 32-разрядные архитектуры

Микроконтроллеры на базе ARM Cortex

Производительность

*

*

**

***

***

Малая мощность потребления

***

***

***

*

***

Плотность кода

*

*

**

*

***

Эффективность обращения к памяти более 64 Кбайт

(в собств. системе команд)

*

*

*

***

***

Векторные прерывания

***

***

***

**

***

Малое время ожидания прерываний

***

***

***

*

***

Низкая стоимость

***

***

***

*

***

Множественные источники

(непатентованная архитектура)

***

*

*

*

***

Выбор компиляторов

***

**

**

**

***

Совместимость программного обеспечения

***

**

**

**

***

В зависимости от требования приложения, можно всегда найти подходящий МК на базе ARM Cortex-M. В случае необходимости введения новых функций, повышения производительности и снижения энергопотребления устройства благодаря совместимости архитектуры процессоров Cortex-M можно без проблем перейти на другие ARM-микроконтроллеры.

05012010_emeu_ne_crh_yiu9.jpg

Статья представляет собой перевод

Литература

1. Joseph Yiu. What next for microcontrollers?//www.embedded.com