Arm cortex что это за программа

1.1. Знакомство с Cortex

Семейство ARM Cortex — новое поколение процессоров, которые выполнены по стандартной архитектуре и отвечают различным технологическим требованиям. В отличие от других ЦПУ ARM, семейство Cortex является завершенным процессорным ядром, которое объединяет стандартное ЦПУ и системную архитектуру.

Семейство Cortex доступно в трех основных профилях: профиль A для высокопроизводительных применений, профиль R для реально-временных применений и профиль M для чувствительных к стоимости и микроконтроллерных применений. Микроконтроллеры STM32 выполнены на основе профиля Cortex-M3, которое специально разработано для применений, где необходимы развитые системные ресурсы и, при этом, малое энергопотребление.

Они характеризуются настолько низкой стоимостью, что могут конкурировать с традиционными 8 и 16-битными микроконтроллерами. И хотя ЦПУ ARM7 и ARM9 были с успехом интегрированы в стандартные микроконтроллеры, в них все же прослеживается изначальная ориентированность на системы на кристалле (SoC).

ARM Cortex-A78 и Cortex-X1 Как Apple, только в Android

Это особенно заметно по способам обработки исключительных ситуаций и прерываний, т.к. у разных производителей микроконтроллеров и способы обработки реализованы различным образом. Cortex-M3 является стандартизованным микроконтроллерным ядром, которое помимо ЦПУ, содержит все остальные составляющие основу микроконтроллера элементы (в т.ч. система прерываний, системный таймер SysTick, отладочная система и карта памяти).

4 гигабайтное адресное пространство Cortex-M3 разделено на четко распределенные области кода программы, статического ОЗУ, устройств ввода-вывода и системных ресурсов. В отличие от ядра ARM7, Cortex-M3 выполнено по Гарвардской архитектуре и, поэтому, имеет несколько шин, позволяющие выполнять операции параллельно.

Семейство Cortex имеет возможность оперировать с фрагментированными данными (unaligned data), что также отличает его от предшествующих архитектур ARM. Этим гарантируется максимальная эффективность использования внутреннего статического ОЗУ. Семейство Cortex также поддерживает возможности установки и сброса бит в пределах двух областей памяти размером 1 Мбайт по методу bit banding. Этот метод предоставляет эффективный доступ к регистрам и флагам УВВ, расположенных в области статического ОЗУ, и исключает необходимость интеграции полнофункционального битового процессора.

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

Еще одним ключевым компонентом ядра Cortex-M3 является контроллер векторизованных вложенных прерываний (КВВП). КВВП предоставляет стандартную структуру прерываний для всех Cortex-микроконтроллеров и способы их обработки.

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

Windows на ARM — НА ЧТО СПОСОБЕН?

Частично это достигнуто за счет автоматических операций со стеком, выполняемым специальным микрокодом внутри ЦПУ. Если же прерывания возникают практически одновременно, то КВВП использует способ упорядоченной обработки прерываний с задержкой перед вызовом очередной процедуры обработки прерывания всего лишь 6 циклов.

В случае наложения прерываний, прерывание с более высоким приоритетом может вытеснить более низкоприоритетное прерывание, не расходуя при этом дополнительных циклов ЦПУ. Структура прерываний также тесно связана с поддерживаемыми ядром Cortex-M3 экономичными режимами работы. Предусмотрена возможность конфигурации ЦПУ на автоматический переход в экономичный режим работы по завершении обработки прерывания. После этого перехода ядро будет бездействовать вплоть до возникновения очередной исключительной ситуации.

Несмотря на то, что ядро Cortex-M3 разрабатывалось как недорогое ядро, оно остается 32-битным ЦПУ и, в связи с этим, поддерживает два режима работы: потоковый режим (Thread) и режим обработчика (Handler), для каждого из которых можно сконфигурировать свои собственные стеки. Благодаря этому, появляется возможность разработки более интеллектуального программного обеспечения и поддержки операционных систем реального времени (ОСРВ).

В ядро Cortex также входит 24-битный автоматически перезагружаемый таймер, предназначенный для генерации периодических прерываний и используемый ядром ОСРВ. Если у ЦПУ ARM7 и ARM9 имеется два набора инструкций (32-битный ARM и 16-битный Thumb), то у семейства Cortex предусмотрена поддержка набора инструкций ARM Thumb-2. Он представляет собой смесь 16- и 32-битных инструкций, позволяющие добиться производительности 32-битного набора инструкций ARM и плотности кода, свойственной 16-битному набору инструкций Thumb. Thumb-2 — обширный набор инструкций, ориентированный на компиляторы языков C/C++. Это означает, что программа для Cortex-микроконтроллера может быть полностью написано на Си.

Источник: www.gaw.ru

Знакомимся с микроконтроллерами на ядрах ARM Cortex-M

Давно я не проявлял никакой активности в блоге, но Kaimi что-то разошёлся со статьями по пентесту в последнее время, и это вдохновило меня тоже что-нибудь написать.

Обсуждать мы сегодня будем 32-разрядные контроллеры с архитектурой ARM Cortex-M и, в частности, контроллеры от STMicroelectronics (aka ST). Эта статья будет описывать, как начать разработку под указанные контроллеры, доступные среды разработки, используемые библиотеки. Если вам интересна тема Arduino, но 8-битные AVR уже не вставляют, и хочется чего-то большего, то эта статья точно для вас.

Итак, представим, что вы успешно что-то делали на Arduino на 8-битных контроллерах AVR. Может быть, даже какие-то законченные устройства пилили. Но архитектура AVR8, конечно, простая, а контроллеры на ней дешевые, но и функционала она предоставляет не ахти как много, и работает не особо быстро. Что же делать? Правильно: искать более продвинутые альтернативы!

И такие, к счастью, есть: это контроллеры на базе архитектуры ARM.

Существует целое семейство вариантов архитектуры ARM, и все они предназначены для разных целей. Это и ARM Cortex-A для приложений вроде полноценных ОС (да, такие часто стоят в ваших смартфонах), и Cortex-R для систем реального времени и систем, где требуется высокий уровень безопасности, и, наконец, Cortex-M — архитектура для микроконтроллеров. Существуют еще более старые архитектуры, но эти три — основные современные. Есть хорошее видео на английском языке, где доступно описываются характеристики и организация этих архитектур.

Читайте также:
Лента виджетов что это за программа на Андроид нужна ли она

Мы же будем рассматривать только Cortex-M, так как это та самая архитектура, на базе которой производители типа ST, NXP или Microchip пилят свои контроллеры. Тут, однако, тоже не всё однозначно. Имеется множество ядер, разрабатываемых корпорацией ARM (Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M7 и т.д.), полный список которых можно найти в Википедии. Ядра эти отличаются наборами поддерживаемых инструкций, организацией конвейера, наличием таких фич, как FPU, MPU и т.д. Лицензия на использование того или иного ядра покупается у ARM конкретным производителем, затем к нему прикручивается различная периферия (таймеры, DMA, всякие интерфейсы типа SPI, USB и I2C и т.д.), всё это лепится на кристалл в чип, и, наконец, вы можете его приобрести и работать с ним.

У меня по воле случая оказалась отладочная плата Open103Z с контроллером STM32F103ZET6 .

Это контроллер на ядре Cortex-M3, которое сейчас весьма популярно среди контроллеров ARM (если не самое популярное). Контроллеры на этом ядре стоят недорого, на том же chipdip.ru самый дешевый стоит порядка 50 рублей, а самый дешевый от STMicroelectronics — 130 рублей. На ebay/Aliexpress эти контроллеры стоят еще в два раза дешевле. STM32F103ZET6 , который установлен в плату Open103Z , стоит дороже, 500-700 рублей, так как достаточно навороченный, но суть остается та же, и код, написанный под этот контроллер, будет несложно портировать и на другие ST-контроллеры на том же ядре (если, конечно, вы не используете какую-то уникальную периферию, которой нет в более простых вариантах). Есть на ARM Cortex-M3 даже Arduino Due, правда, там стоит контроллер AT91SAM3X8E от Atmel (они же теперь Microchip), но ядро всё то же — Cortex-M3.

Но вернемся к отладочной плате. Раз уж она у меня оказалась, я решил поразбираться с этой темой и написать под её контроллер какой-нибудь код. Раньше я с ARM-микроконтроллерами не работал вообще, поэтому я начал с чтения большого количества статей и документации. Оказалось, что тема разработки под ARM очень популярна в Интернете в целом и в Рунете в частности.

Очень многие пилят какие-то свои проекты, пишут мануалы и статьи и обсуждают разные релевантные вопросы на форумах. Я многое из этого прочитал, что-то для себя уяснил, но всё же в голове оставалась какая-то путаница. Миллион сред разработки и компиляторов, какие-то фразы типа CMSIS , SPL , HAL , LL , линкер-скрипты, библиотеки, размазанные по просторам Интернета и т.д. Понимания это всё явно не добавляло. Пришлось копнуть еще глубже, и теперь я готов выложить эти знания в более-менее понятном и, главное, структурированном виде.

Вопрос 1. Какой контроллер мне купить?

Берите любой с ядром Cortex-M3 от STMicroelectronics. Смотрите на наличие периферийных устройств (DMA, таймеры, ШИМ и т.д.) и интерфейсов (SPI, USB, I2C, UART), если вдруг вам нужны какие-то конкретные. Проверьте максимальную рабочую частоту (большинство от ST работают на частоте 72 МГц, что в разы выше частот контроллеров на архитектуре AVR8). STM32F103C8T6 или STM32F103RBT6 — отличные варианты за свои деньги, 64/128 КБ памяти программ, 20 КБ оперативной памяти, куча полезной периферии (DMA, таймеры, watchdog, USB, I2C, SPI, UART, CAN, АЦП, CRC и др.), 72 МГц — максимальная тактовая частота. Из минусов — паять такие контроллеры вручную будет сложно, потому что в DIP-корпусах они недоступны, а доступны только в LQFP, который даже по методике лазерного утюга запаять будет непросто.

Есть много отладочных плат на разных ARM’ах, если не хотите ничего паять самостоятельно. С контроллерами от ST таких тоже очень много. Вот, например, доступные отладочные платы для контроллеров ARM Cortex-M3 на Mouser. На Ebay находятся неплохие бюджетные варианты по запросу «stm32 arm cortex m3 development board» на все тех же STM32F103C8T6 и STM32F103RBT6 .

Вопрос 2. Я купил, что дальше-то делать?

Возможно, вам нужен будет еще и программатор. Зависит от типа отладочной платы. Arduino Due его, например, не требует, там всё встроено уже в плату. У меня же оказался STLink/V2 (вы же помните, я говорю преимущественно о контроллерах ST, потому что с ними я имел дело), который работает с любыми контроллерами от STMicroelectronics.

Стоит такой программатор две с лишним тысячи рублей, хотя на том же Ebay полно китайских клонов всего по 2.5$. Контроллеры от ST поддерживают отладку и программирование через два интерфейса — JTAG и SWD (Serial Wire Debug). STLink/V2 умеет работать с обоими интерфейсами.

Далее вам нужно определиться с тем, в какой среде программирования вести разработку. Их очень много: Arduino IDE, Eclipse (или даже модификация от ST), Keil MDK ARM (платный, бесплатно можно компилировать только небольшие программы), Visual Studio 2017 + VisualGDB (платный, но стоит своих денег), IAR embedded workbench (EWARM) (платный, бесплатно можно компилировать только небольшие программы), Mbed studio (бесплатная, но специально для разработки под Mbed, про это чуть ниже) и другие.

Можете даже писать код в блокноте и компилировать через Makefile, используя напрямую gcc-тулчейн, например, от того же Eclipse (взять можно на гитхабе). Репозиторий Eclipse больше не развивается, качайте отсюда (xpack-dev-tools). Многие среды предоставляют часто какие-то свои встроенные библиотеки для реализации популярного функционала из коробки (USB-устройства всякие, например). Но это не так важно, потому что то же самое предоставляет и STMicroelectronics для своих контроллеров в виде бесплатных библиотек, которые можно подключить к своему проекту. Об этом я подробнее расскажу ниже.

Читайте также:
Что за программа time zone updater

С Eclipse и IAR я не работал, поэтому ничего сказать не могу. Keil MDK позволит вам быстро компилировать код под нужный контроллер, прямо сразу его заливать в плату и отлаживаться. Arduino IDE — примерно то же самое, но подходит только для Arduino Due. Можно установить Arduino Core STM32, тогда в Arduino можно будет писать код для кучи других отладочных плат на ST-контроллерах.

Visual Studio 2017 + VisualGDB — очень удобный вариант в том плане, что вы пишете, компилируете, прошиваете и отлаживаете код целиком и полностью в Visual Studio. Работает подсветка синтаксиса и IntelliSense. Думаю, в общем выбор примерно эквивалентен и больше основывается на личных предпочтениях. Я остановился на вариантах с VisualGDB, а также с простым Makefile.

Теперь углубимся в тему разработки под контроллеры именно от STMicroelectronics. Для их контроллеров есть несколько бесплатных утилит, которые помогут в разработке. Во-первых, это STM32CubeProg. Это программатор, поддерживающий все микроконтроллеры от ST.

Позволяет писать и читать память контроллера, редактировать ее, менять конфигурационные биты контроллера, прошивать в контроллер скомпилированные ELF-файлы. Утилита пригодится, если вы пожелаете компилировать код через Makefile и обычный gcc, без всяких сред разработки.

Вторая полезная утилита — это STM32CubeMX. Она позволяет через удобный графический интерфейс для любого из контроллеров ST сгенерировать базовый код, который настроит тактовые частоты вашего контроллера, порты ввода-вывода, требуемую периферию, а также создаст файлы проектов под выбранную среду программирования. Из популярных поддерживаются Keil MDK-ARM, IAR EWARM, а также Makefile-проекты.

Код генерируется с использованием предоставляемой библиотеки от ST, которая называется HAL. О полезных библиотеках мы поговорим далее.

По сути, вы создаете проект через STM32CubeMX, генерируете проект с кодом под требуемую среду программирования, а потом открываете в этой самой среде разработки сгенерированный проект и пишете тот код, который вам нужен, при этом пользуясь тем кодом, который для вас сгенерировал STM32CubeMX. Есть и минусы — при перегенерировании кода (если вдруг у вас поменяются какие-то пожелания к периферии или другим настройкам контроллера) имеющиеся файлы (в которых мог быть и ваш код) перезатрутся. Придется склеивать изменения вручную, если вы уже наменяли что-то в автогенеренных файлах. Кроме того, вы вынуждены будете использовать пресловутую библиотеку HAL, так как весь код, сгенерированный в STM32CubeMX, будет ее плотно использовать.

Настройка периферии контроллера STM32F103C8T6:

Настройка частот контроллера STM32F103C8T6:

Обе утилиты, и STM32CubeProg, и STM32CubeMX, — абсолютно бесплатны.

Вопрос 3. Что использовать, чтобы попроще код написать?

Итак, вы установили себе какую-нибудь среду разработки и, вероятно, STM32CubeMX. Следующий вопрос, который у вас возникнет, это: «А какие мне библиотеки применить, чтобы побыстрее запилить что-нибудь работающее?». Итак, что же предлагает разработчику open-source-комьюнити и ST?

  • CMSIS. Это основополагающая библиотека любой разработки под ARM. Разрабатывает её, непосредственно, ARM. Она подходит под вообще любые контроллеры, работающие под управлением ядер ARM, и включает в себя различные универсальные определения, касающиеся этих ядер. Например, управление прерываниями, настройка общих для всех ARM-контроллеров фич типа SysTick-прерываний, управление функционалом защиты страниц памяти (если таковые поддерживаются выбранным контроллером), оптимизированные математические функции и т.д. Эта библиотека работает под любыми компиляторами и в любых средах разработки. Часто среда разработки при создании проекта под какой-нибудь контроллер ARM автоматически подключит нужные заголовочные файлы CMSIS, и вам не придется выкачивать ее вручную (если только вы не хотите использовать самую свежую версию, которую придется вручную скачать с гитхаба). Также CMSIS предлагает производителям контроллеров на базе ядер ARM Cortex-M шаблоны, которые те могут использовать, чтобы встроить в CMSIS собственный код и реализовать в единой манере код для поддержки периферии. STMicroelectronics пользуется этой возможностью постольку-поскольку и предпочитает хреначить собственные библиотеки, не оглядываясь на предлагаемые стандартные описания. CMSIS также имеет шаблоны для создания своих файловых систем, RTOS и т.д. на базе общих интерфейсов.
  • SPL, HAL и LL — это три библиотеки от STMicroelectronics, которые предлагаются для разработки под их контроллеры. Первая, Standard Peripheral Library (SPL), объявлена уже устаревшей. Теперь ST для современных разработок предлагает использовать HAL. Как вы помните, начальный код для инициализации контроллера и требуемой периферии будет для вас сгенерирован утилитой STM32CubeMX как раз с использованием HAL. HAL — это такой своеобразный монстр на языке Си. У нее есть свои плюсы: поддерживаются все контроллеры ST, часть кода для вас генерируется автоматически, упрощается перенос кода с одного контроллера ST на другой, даже если у него другое ядро ARM. Кроме того, в современных контроллерах много функций, но и много аппаратных багов (так называемая errata), с которыми борется эта библиотека, позволяя вам самостоятельно не читать списки этих багов на 40 с лишним страниц, как этот для контроллеров STM32F10xx8 / STM32F10xxB. Но есть и минусы, которые многих разработчиков отталкивают: это очень жирная библиотека, как по потреблению памяти, так и по скорости исполнения, не всегда очевидная, часто имеющая баги, с которыми вы будете иметь дело в своих программах. Кроме того, ее использование сразу же усложняет перенос кода на контроллеры других производителей. Как выглядит код, написанный с использованием HAL, легко найти в сети, он действительно часто весьма громоздкий. Вот, например, как выглядит инициализация единственного вывода номер 6 порта ввода-вывода F (это прямо тот код, который автоматически генерирует STM32CubeMX, без изменений). Этот код переключает пин F6 в режим вывода с минимальной частотой (2 МГц максимум) без подтягивающего резистора (open-drain режим) и выводит на него единицу:
Читайте также:
Что это за программа квадратики

Источник: kaimi.io

ARM — что это?

АРМ — это архитектура процессора, которую разработала одноименная компания. Их уже давно и удачно применяют в смартфонах и планшетах. Впервые они появились около 30 лет назад благодаря достижениям компании из Великобритании — Acorn Computers (теперь она именуется ARM Limited). Они долгое время находились на вторых ролях по причине своих более популярных коллег – x86. Перемены произошли с приходом новой технической эпохи IT-автоматизации, когда лидерство перешло от компьютеров к мобильным устройствам.

Источник: mobile-analytics.ru

Процессоры ARM – что это такое и «с чем их едят»

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

Но в чем же отличие? Что такое архитектура ARM и чем она отличается от x86? В последней, используемой в процессорах Intel и AMD, применяется набор CISC-команд. Обработка на их основе очень функциональна, открывает просторы для программистов и разработчиков железа, но требует немалого количества энергоресурсов. Суть CISC, грубо говоря, заключается в том, что каждая поступаемая команда декодируется в простейший элемент и только потом обрабатывается.

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

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

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

Говоря о том, что такое чипы ARM следует отметить такой момент, как комплексность предлагаемых современных мобильных систем. ARM – это не просто один процессор. Как правило, в него входят: контроллер оперативной памяти, графический ускоритель, видеодекодер, аудиоокодек и опционально модули беспроводной связи. Такая система называется однокристальной. Другими словами, ARM – это чип на чипе.

На сегодняшний день ARM насчитывают несколько процессорных поколений:

ARM9. Чипы ARM9 могут достигать тактовой частоты 400 МГц. Эти чипы морально устарели, но по прежнему пользуются спросом. Например, в беспроводных маршрутизаторах и терминалах оплаты. Набор простых команд такого чипа позволяет с легкостью запускать многие Java-приложения.

ARM11. Процессоры ARM11 могут похвастаться более полным набором простых команд, расширяющих их функционал и высокой тактовой частотой (вплоть до 1 ГГц). Благодаря невысокому энергопотреблению и низкой себестоимости чипы ARM11 до сих пор применяются в смартфонах начального уровня.

ARMv7. Современные чипы архитектуры ARM принадлежат к семейству ARMv7, флагманские представители которого уже достигли отметки в восемь ядер и тактовой частоты свыше 2 ГГц. Разработанные непосредственно ARM Limited процессорные ядра принадлежат к линейке Cortex и большинство производителей однокристальных систем используют их без существенных изменений.

ARM Cortex-A8. Исторически первым процессорным ядром семейства ARMv7 было Cortex-A8, которое легло в основу таких известных SoC своего времени как Apple A4 (iPhone 4 и iPad) и Samsung Hummingbird (Samsung Galaxy S и Galaxy Tab). Оно демонстрирует примерно вдвое более высокую производительность по сравнению с предшествующим ARM11, и увы, более высокое энергопотребление, что делает данный чип ныне крайне непопулярным.

ARM Cortex-A9. Вслед за Cortex-A8 компания ARM Limited представила новое поколение чипов – Cortex-A9, которое сейчас является самым распространенным и занимает среднюю ценовую нишу. Производительность ядер Cortex-A9 выросла примерно втрое по сравнению с Cortex-A8, да еще и появилась возможность объединять их по два или даже четыре на одном чипе.

ARM Cortex-A5 и Cortex-A7. При проектировании процессорных ядер Cortex-A5 и Cortex-A7 компания ARM Limited преследовала одно и ту же цель – добиться компромисса между минимальным энергопотреблением ARM11 и приемлемым быстродействием Cortex-A8. Не забыли и про возможность объединения ядер по два-четыре – многоядерные чипы Cortex-A5 и Cortex-A7 мало-помалу появляются в продаже (Qualcomm MSM8625 и MTK 6589).

ARM Cortex-A15. Процессорные ядра Cortex-A15 стали логическим продолжением Cortex-A9 – как результат, чипам архитектуры ARM впервые в истории удалось примерно сравниться по быстродействию с Intel Atom, а это уже большой успех. Не зря ведь компания Canonical в системных требования к версии ОС Ubuntu Touch с полноценной многозадачностью указала двухъядерный процессор ARM Cortex-A15 или аналогичный Intel Atom.

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

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

Источник: you-2-you.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru