[Играем с Arm-2D] Начать работу и портировать еще никогда не было так просто
[Играем с Arm-2D] Начать работу и портировать еще никогда не было так просто
существовать Предыдущие статьи《Что такое встроенная система (Часть 2)

Сегодняшние компьютерные технологии почти на 20 лет опережают встраиваемые технологии. Сегодняшние встроенные системы эквивалентны передовым компьютерным технологиям 1980-х годов с точки зрения ресурсов, теории и методологии. Горгон Медусер глупый мальчик,Публичный аккаунт: мышление на голом железеЧто встроено (Часть 2)—— «Гравитация» и «Осадки»

Это означает,Применение в начале этого векасуществовать Некоторые технологии на персональных компьютерах также могут постепенно внедряться в глубоко встроенные системы.(Deep Embedded System)——Типичные системы этого типа также известны какМикроконтроллерИли, скорее,Процессор Кортекс-М

Нет, компания Arm выпустила на Github библиотеку ускорения 2D-графики специально для «всех» процессоров Cortex-M — Arm-2D:

https://github.com/ARM-software/Arm-2D

в соответствии сGithubНа складеREADMEОписание,Мы можем просто понимать эту библиотеку ускорения 2D-графики как стандартный «драйвер видеокарты» специально для Процессор Кортекс-М.。Хотя Вот“Драйвер видеокарты”Просто преувеличение——Кажется, никого нет Процессор Кортекс-М“достойный”Так называемая видеокарта,Но на самом деле это не так уж и далеко – ведь согласно последним тенденциям,С постепенным обогащением ресурсов Микроконтроллера (технологические узлы более высокого уровня постепенно снижают цены),Не только процессоры работают все быстрее и быстрее, но и их память становится все больше и больше.,Более того, большое количество производителей имеют или в настоящее времясуществовать Рассмотрите возможность предоставления Процессор Кортекс-М оснащен специальным механизмом ускорения 2D-графики.——существоватьэтот аспект,STиNXPИди первым——полагатьChrome-Art(позвони еще разDMA2D)С этим уже все знакомы。на самом деле,Некоторыйчип Компаниясуществоватьучитывать(Даже уже)следующему поколениюCortex-MПроцессор оснащен реальным2D-GPU。существовать В этом контексте,Arm-2DЗапуск компании дает четкий сигнал отрасли.:Братья, это не тренировка, наступила эра специализированного ускорения 2D-графики Cortex-M.

[Каково значение драйвера видеокарты Cortex-M? 】

Arm — «старый» экологический игрок в отрасли — почти все действия будут рассматриваться с экологической точки зрения — поэтому, если вы хотите выяснить, почему Arm в настоящее время настраивает драйвер видеокарты для «Cortex-M», вы должны найти out Понять, что происходит во всей глубоко укоренившейся экосистеме. Для этого представьте:

Вы менеджер по продукту в компании по производству чипов:

  • Считаете ли вы, что приложения для умных часов должны быть очень популярны или умные терминальные устройства IoT с цветными экранами должны быть очень популярны?
  • Принимая во внимание низкое энергопотребление и низкую стоимость,Использование некоторых продуктов Cortex-M (вместо Cortex-A) должно иметь смысл. затем,Ваша компания определила Процессор Кортекс-М, оснащенный механизмом ускорения 2D-графики.
  • чип сделал быстро,Плата разработки оснащена сенсорным экраном с разрешением 480*272.,В сочетании со специально разработанной печатной платой (и узнаваемым цветовым сочетанием печатной платы) она выглядит первоклассно, как бы вы на нее ни смотрели! атмосфера! Обновление!
  • Вот и проблема:
    1. На рынке нет стороннего программного обеспечения для 2D-тестирования микроконтроллера (голого металла или ОСРВ).(Профессиональная поговоркаBenchmark)——Как это может отражать мощность вашего оборудования??Как оценочные агентства ставят сложную задачу2DОбработка представлена ​​в виде простых числовых значений.существовать Перед публикой?
    2. На рынке так много сторонних поставщиков графических интерфейсов, и все они имеют продукты с графическим интерфейсом для чипов Cortex-M, но как мне убедить их добавить поддержку моего чипа?

Вы являетесь поставщиком программного обеспечения с графическим интерфейсом пользователя:

  • Ваш предыдущий продукт Cortex-A хорошо известен в среде Linux.
  • Недавно мы увидели, что многие компании-разработчики программного обеспечения ориентируются на рынок глубоких встраиваемых систем и предоставляют настраиваемые продукты с графическим пользовательским интерфейсом, такие как GUIX от Microsoft и Qt от Qt. for Кортекс-М. Таким образом, вы быстро предоставили соответствующие продукты с графическим интерфейсом.,Но возникают проблемы:
    1. На рынке нет стороннего программного обеспечения для 2D-тестирования микроконтроллеров.……
    2. è Cortex-A и более стандартизированная программная среда среды Linux отличаются,Фрагментация глубоко укоренившейся среды слишком серьезна.
      1. Характеристики ЖК-дисплея разные
      2. Аппаратные интерфейсы, подключенные к ЖК-дисплею, различаются (разная полоса пропускания ЖК-дисплея).
      3. ЖК-дисплей работает по-разному (с драйвером периферийного ЖК-дисплея или без него, тип драйвера)
      4. Целевой чип имеет разные ресурсы и разные системные частоты.
      5. Программные среды разные — RTOS сильно различаются, есть даже «голые» системы.
      6. Каждое оборудование для ускорения 2D-графики, предоставляемое производителями чипов, отличается...
    3. Подводить итоги,Если вы хотите поддерживать аппаратную платформу,Надо его пересадить и настроить под свое железо.……
    4. Учитывая, что ресурсы команды ограничены, оборудование, которое может «официально» поддерживаться, также ограничено.……

Подводить итоги:

  • Производители чипов используют «индивидуализированное» аппаратное обеспечение для ускорения 2D-графики, чтобы обеспечить чипу «дифференцированную» торговую точку, но, если посмотреть на это с другой точки зрения, это фактически усиливает фрагментацию аппаратного обеспечения. в то же время,Производители чипов также изо всех сил пытаются найти большое количество стеков протоколов графического пользовательского интерфейса для обеспечения программной поддержки чипов.
  • Поставщики программного обеспечения с графическим пользовательским интерфейсом страдают от огромной рабочей нагрузки по портированию, вызванной фрагментацией оборудования.Они хотят, чтобы их команды больше сосредоточились на разработкеGUIсам,Вместо того, чтобы изо всех сил пытаться обеспечить «официальную поддержку» новых аппаратных платформ.

вдруг однажды,Мы двое, уставшие и болтавшие, вдруг почувствовали, что что-то не так.,Затем все молча повернули головыArm — нейтральная третья сторона в этой экосистеме.……

Поэтому Арм слабо выложил на Github стандарт драйвера видеокарты под названием Arm-2D на глазах у всех и предложил следующее предложение:

«Как насчет… я предоставляю уровень абстракции API?»

  • Производитель чипа: Вам просто нужно написать драйвер для вашего движка 2D-ускорения в соответствии с моими стандартами - все графические интерфейсы с Arm-2D в качестве базовой поддержки будут доступны за считанные минуты;
  • Поставщик графического интерфейса: всякий раз, когда вам нужно аппаратное ускорение в вашем графическом интерфейсе, вы можете напрямую вызвать API, который я предоставляю.——есличип Реальное аппаратное ускорение,Естественно, оно будет ускорено.,Если чип не имеет аппаратного ускорения,Затем используйте алгоритм оптимизации программного обеспечения, который я предоставил - в общем,то естьПосле пересадки его можно использовать где угодно, независимо от того, есть ли фактическое аппаратное ускорение.
  • Для пользователей «голого металла»:Не волнуйся тоже,Я знаю, что ресурсы вашей аппаратной платформы ограничены.——Не могу позволить себе профессионалаGUIстек протоколов:Вы вообще либо не используете егоGUI、Или просто напишите простой самостоятельноGUI——Не волнуйтесь:Арм-2Д также преподнес вам большой подарочный набор, дающий возможность легко реализовать «те невообразимые дороги».

«Что что?» Пользователи голого металла воскликнули: «Разве это не B2B? Почему у нас вдруг появились преимущества?»

Давайте сначала отойдём от темы и поговорим об этом позже в статье.

[Оценки 2D-обработки для глубокого внедрения]

Хотя не намерен устанавливать сторонние 2D-тесты.,Arm-2D предназначен для демонстрации возможностей обработки 2D различных процессоров (и разных аппаратных ускорителей) при типичных нагрузках графического интерфейса.,Хонкари“Если вы не можете найти настоящую вещь, вам придется стиснуть зубы и получить ее самостоятельно.”отношение,предоставляет ссылку2DОценки производительности——Официальное название:Минимальная частота, необходимая для 30 кадров в секунду (МГц)

Фактический принцип таков:

  • Установите относительно типичную нагрузку по обработке 2D-графики для моделирования рабочей нагрузки и сложности, необходимых в повседневных сценариях приложений с графическим интерфейсом.。(ДолженBenchmarkиз Статический скриншот ок.то есть Ниже этогоиндивидуальныйпоявление,Обратите внимание, что это влияние на существование симулятора.,Так что частота кадров очень низкая):
  • Позвольте различным слоям перемещаться с разными скоростями и углами, чтобы охватить больше возможных ситуаций.——моделировать повседневную жизньGUIРазличные сложности, которые могут возникнуть в;
  • Рендеринг 1000 кадров,Запишите количество тактов ЦП, потребляемых каждым кадром.,И предоставить такую ​​информацию, как минимальное значение, максимальное значение и среднее значение.
  • На основе среднего количества циклов, необходимых для рендеринга кадров, рассчитайте «минимальную частоту процессора, необходимую для 30 кадров в секунду» — и используйте это значение в качестве текущего результата оценки.

Стоит пояснить, что:

  • Это программное обеспечение для сравнительного анализасуществоватьПри подсчете «количества циклов, необходимых для рендеринга кадра», в него не входит “отRAMКLCDОтправить данные”Расчет потраченного временисуществовать Внутри——потому что“Обновить видеопамять”Затраченное время определяется выражениемчипиLCDметод соединения между(Или, скорее,Полоса пропускания передачи)Решать,И возможности ичипа по обработке 2D-графики тут ни при чем.

Если вас действительно волнует реальный FPS системы при определенном методе подключения LD, просто измерьте дополнительное время (например, миллисекунды), потраченное на «обновление видеопамяти», а затем прибавьте его к количеству миллисекунд, необходимых для рендеринга кадра. Например, в рендеринге, показанном на GIF-изображении выше, задержка ЖК-дисплея (то есть время, необходимое для «обновления видеопамяти») составляет 43 мс, а среднее время, необходимое для рендеринга кадра, составляет 4 мс (229 кадров в секунду). , фактическое время, необходимое для кадра, составляет 4 мс. Затраченное время составляет 43 + 4 = 47 мс (для простоты оно рассчитывается непосредственно как 50 мс). На данный момент мы можем считать, что конечная частота кадров составляет примерно 20 кадров в секунду (1/). 50 мс).

  • на самом деле,Друзья часто видят этоBenchmarkПарадоксально сказать, что динамический эффект:“Ну, это круто. Я просто хочу знать, сколько мощности у процессора осталось для обработки конкретных приложений, помимо этого.” Фактически, «минимальная тактовая частота, необходимая для 30FPS» Это интуитивно ответ на этот вопрос.

Таблица выше,Перечислил всехЧасто используемые типы Процессор Кортекс-Мсуществоватьполагаться исключительно на“справиться с этимсам”не прибегая к“специализированный2Dграфический ускоритель”случай,Ориентировано на разрешение 320*240 (RGB565), минимальную частоту, необходимую для достижения частоты обновления 30 кадров в секунду.,например:

  • Cortex-M0+ требует около 194 МГц, чего вполне достаточно.,Другими словами: если ваш Cortex-M0+ работает на частоте 250 МГц,У вас все еще остается 56 МГц производительности ЦП для вашего приложения.

Raspberry Pi Pico экстази с двухъядерным процессором Cortex-M0+, работающим на частоте 250 МГц

  • Cortex-M3/M4 требует примерно 105 МГц,такжето естьобъяснять: Если ваш чип работает на частоте 216МГц, для конкретных приложений останется около 111МГц.(Что сказать,Какой Cortex-M4 в наши дни не работает со скоростью 100 или 10 Мбит/с? )
  • иCortex-M55, который использует ускорение набора команд SIMD (набор инструкций Helium), на самом деле может достигать частоты обновления 30 кадров в секунду всего при 16 МГц — что действительно пугает.

более интуитивный,Вот официальный2DСравнение коэффициентов производительности(кCortex-M4производительность как эталон)。Cortex-M55 Helium на самом деле почти в 6 раз превосходит Cortex-M4 и в 10 раз превосходит Cortex-M0!——Если Arm-2D — драйвер видеокарты, то Cortex-M55 Helium — это процессор, поставляемый со «встроенной видеокартой». Кортекс-МПонятно

существоватьразвертыватьспособ,После обширных отзывов и тестирования сообщества,наконец прибыл Понятно“Щелкните мышкой несколько раз”может легкоразвертыватьэпоха——какиспользоватьCMSIS-Packсуществоватьтри минуты Внутри Воля Arm-2D Развертывание на месте — это основное содержание, о котором пойдет речь в этой статье.

【Подготовка】

Подготовить существующий проект,убеждаться Долженпроект Уже способен достичь базового уровняизLCDинициализация,И может предоставить функцию, которая передает растровые изображения в указанную область ЖК-дисплея.,Его прототип следующий:
Язык кода:javascript
копировать

void Disp0_DrawBitmap (uint32_t x, 
                       uint32_t y, 
                       uint32_t width, 
                       uint32_t height, 
                       const uint8_t *bitmap)

Здесь связь между 5 параметрами показана на рисунке ниже:

Проще говоря, эта функция предназначена для bitmap «Область непрерывного хранения», на которую указывает указатель Информация о пикселях, сохраненная вLCDизодин Укажите прямоугольную область Внутри,Эта прямоугольная область содержит информацию о местоположении.(x,y)и Информация об объеме(width,height)совместно определенные。

многоLCDВсе поддерживают программу под названием“Операционное окно”концепция,Окно здесь на самом деле представляет собой прямоугольную область на рисунке выше — как только вы установите окно с помощью команды,Впоследствии непрерывно записываемые пиксели будут автоматически последовательно заполняться в указанной прямоугольной области (без необходимости пользователя учитывать, когда их следует переносить).

Кроме того, если вам посчастливилось использовать чип с контроллером ЖК-дисплея — буфер дисплея ЖК-дисплея отображается непосредственно в адресное пространство 4 ГБ чипа Cortex-M, тогда мы можем использовать простые операции чтения и записи из памяти для реализации вышеописанного. Функции для платы разработки STM32F746G-Discovery в качестве примера:

Язык кода:javascript
копировать
//! STM32F746G-Discovery
#define GLCD_WIDTH     480
#define GLCD_HEIGHT    272

#define LCD_DB_ADDR   0xC0000000
#define LCD_DB_PTR    ((volatile uint16_t *)LCD_DB_ADDR)

void Disp0_DrawBitmap (uint32_t x, 
                         uint32_t y, 
                         uint32_t width, 
                         uint32_t height, 
                         const uint8_t *bitmap) 
{
    volatile uint16_t *phwDes = LCD_DB_PTR + y * GLCD_WIDTH + x;
    const uint16_t *phwSrc = (const uint16_t *)bitmap;
    for (int_fast16_t i = 0; i < height; i++) {
        memcpy ((uint16_t *)phwDes, phwSrc, width * 2);
        phwSrc += width;
        phwDes += GLCD_WIDTH;
    }
}

[Как получить установочный пакет]

существовать MDK средний отдел Arm-2DПервым шагом является получение соответствующего cmsis-pack,для Можетк Плавный доступ Github Друзья могут напрямую найти последние новости по следующему URL-адресу. .pack Файл - это самый прямой путь:

https://github.com/ARM-software/Arm-2D/releases

конечно,тытакже МожетксуществоватьPack Installerнайден непосредственно вArm-2D

Для удобства отечественных пользователей,для Для друзей, у которых нет доступа к Github,Можетксуществоватьсосредоточиться на Официальный аккаунт【мышление на голом железе】Отправить ключевые слова после“arm-2d”Чтобы получить ссылку на сетевой диск。

получать Arm-2D изcmsis-packназад,Вы можете напрямую дважды щелкнуть, чтобы установить:

Если у вас есть MDK более новой версии, например 5.38 или обновить,В общем, безмозглой установки Next достаточно. Напротив,Настоятельно рекомендуется установить последнюю версию MDK, чтобы избежать ряда ненужных неприятностей.——Это также общий совет, обобщенный многими предшественниками в сообществе на протяжении всей истории крови и слез.——если Используйте последнюю версию с самого началаиз MDK Вы можете сэкономить много времени.

[Руководство по развертыванию для чайников]

Arm-2D Развертывание не очень простое, в принципе можно использовать существующие. RTE Проверьте соответствующие параметры, чтобы выполнить большую часть работы. Подробную информацию можно найти в следующем пошаговом руководстве:

Шаг 1. Добавьте компоненты

существовать MDK Выбрать в проекте Project -> Manage -> Run-Time Environment открыть RTE Окно конфигурации:

Фактически, той же цели можно достичь и с помощью кнопок быстрого доступа на панели инструментов:

существовать нашел в окне Acceleration,и разверните его:

Как показано на рисунке, проверьте следующие компоненты:

  • CoreArm-2Dизосновной(Необходимый)
  • Alpha-Blending:большинствои Связанные с прозрачностьюиздействовать,например На основе маскиизкопировать、Прозрачная композиция слоя、Прозрачная заливка цветными блоками и т. д.
  • Transform:вращать、Такие операции, как масштабирование (поддерживает маски)、Вырез и прозрачность)

Чтобы упростить подключение к драйверу ЖК-дисплея, нам необходимо проверить следующие службы:

  • FPBPartial Frame-Bufferмодуль,Основные компоненты, поддерживающие частичное обновление
  • Display Adapter:одиниспользовать PFB адаптироваться LCD Шаблон кода базового драйвера помогает нам быстро построить мост между рисованием верхнего уровня и обновлением ЖК-дисплея нижнего уровня. Вообще говоря Display Adapter и Между экранами существует однозначное соответствие: если у вас один экран, выберите здесь «1», если у вас два экрана, выберите здесь «2» и так далее.

потому что Display Adapter полагаться Понятно Некоторыйдополнительный(Extra)измодуль,поэтому,Если вы проверили только вышеуказанные разделы,В окне существования вы увидите оранжевое предупреждение:

здесьпредупреждатьиз含义даобъяснять:Display Adapterполагаться Понятномодуль Controls и LCD ASCII Printf,Но вы их не отметили. Просто нажмите кнопку «Разрешить» RTE автоматически проверяет зависимые модули в левом нижнем углу.

Нажмите кнопку «ОК», чтобы завершить добавление компонента.

Чтобы облегчить последующую разработку, настоятельно рекомендуется скачать и установить perf_counter модуль,Пожалуйста, обратитесь к статье для конкретных шагов.《[Модули, которые на слуху] Супервстроенная система инструментов «производительность/время»》,Вот краткое изложение основных шагов:

  1. сосредоточиться на【мышление на голом железе】Официальный аккаунт Отправить ключевые слова после“perf_counter”чтобы получить соответствующееиз cmsis-pack
  2. Загрузите и установите cmsis-pack
  3. Найден после открытия RTE Utilities,и проверь perf_counter в Core,рекомендоватьк Sourceдействовать по формеразвертывать
  4. Если появляется оранжевое предупреждение,щелкнутьResolveкнопка для решения

Шаг 2. Настройте среду компиляции

еслитыиспользоватьArm Compiler 6(armclang),вам нужно открытьC11иРасширения GNUизподдерживать,То есть непосредственносуществовать"Language C"Выбирать“gnu11”:

еслитыиспользоватьиздаArm Compiler 5(armcc),вам нужно открытьC99иРасширения GNUизподдерживать,Как показано ниже:

также,потому чтоArm-2D зависит от CMSIS вы можете настроить RTE MDK для поддержки последней версии CMSIS.

1. Как показано на рисунке ниже, откройте Pack Installer с помощью кнопки в правой части панели инструментов.

Мы увидим примерно такое окно:

Во вкладке Packs в правой половине существования,Найдите ARM::CMSIS,Убедитесь, что написано «Обновлено».,еслибезиметь Сразущелкнутьпереписыватьсяизкнопка Сделать обновление。Версия CMSIS, от которой зависит Arm-2D, не должна быть ниже 5.7.0 (если вы хотите использовать Cortex-M55, версия не должна быть ниже 5.8.0)

2. Откройте RTEОкно конфигурации через кнопку посередине панели инструментов, как показано ниже:

существоватьSoftware Componentв списке,РасширятьCMSIS,и проверьначальствоCOREиDSP。здесьнужно вниманиеизда,DSPчастьеслииметьSourceиз Параметры Пожалуйста, выберитеSourceПараметры——Это позволит нам напрямуюиспользоватьисходный кодиз Приходите в формекомпилироватьCMSIS-DSPиз Библиотека。

также,еслитынеопределенныйRTEНакадокороиспользоватьизCMSISда否为最新из Версияизразговаривать,МожеткщелкнутьSelect Packsкнопка:

см. начало формы “Use latest Software Packs for Target” проверено,В принципе, можно сесть и расслабиться. После нажатия кнопки ОК, чтобы закрыть диалоговое окно,我们Сразу成功из ВоляCMSISприсоединиться к Понятнокомпилироватьсередина。здесь,потому чтомы выбираем Понятноиспользоватьисходный кодизспособкомпилироватьCMSIS,поэтому Также может потребоватьсяCMSIS-DSPизисходный кодруководитьдополнительныйизнастраивать。

На этом этапе мы сможем успешно завершить компиляцию.

Шаг 3: Настройка модуля

существуют Развернуть в Менеджере проектов Acceleration,и Найдено новое, чтобы присоединитьсяизфайл адаптера драйвера дисплея(arm_2d_disp_adapter_0.h)

После двойного щелчка мыши, чтобы открыть его, выберите Мастер настройки в левом нижнем углу редактора существования.

Войдите в графический интерфейс настройки:

Заполните правильную информацию в зависимости от вашего экрана:

  • Количество цветовых битов(Screen Colour Depth)
  • Боковое разрешение(Width of the screen)
  • вертикальное разрешение(Height of the Screen)
  • Ширина блока буфера частичного обновления(Width of the PFB Блок), обычно предпочтительна ширина всей строки или половины строки пикселей.
  • Высота блока буфера частичного обновления(Height of the PFB Block),Общая рекомендация — 1/10 высоты пикселя экрана. существуют Когда оперативной памяти не хватает,Рассмотрим 8 или 1.
  • При расчете частоты кадров,Сколько кадров в среднем обновляются один раз?(Number of iterations),По умолчанию 30,Выбор 0 отключит функцию расчета частоты кадров в реальном времени.
  • Режим статистики частоты кадров в реальном времени (режим расчета FPS), по умолчанию используется значение FPS только для рендеринга (рассчитывается только частота кадров части рендеринга Arm-2D), а Real FPS вычисляет фактическую частоту кадров.

После сохранения закройте окно.

существоватьAccelerationсерединаоказаться arm_2d_cfg.h,

Откройте и его Configuration Wizard Графический интерфейс настройки:

потому что Мы использовали это Extraв Некоторыймодуль,например Contols и LCD ASCII Printf,поэтому需要提供переписыватьсяизинформация:например Экраниз Количество цветовых битов, резолюций printf буфер строки печатиизразмер(Значение по умолчанию:64индивидуальныйASCIIхарактер)。

для Arm-2D General Configuration Здесь необходимо объяснить некоторые варианты:

  • Enable Asynchronous Programmers' model support:На данный момент рекомендуется закрыть
  • Enable anti-alias support for all transform operations:давать возможностьвращать、Сглаживание для операций масштабирования
  • Enable Support for accessing individual Colour channels:когдатыиз Цель Экранда RGB888,иты又需要поддерживать PNG Рекомендуется открывать его во время фотографирования.

Patches for improving performance Есть несколько вариантов в обмен на повышение производительности путем взлома некоторых функций или функций, которые нельзя использовать. Рекомендуемый подход:

  1. Не проверять
  2. существования После заполнения заявки попробуйте последовательно: Если нет очевидного влияния на заявку,Просто проверьте это в обмен на определенное улучшение производительности.

Шаг 4. Добавьте код

существовать main() Файл исходного кода функции существует, содержит файлы заголовков:

Язык кода:javascript
копировать
#include "arm_2d.h"

исуществовать main()функциясередина Завершить пару arm-2d Инициализация:

Язык кода:javascript
копировать
int main(void) 
{
    system_init();     // включать LCD Инициализация системы в пределах существующего
    ...
    arm_irq_safe {
        arm_2d_init(); // инициализация arm-2d
    }
    ...
    while(1) {
        ...
    }
}

Вышеупомянутое завершает пару arm-2d Инициализация модуля.

Если вы используете Display Adapter Чтобы облегчить перенос, вам также необходимо включить следующие файлы заголовков:

Язык кода:javascript
копировать
#include "arm_2d_disp_adapters.h"

исуществовать main() Добавьте код в функцию:

Язык кода:javascript
копировать
int main(void) 
{
    system_init();     // включать LCD Инициализация системы в пределах существующего
    ...
    arm_irq_safe {
        arm_2d_init(); // инициализация arm-2d
    }

    // инициализация Display Adapter 0
    disp_adapter0_init();
    
    while (true) {
        ...
        // осуществлять Display Adapter обновить задачу
        disp_adapter0_task();
        ...
    } 
}

Скомпилируйте и скачайте,если все пойдет хорошо,На экране вы должны увидеть что-то похожее на следующее:

В середине экрана находится постоянно вращающийся «круг загрузки», а внизу экрана информация о текущей частоте кадров — здесь число после FPS представляет частоту кадров «отрисовки» (число после двоеточия — время, соответствующее частоте кадров) Этот отдельный метод отображения полностью подготовлен для того, чтобы облегчить нам поиск узких мест в производительности.

На данный момент мы завершили всю Arm-2Dизразвертывать。

【Как начать играть? 】

Полагаю, что многие друзья рады такому существованию, но и сбиты с толку:

Как мне играть?

Как здесь распечатать текст?

Как нарисовать закругленный прямоугольник?

Как нарисовать малый круг смерти?

Что мне делать со своим собственным интерфейсом?

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

  • существовать Acceleration можно найти в arm_2d_disp_adapter_0.c ,открой этоназад МожеткоказатьсяКод ключа с использованием Arm-2d
  • Display Adapter Он содержит сцену по умолчанию (Scene), а его функция рисования следующая:
Язык кода:javascript
копировать
static
IMPL_PFB_ON_DRAW(__pfb_draw_handler)
{
    ARM_2D_UNUSED(pTarget);
    ARM_2D_UNUSED(ptTile);
    ARM_2D_UNUSED(bIsNewFrame);

    arm_2d_canvas(ptTile, __top_container) {
    
        arm_2d_fill_colour(ptTile, NULL, GLCD_COLOR_WHITE);
        
        arm_2d_align_centre(__top_container, 100, 100) {
            draw_round_corner_box(  ptTile,
                                    &__centre_region,
                                    GLCD_COLOR_BLACK,
                                    64,
                                    bIsNewFrame);
        }

        busy_wheel2_show(ptTile, bIsNewFrame);
    }

    arm_2d_op_wait_async(NULL);

    return arm_fsm_rt_cpl;
}
  • Обе вышеуказанные функции включают в себя два важных параметра. ptTile и bIsNewFrame
    • ptTile на самом делето есть虚拟Экран,Это мы делаем это2Dдействоватьиз ЦельTile(Target Tile)
    • потому что две вышеуказанные функциисуществовать до завершения рисования рамки,Фактически, он будет вызываться несколько раз.,поэтомуbIsNewFrame Используется для обозначения первого вызова при отрисовке кадра содержимого — обычно мы проверяем этот флаг на истинность. Настройка различных параметров рисования (таких как положение, размер и т. д.) допускается только в том случае, если — в противном случае обязательно возникнет проблема разрыва изображения.
  • и LCD Операции, связанные с базовым обновлением существующей функции __glcd0_pfb_render_handlerсерединаруководить:
Язык кода:javascript
копировать
__WEAK
IMPL_PFB_ON_LOW_LV_RENDERING(__glcd0_pfb_render_handler)
{
    const arm_2d_tile_t *ptTile = &(ptPFB->tTile);

    ARM_2D_UNUSED(pTarget);
    ARM_2D_UNUSED(bIsNewFrame);

    Disp0_DrawBitmap(ptTile->tRegion.tLocation.iX,
                    ptTile->tRegion.tLocation.iY,
                    ptTile->tRegion.tSize.iWidth,
                    ptTile->tRegion.tSize.iHeight,
                    (const uint8_t *)ptTile->pchBuffer);

    arm_2d_helper_pfb_report_rendering_complete(
                    &DISP0_ADAPTER.use_as__arm_2d_helper_pfb_t,
                    (arm_2d_pfb_t *)ptPFB);
}

Если присмотреться, то легко обнаружить, что эта функция на самом деле вызывается одна за другой. Disp0_DrawBitmap() и arm_2d_helper_pfb_report_rendering_complete() функция.

【ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ】

Проблема 1. Не удалось установить CMSIS-Pack.

Если вы устанавливаете существование cmsis-pack Сделав это, вы столкнетесь со следующими проблемами:

Не паникуйте,в целомУстановите последнюю версию MDK и не изменяйте каталог установки по умолчанию.Сразу Можеткрешать。Боюсь неприятностейиз小伙伴Можетксуществоватьсосредоточиться на【мышление на голом железе], а затем отправьте ключевое слово «MDK», чтобы получить последнюю ссылку на сетевой диск MDK.

Стоит подчеркнуть, что MDK предоставляет версию Community для сообщества открытого исходного кода, которая практически не имеет ограничений (нет ограничений по чипам, размеру кода или отладке), за исключением того, что ее нельзя использовать в коммерческих целях. Версия сообщества по сути является лицензией, и используемые установочные файлы ничем не отличаются от других версий. Друзья, которым интересна эта «официальная версия белой проституции», могут получить ее по ссылке ниже:

https://www.keil.arm.com/mdk-community/

еслитыиз Очень не повезло,Даже установка последней версии MDK не может решить вышеуказанную проблему.,还МожеткпроходитьPack-Installerиз Функция импорта является наиболееназад“Попробуйте”——Открыть Pack Installer затем нажмите File->Import

Во всплывающем окне выберите «Загрузить получение». cmsis-pack установить.

Если это по-прежнему не работает, пожалуйста, подтвердите свой MDK Стоит ли устанавливатьсуществоватьпо умолчаниюиз В каталоге установки(C:\Keil_v5),если не,Попробуйте переустановить в каталог по умолчанию.

Если не работает... если не работает, просто смените компьютер.

Вопрос 4: Время компиляции сообщает о повторяющихся определениях определенных системных функций, таких как __set_PRIMASK и т. д.

Это потому что чтопроектсередина Принесите свой собственныйизcmsisВерсия слишком низкая,ииRTEМесторазвертыватьизcmsisконфликтпривести киз。Пожалуйста, обратитесь к статье для конкретных решений.《Руководство для игроков CMSIS по «Достижениям преступного мира»》。

Вопрос 3: Ошибки, связанные с ARM_PRIVATE(), обнаруженные во время компиляции

Такие вопросы, потому что чтоваш MDK Проект сохранения существования является независимым CMSIS и CMSIS и Добавлено в RTE CMSIS житьсуществоватьконфликт(проектв CMSIS Версия слишком старая),Пожалуйста, обратитесь к статье для конкретных решений.《Руководство для игроков CMSIS по «Достижениям преступного мира»》,Я не буду здесь вдаваться в подробности.

Также проверьте, включена ли у вас Расширения GNUипереписыватьсяизCстандартный(Arm Compiler 5, чтобы открыть C99,Arm Compiler 6, чтобы открыть gnu99

Вопрос 4: Подскажите, что __aeabi_assert не найден

Это потому что что Мы существуем выбрано в проекте microLibmicroLib не для assert.h Предоставляется базовой реализацией. Просто добавьте следующий код:

Язык кода:javascript
копировать
#include "arm_2d.h"
#include "cmsis_compiler.h"

#if defined(__MICROLIB)
void __aeabi_assert(const char *chCond, const char *chLine, int wErrCode) 
{
    ARM_2D_UNUSED(chCond);
    ARM_2D_UNUSED(chLine);
    ARM_2D_UNUSED(wErrCode);
    while(1) {
        __NOP();
    }
}
#endif

Вопрос 4: Подскажите, что Disp0_DrawBitmap не найден

когда ты выбираешь Display Adapter При обслуживании пользователи должны предоставить LCD Функция обновления данных Требуется, если у вас имеется несколько экранов. RTE Ливэй Display Adapter Выберите соответствующее количество:

На этом этапе мы можем существовать Acceleration См. добавленные файлы кода:

Обратите внимание, что здесь после каждого файла указан соответствующий номер, относящийся к соответствующему номеру. Display Adapter шаблон. И каждый Display Adapter Всем им нужна собственная базовая функция обновления: Dispn_DrawBitmap(). Подробности см. в главе [Подготовка] этой статьи.

Вопрос 5: Возникает аппаратный сбой

Проверьте размер стека, рекомендуемое существование 0xC00 (3K) и выше — легко.

[Произнесите слова, стоящие за существованием]

Пока вы его установили arm-2d изcmsis-pack,иприготовься ПонятноLCDДрайвер низкого уровняфункция Disp0_DrawBitmap() (Не забудьте заранее протестировать, чтобы соответствовать требованиям),Так аккуратноиндивидуальныйArm-2Dизразвертывать工作几乎Можетксуществовать3минуты Внутри Легко завершить。

Эта статья кажется такой длинной,На самом деле это потому, что он содержит множество объяснений для «разрешения сомнений» и множество подробностей о том, как избежать ловушек для пользователей. После того, как вы успешно выполнили руководство,,Увидимся в следующий разразвертывать时Сразу Может谓轻车熟路Понятно——Если возможно, попробуйте использовать последнюю версию MDK. Это рекомендация многих пожилых людей в сообществе. Это поможет вам избежать 90% ошибок и избежать большого количества ненужной траты времени.

новая версия cmsis-pack Помимо упрощения пользовательского развертывания, он также представляет простой и удобный инструмент разработки для пользователей «голого железа». GUI приложениеиз Служить:игрок сцены(scene player)——Это позволяет нам разделить интерфейс на несколько сцен.:

  • Каждая сцена состоит из (необязательно) заднего и переднего плана.
  • 用户Можетк
    • Заранее настройте серию сцен, а затем переключайтесь между ними одну за другой.
    • Вы также можете добавлять (Append) новые сцены через API во время выполнения.
  • Переключение сцен автоматически позволит избежать проблем с разрывом кадров.

Хотя arm_2d_disp_adapter_0.c Нам уже продемонстрировали Понятноигрок сценыизиспользовать,Но чтобы снизить порог обучения каждого,В следующей статье я подробно познакомлю вас с этим недорогим методом проектирования графического интерфейса, основанным на сценариях.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose