В предыдущих частях статьи подробно рассматривались основные составные части микроконтроллеров с архитектурой Cortex-M3 и их особенности, позволяющие использовать данные микроконтроллеры в широчайшем спектре применений от простейших и самых дешевых до сложных систем обработки информации в режиме реального времени, требующих высокой производительности. Наибольшим преимуществом микроконтроллеров с архитектурой Cortex-M3 на чрезвычайно конкурентном рынке микроконтроллеров является их высочайшая способность к адаптации к требованиям рынка при сохранении неизменно низкой стоимости решения.
В данной части статьи мы рассмотрим одну из самых важных составляющих любой микроконтроллерной системы, а именно, память и способы ее использования, реализованные в архитектуре Cortex-M3.
Поскольку стоимость памяти, реализованной на кристалле, составляет очень существенную часть стоимости всего микроконтроллера (по некоторым данным до 30—40 %), то вполне естественно было бы обратить самое пристальное внимание на способы ее экономичного использования. Именно эту цель преследовали разработчики компании ARM, когда внедряли систему команд Thumb-2 в архитектуру CortexM3 совместно с оригинальной шиной для повышения гибкости использования памяти путем повышения плотности кода и введением команд для работы с битами и битовыми полями.
Как уже говорилось в предыдущих частях статьи, система команд Thumb-2 является смесью оригинальных команд системы Thumb и новых 32-разрядных команд, подобным командам системы ARM, призванных обеспечить более высокую производительность. 16-разрядные команды выравниваются в памяти и вычитываются по две за один такт, в то время как 32-разрядные команды вычитываются целиком за один такт в случае, если они выровнены по границе слова. В противном случае, если они выровнены посередине слова, они вычитываются за максимальное время, равное двум тактам. Данная система хранения данных обеспечивает более гибкое использование памяти при существенно меньших задержках, чем у оригинальных ARM микроконтроллеров с архитектурой ARM7.
Встроенная флэш-память программ уже давно стала стандартом де-факто в микроконтроллерах. Однако, с ростом максимальных тактовых частот ядра, наблюдается диссонанс между ядром и флэш-памятью именно в области максимальных тактовых частот. Дело в том, что физические свойства технологий производства флэш-памяти не позволяют ей оперировать на частотах более 30..40 МГц и поэтому производители микроконтроллеров идут на некоторые ухищрения, которые позволяют пусть не полностью, но хотя бы частично снизить потери производительности системы изза несовпадения максимальных тактовых частот ядра и флэш-памяти.
Такую задачу перед собой ставили и разработчики архитектуры Cortex-M3. Для этого они разработали как новый интерфейс с памятью, так и новую систему команд, позволяющие вычитывать более чем одно 16-разрядное значение из памяти за один такт. Например, команды MOVW и MOVT работают с 16-разрядными константами более эффективно, так как данные доступны одновременно с командой, а не вычитываются последовательно, как в случае с традиционным пулом литералов.
Аналогичная задача стоит и перед оптимизацией работы с ОЗУ. Многие архитектуры используют массивы флагов в ОЗУ, организованные в байты или слова флагов. Классический способ работы с ними — вычитывание байта флагов, сложение этого байта с маской или изменение состояния одного из битов, запись байта по его адресу. В архитектуре Cortex-M3 работа с ОЗУ организована несколько проще и быстрее. Адресное пространство вплоть до 1 Мбайт отображается в 32 Мбайт адресов битов. В случае, если изменяется бит в области с битовой адресацией, это изменение автоматически отображается по соответствующему адресу в области с байтовой адресацией. Такая схема работы существенно упрощает и ускоряет работу в случае многочисленных операций с битами.
Также применена новая технология расположения данных в ОЗУ, которая базируется на принципе хранения невыровненных данных, что очень существенно уменьшает требуемый объем ОЗУ для работы приложения. Проблема с неэффективным использованием ОЗУ связана с тем, что в программе пользователя часто используются разные типы данных (например long, integer, char), имеющие разные разрядности. На рис. 1 визуально показана разница между традиционным способом хранения данных с разными разрядностями и способом, используемым в архитектуре Cortex-M3.
Рис.1 Иллюстрация эффективности способов хранения выровненных и невыровненных данных
Отдельно стоит, хотя бы кратко, упомянуть еще раз о полностью переработанной системе обработки прерываний. В обычных микроконтроллерах ядро, в ущерб производительности всей системы, вынуждено самостоятельно поддерживать обработку прерываний и выполнять все функции, связанные с этим процессом. В микроконтроллерах с архитектурой Cortex-M3 ситуация совершенно иная: контроллер прерываний выделен в отдельный аппаратно реализованный узел, который обрабатывает прерывания с исключительно малыми и при этом фиксированными временами задержки, снимая максимум нагрузки с ядра. За счет этого время входа в прерывание по сравнению с классическими ARM контроллерами уменьшилось на очень существенные и приятные 70% за счет независимого аппаратного сохранения и восстановления необходимых регистров и очень грамотной обработки ситуаций с последовательно сгенерированными прерываниями.
Очень важной темой с бурным развитием разработки и производства портативных устройств стала экономичность микроконтроллеров. Микроконтроллеры с архитектурой ARM всегда «славились» своей относительной «прожорливостью» и с этим до сих пор приходится мириться. Однако, поскольку законы физики никто не отменял, в частности пропорциональную зависимость потребляемой мощности от тактовой частоты, разработчикам микроконтроллеров пришлось потрудиться для создания развитой системы управления тактированием как ядра, так и периферии. В микроконтроллерах с архитектурой Cortex-M3 практически все периферийные модули, не принимающие участия в реализации конкретной программы, могут быть индивидуально отключены от источника тактирования. Кроме этого, в микроконтроллеры на базе архитектуры Cortex-M3 добавлено несколько дополнительных режимов «сна», например, WFI (Waut For Interrupt) или WFE (Wait For Event), которые переводят микроконтроллер в режим глубокого «сна» до возникновения прерывания или события соответственно.
Но не только благодаря множеству энергосберегающих режимов можно достичь экономии потребляемой мощности. Ведь кроме высокоэкономичного режима «сна» есть еще и активная фаза работы микроконтроллера, во время которой он потребляет максимум энергии в соответствии с вполне определенными законами физики. Здесь может помочь, как это парадоксально ни звучит, только повышение производительности микроконтроллера. Но ни в коем случае не за счет тактовой частоты. За счет применения новой системы команд и повышения эффективности работы памяти, микроконтроллеры на базе архитектуры Cortex-M3 показывают впечатляющий прирост производительности, равный 1.25 DMIPS/МГц (в табл. 1 приведены сравнительные данные по производительности, приведенной к потреблению энергии, для различных серий ARM микроконтроллеров).
Таблица 1. Сравнение производительности, приведенной к потреблению энергии,
для различных серий ARM микроконтроллеров
Параметр | CM3Core | Cortex-M3 | ARM7TDMI-S (ARM) | ARM7TDMI-S (Thumb) |
мВт/МГц | 0.19 | 0.24 | 0.28 | 0.28 |
DMIPS/МГц | 1.25 | 1.25 | 0.93 | 0.74 |
DMIPS/мВт | 6.57 | 5.21 | 3.32 | 2.64 |
И эта производительность позволяет либо быстрее выполнить поставленную задачу при той же тактовой частоте и таким образом уменьшить длительность активной фазы, либо выполнить ту же задачу за то же время, но с значительно меньшей тактовой частотой. Оба эти способа позволяют существенно уменьшить общее потребление энергии, а значит, улучшить эксплуатационные параметры конкретного устройства.
Микроконтроллеры с архитектурой Cortex-M3 стали значительным явлением на рынке ARM микроконтроллеров. Ядро микроконтроллера, построенное на базе Гарвардской архитектуры с использованием 3-уровневого конвейера, использует много новых решений, таких как предсказание переходов в командах ветвления, однотактное умножение и деление и многих других, показывает впечатляющий уровень производительности, равный 1.25 DMIPS/МГц. Комбинация системы команд Thumb-2 и уникальных возможностей по работе с невыровненными данными и битами позволяет смело говорить о том, что микроконтроллеры с архитектурой Cortex-M3 устанавливают стандарты производительности 32-разрядных архитектур наравне со стоимостью, сравнимой со стоимостью 8-разрядных микроконтроллеров.
Гибкое управление интегрированными периферийными компонентами, быстрый процесс создания и отладки кода позволяют свести время разработки нового устройства до минимума. Для ресурсоемких и высоконадежных приложений незаменимым будет аппаратный контроллер вложенных прерываний, который обеспечивает чрезвычайно малое, а, главное, фиксированное время входа в прерывание. При этом обеспечивается быстрая обработка последовательных и вложенных прерываний, которых может быть до 240. Для ответственных применений будет незаменим модуль распределения приоритетов и защиты памяти от несанкционированного доступа (MPU — Memory Protection Unit). И еще много приятных «мелочей», которые в совокупности дают совсем не мелочный результат, позволяют смело утверждать, что архитектуру Cortex-M3 в микроконтроллерах общего применения ждет очень большое и светлое будущее.
Немаловажной составляющей общей привлекательности архитектуры Cortex-M3 является широкая ее поддержка ведущими производителями программного обеспечения. В частности, поддержку этой архитектуры ввели в свои продукты многие всемирно известные производители. В табл. 2 перечислены основные производители программных и программно-аппаратных комплексов для создания и отладки программного кода для микроконтроллеров с архитектурой Cortex-M3.
Таблица 2. Некоторые производители программных продуктов для ARM MCU Cortex-M3
Производитель | Продукты |
Keil Software | Полный комплекс разработки и отладки программного кода, а также аппаратные средства программирования и отладки |
IAR Systems | Полный программный комплекс разработки и отладки программного кода |
CodeSousery | Полнофункциональный комплекс разработки и отладки GNU G++ |
Rowley Associates | Полнофункциональный пакет разработки и отладки CrossWorks |
FreeRTOS.org | Встраиваемые операционные системы реального времени RTOS |
Pumpkin | RTOS |
Express Logic | RTOS, TCP/IP стеки, файловые системы, USB стеки |
Micrium | RTOS, TCP/IP стеки, файловые системы, USB стеки, библиотеки для работы с протоколами CAN и Modbus |
CMX Systems | RTOS, TCP/IP стеки, файловые системы, USB стеки |
SEGGER Microcontroller Systeme | RTOS, GUI, файловые системы, USB стеки, JTAG эмуляторы |
Interniche Technogies | RTOS, сетевые стеки и файловые системы |
Фактическим и единоличным лидером в производстве микроконтроллеров на базе архитектуры Cortex-M3 на сегодня является компания Luminary Micro Inc., выпустившая уже более 100 типов микроконтроллеров на базе архитектуры Cortex-M3. Среди них есть как простейшие, с минимальным объемом флэш-памяти и ОЗУ, с тактовой частотой 20 МГц, с минимальным набором периферии, в корпусе SOIC28 и с минимальной ценой, так и сложные, с максимальным объемом флэш-памяти 256 кбайт и ОЗУ 64 кбайт, со встроенными контроллерами Ethernet+PHY, CAN (в том числе и микроконтроллеры, содержащие оба эти контроллера на кристалле), декодерами сигналов квадратурных энкодеров, многоканальных ШИМ и прочими «вкусностями».