ЭФО предлагает со своего склада новую серию преобразователей интерфейсов USB UART компании FTDI FT232RNL-REEL
РадиоЛоцман - Все об электронике

Портирование проекта на 32-разрядную платформу без дополнительных затрат

Cypress Semiconductor PSoC 4000

Журнал РАДИОЛОЦМАН, декабрь 2014

Mark Ainsworth и Ranjith Mundoor, Cypress Semiconductor

Embedded

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

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

Одним из способов сохранения конкурентоспособности является постепенное улучшение вашего существующего проекта. С течением времени архитектурные ограничения могут сделать этот процесс более медленным и дорогим. В качестве альтернативы вы можете портировать ваш проект на 32-битную платформу. Это позволит улучшить ваш продукт в нескольких направлениях (Таблица 1).

 Таблица 1. Потенциальные улучшения продукта при переходе
на 32-разрядную платформу.
Особенность
Улучшение продукта
Более быстрое выполнение кода
Повышается скорость работы системы;
Уменьшается потребляемая мощность;
Возможно, снижается стоимость
Увеличенная плотность кода
Добавляются новые функции;
Используется меньше памяти;
Возможно, снижается стоимость
Расширенное адресное пространство
Добавляются новые функции
Доступ к лучшим компиляторам и иным
средствам разработки
Позволяет быстрее вывести улучшенный
продукт на рынок

Вам действительно нужно портировать свой проект?

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

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

Портирование проекта на 32-разрядную платформу без дополнительных затрат
Рисунок 1. Сравнение производительности микроконтроллеров
с помощью теста Benchmark Dhrystone.

Как показано на Рисунке 1, даже самые маленькие 32-разрядные процессоры могут делать все, и даже больше того, что могут 8-битные процессоры:

  • Более сложные расчеты. Сюда можно отнести цифровую обработку сигналов, обработку изображений и распознавание жестов
  • Сбор и анализ данных, а также поиск в базах данных
  • Многозадачность, поддерживаемая операционной системой реального времени

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

Энергопотребление:

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

Портирование проекта на 32-разрядную платформу без дополнительных затрат
Рисунок 2. Сравнение средней потребляемой мощности в условиях
решения ресурсоемких вычислительных задач.

Масштабируемость:

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

  • Набором команд. Более производительные члены семейства должны иметь больше команд или больше режимов работы для существующих команд, сохраняя при этом обратную совместимость с инструкциями младших членов семейства.
  • Дополнительными регистрами или бóльшим количеством битов в существующих регистрах.
  • Дополнительными функциями, например, средствами управления прерываниями и отладкой.
Портирование проекта на 32-разрядную платформу без дополнительных затрат
Рисунок 3. Семейство процессоров ARM Cortex-M.

Как показывает Рисунок 3, семейство процессоров ARM Cortex-M является хорошим примером масштабируемости.

Стоимость:

Одним из ощутимых препятствий на пути портирования было увеличение стоимости. Однако с развитием технологий утверждение, что 32-разрядные устройства дороже 8-разрядных, утрачивает силу. Сегодня становится доступным все большее количество недорогих 32-разрядных процессоров. Например, благодаря простой архитектуре и небольшой площади кристалла, процессор ARM Cortex-M0 выглядит особенно рентабельным. Одним из примеров микроконтроллеров с ядром Cortex-M0 является PSoC 4000 компании Cypress Semiconductor, цена которого при заказе больших партий составляет всего $0.29.

Кроме того, в Таблице 1 показано, что снижению стоимости способствует поддержка 32-битными процессорами высокой плотности кода и бóльшая скорость выполнения операций.

Не только о процессоре

Обычно разработчики сосредотачиваются на портировании кода прошивки на новый процессор. Однако следует помнить, что процессор является частью микроконтроллера, и для удовлетворения потребностей потребителей в улучшении продукта микроконтроллер может предложить столько же возможностей, сколько и его процессор. При этом необходимо уточнить следующие моменты: 

  • Имеет ли микроконтроллер периферийные функции, которые улучшат возможности продукта?
  • Могут ли периферийные устройства работать, используя меньше кода и создавая меньшую нагрузку на процессор? Следствием положительного ответа может быть сокращение объема системной памяти и возможное снижение стоимости.
  • Может ли устройство помочь вам снизить стоимость на уровне платы или на уровне системы? Например, можете ли вы передать определенные функции платы микроконтроллеру?
  • Является ли микроконтроллер достаточно гибким, чтобы позволить вам адаптироваться к меняющимся требованиям без необходимости разводки новой платы?

Наконец, обратите внимание, что зачастую решение о выборе микроконтроллера зависит от поддерживающей его интегрированной среды разработки (IDE). Убедитесь, что новая среда разработки не является только редактором, компилятором и отладчиком. Среды, которые позволяют быстро создать законченное приложение, используя все аппаратные возможности микроконтроллера, могут значительно ускорить проектирование. Сокращению времени разработки также могут способствовать хорошие средства аппаратной поддержки и наличие качественной документации.

Советы по портированию кода

Если вы решили портировать ваш проект на 32-битный процессор, то учитывайте следующие моменты:

Выберите 32-разрядный микроконтроллер/процессор начального уровня и интегрированную среду разработки.

Упростите ваш первый переход в 32-битный мир. Это снизит риск, связанный с отсутствием опыта, поскольку вы ознакомитесь с различиями 32-разрядных устройств. Выберите простое устройство начального уровня, а также среду разработки, которая может упростить процесс портирования. Одним из примеров является микроконтроллер PSoC 4000 компании Cypress Semiconductor, поддерживаемый IDE PSoC Creator.

Выберите новый компилятор.

Когда вы будете переносить свой код на новый процессор, вам, вероятно, придется выбирать новый компилятор. Для 32-битных процессоров доступно большое количество компиляторов, некоторые из которых бесплатны. В качестве примеров можно назвать GCC, ARM/Keil MDK и IAR.

Проверьте свой код и отладочные средства.

Создайте небольшую тестовую программу, с помощью которой, например, можно мигать светодиодами. Вы получите опыт работы с новыми инструментами, который поможет вам в дальнейшем.

Перепишите ассемблерный код.

В идеале ваш существующий код должен быть написан на C (или другом языке высокого уровня). Любой фрагмент вашего кода, написанный на ассемблере для 8-разрядного процессора, скорее всего, не может быть портирован. Если ваш текущий проект содержит ассемблерный код, перед началом процесса портирования перепишите его на C.

Инкапсулируйте зависимый от процессора код.

Если ваш код является модульным (лучшая практика написания программ), вы, возможно, уже сделали это. Часть вашего кода, которая непосредственно взаимодействует с регистрами микроконтроллера, такими как регистры портов ввода/вывода, должна находиться в других файлах отдельно от остального кода. Инкапсулируйте код в этих файлах в функции с осмысленными названиями, например, UART_Receive(). Тогда вы сможете переписать эти функции для нового микроконтроллера без изменения остальной части кода.

Прочие архитектурные изменения

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

Поскольку в 32-разрядных процессорах проще реализовать переключение задач, рассмотрите вопрос о повторном написании кода в виде набора отдельных задач, которые будут использоваться с операционной системой реального времени (ОСРВ). Примерами поставщиков ОСРВ для 32-битных систем могут быть компании Segger и Micrium.

Поэтапное добавление кода и его отладка

При написании нового кода наиболее эффективным способом является поэтапное добавление, проверка и отладка небольших его фрагментов. Это упрощает поиск и исправление ошибок. То же самое относится и к портированию – перенос, проверка и отладка небольших фрагментов на новом процессоре.

Пример процессора и микроконтроллера

Чтобы получить более полное представление о процессе портирования, рассмотрим эту процедуру на примере Cortex-M0 и PSoC 4000 более подробно. Cortex-M0 является как самым маленьким из доступных процессоров с ядром ARM, так и естественным и экономически эффективным средством миграции с 8- и 16-битных процессоров. Регистровая архитектура (Рисунок 4) и набор команд делают его эффективным при выполнении программ, написанных на языке C.

Портирование проекта на 32-разрядную платформу без дополнительных затрат
Рисунок 4. Регистровая архитектура процессора Cortex-M0.

Все регистры являются 32-разрядными, что позволяет реализовать 32-битную адресацию в 4-гигабитном адресном пространстве. Пространство адресации большинства 8-разрядных процессоров ограничено 64 килобайтами.

Процессор имеет 12 регистров общего назначения. Младшие регистры R0 – R7 поддерживаются бóльшим числом команд. К специальным регистрам относятся:

  • Двойной указатель стека (R13), облегчающий реализацию ОСРВ.
  • Регистр связи (R14) для быстрого возврата из процедуры.
  • Программный счетчик (R15).
  • Регистр состояния программы, содержащий результаты выполнения команд, например, флаг нуля, флаг переноса и текущее количество исключений.
  • Регистр маски прерываний.
  • Регистр управления, определяющий, какой указатель стека является активным.

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

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

Портирование проекта на 32-разрядную платформу без дополнительных затрат
Рисунок 5. Уровни конвейера процессора Cortex-M.

В процессорах ARM Cortex-M поддержка прерываний интегрирована непосредственно в ядро, использующее контроллер вложенных векторных прерываний (NVIC).

Возможности NVIC включают в себя:

  • Динамическую расстановку приоритетов и автоматическое приоритетное вложение отложенных прерываний.
  • Низкую задержку – процессор автоматически сохраняет и восстанавливает свое состояние без выполнения дополнительных инструкций.
  • Tail-chaining – непрерывную обработку вложенных прерываний без дополнительных операций сохранения и восстановления состояния между прерываниями.
  • Late arrival – механизм, гарантирующий, что высокоприоритетное прерывание, наступающее в промежуток времени, когда выполняется операция записи в стек низкоприоритетного прерывания, обслуживается первым.

Эти возможности позволяют выполнять быструю и детерминированную обработку прерываний. Также в Cortex-M включен системный таймер «SysTick», который облегчает работу с ОСРВ и может работать во время нахождении процессора в режиме сна. Благодаря высокоуровневой поддержке прерываний вы можете сделать архитектуру проекта в большей степени основанную на прерываниях.

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

Ядро Cortex-M0 представляет собой часть более широкого семейства процессоров Cortex-M, все представители которого имеют одинаковую регистровую архитектуру и могут выполнять несколько или все команды набора Thumb-2. Это облегчает переход на более мощный процессор, например, на Cortex-M3, входящий в состав устройства PSoC 5LP компании Cypress.

PSoC 4000 является младшим членом семейства PSoC 4. В дополнение к процессору Cortex-M0 это устройство обладает набором гибких и динамически конфигурируемых периферийных модулей, показанных на Рисунке 6.

Портирование проекта на 32-разрядную платформу без дополнительных затрат
Рисунок 6. Блок-схема PSoC 4000.

В процессоре также реализована функция работы с емкостными сенсорными экранами (CapSense). По сравнению с использованием механических кнопок это дает значительные преимущества с точки зрения стоимости, эффективности и защиты от статического электричества. CapSense характеризуется:

  • Простотой реализации кнопок, ползунков и решений для определения расстояния до объекта благодаря 16 входам, подключаемым к различным линиям ввода/вывода.
  • Высоким отношением сигнал/шум, обеспечивающим точность определения касания в зашумленной окружающей среде.
  • Невосприимчивостью к воде при работе в неблагоприятных условиях окружающей среды.
  • Автоподстройкой SmartSense, ускоряющей время выхода на рынок и устраняющей необходимость в калибровке.

Модуль CapSense включает в себя два ЦАП и компаратор, которые можно использовать для других целей, если CapSense не востребована.

Кроме того, Cypress предлагает интегрированную среду разработки PSoC Creator для устройств PSoC 3, 4 и 5LP. PSoC Creator представляет собой свободно распространяемый инструмент, работающей в среде Windows, который позволяет одновременно и согласованно выполнять аппаратное и программное проектирование систем на основе PSoC.

Вы можете использовать классические, хорошо знакомые средства проектирования схем, поддерживаемые базой PSoC Components, содержащей более 100 предварительно проверенных, готовых компонентов PSoC. Components включает в себя автоматически сгенерированный код API, который может существенно сократить затраты вашего труда. Благодаря PSoC Creator портирование проектов между семействами PSoC значительно облегчается как на конфигурируемом аппаратном уровне, так и на программном уровне (Рисунок 7).

Портирование проекта на 32-разрядную платформу без дополнительных затрат
Рисунок 7. Конфигурирование компонента в PSoC Creator.

Вы также можете экспортировать проекты PSoC Creator в другие среды разработки, такие как µVision и IAR.

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

Перевод: Mikhail R по заказу РадиоЛоцман

На английском языке: Porting designs to the 32-Bit world without adding cost

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя