Nucleus os программы для телефона
Nucleus RTOS - это операционная система реального времени (RTOS), созданная подразделением встроенного программного обеспечения компании Mentor Graphics , подразделение Siemens , поддерживающая 32- и 64-разрядные встроенные платформы. Операционная система (ОС) предназначена для реального времени встраиваемых систем для медицинских, промышленных, бытовых, аэрокосмических и Интернет вещей (ВГД) использования. Nucleus был впервые выпущен в 1993 году. Последняя версия - 3.x, включает такие функции, как управление питанием , модель процесса, 64-битная поддержка, сертификация безопасности и поддержка гетерогенных вычислительных многоядерных систем на процессорах (SOC). .
Модель процесса Nucleus добавляет разделение пространственной области для изоляции задач и модулей на SOC с помощью блока управления памятью (MMU) или блока защиты памяти (MPU), например, на основе ядер ARMv7 / 8 Cortex-A / R / M.
СОДЕРЖАНИЕ
Поддерживаемые платформы
Nucleus поддерживает множество встроенных процессоров, включая ведущие устройства ARMv7 Cortex A, R и M. Последние выпуски поддерживают 64-разрядные устройства ARMv8 . На официальном сайте есть полный список поддерживаемых устройств. Он включает 32-битные микроконтроллеры и MPU, настраиваемые устройства, а также 32-битные и 64-битные многоядерные процессоры .
История
Nucleus 1.x был впервые выпущен в 1993 году компанией Accelerated Technology (ATI) как Nucleus PLUS. Вскоре она стала одной из наиболее часто используемых ОСРВ на рынке встраиваемых систем. После раннего успеха ATI добавила поддержку сетевых , графических и файловых систем , что ускорило внедрение.
Mentor Graphics приобрела ATI в марте 2002 года, за которым вскоре последовало второе поколение Nucleus RTOS. Версия 2.x была выпущена в 2003 году, что улучшило ее переносимость между различными архитектурами и наборами инструментов. Были добавлены новые компоненты, такие как IPv6 , файловая система флэш-памяти и универсальная последовательная шина ( USB ) 2.0. Mentor заменил устаревший отладчик Codelab инструментами разработки EDGE, которые включали инструменты компилятора , отладчик , симулятор и профилировщик .
Mentor Graphics представила Nucleus 3-го поколения в 2010 году. Версия 3.x была предназначена как для высокопроизводительных микропроцессорных блоков (MPU), так и для микроконтроллеров (MCU), процессоров цифровых сигналов (DSP) и программируемых вентильных матриц (FPGA). Для устройств с ограниченными ресурсами памяти Nucleus был разработан для уменьшения размера памяти до <10 килобайт (КБ) как для кода, так и для данных.
Nucleus 3.x представил поддержку симметричной многопроцессорной обработки (SMP) и асимметричной многопроцессорной обработки (AMP) как неконтролируемого uAMP, так и контролируемого sAMP (с использованием встроенного гипервизора Mentor ). Другие дополнения в Nucleus 3.x:
- Интегрированная поддержка управления питанием для компонентов ядра и промежуточного программного обеспечения ; включает поддержку DVFS, подавления тиков и спящих режимов, включая гибернацию .
- Модель процесса для разделения памяти для поддержки динамической загрузки и выгрузки модулей приложения. Загружаемые процессы поддерживаются как на высокопроизводительных MPU, так и на младших микроконтроллерах с поддержкой аппаратного управления памятью или без нее.
- Беспроводная поддержка
- Протоколы Интернета вещей
- Сертификат безопасности для аэрокосмической, медицинской, промышленной и автомобильной промышленности
- Поддержка ARM TrustZone
- Встроенная многоядерная платформа Mentor для управления жизненным циклом IPC и процессора для проектов AMP (как контролируемый sAMP, так и неконтролируемый uAMP)
- Поддержка трассировки времени выполнения с помощью инструментов анализа на стороне хоста
В дополнение к новым функциям в версии 3.x, Nucleus переместил бизнес-модель из меню в один унифицированный пакет.
Mentor приобрел CodeSourcery в декабре 2010 года, чтобы заменить инструменты разработки EDGE на Sourcery CodeBench . Sourcery CodeBench включает в себя цепочку инструментов компилятора, отладчик и инструменты анализа трассировки. Цепочка инструментов компилятора основана на цепочке инструментов GNU. Отладчик и интегрированная среда разработки (IDE) основаны на Eclipse . Sourcery CodeBench поддерживает архитектуры ARM, IA-32 , MIPS и PPC со встроенными рабочими процессами и поддержкой ОС для Nucleus RTOS и Mentor Embedded Linux.
Nucleus 3.x представил унифицированную систему сборки и конфигурации, в которой ядро настраивается с помощью одного файла и строится как единая библиотека. Как и menuconfig в Linux, инструмент настройки на основе пользовательского интерфейса (UI), интегрированный с CodeBench, предоставляет пользователю графически выбираемые компоненты для настройки ядра во время сборки. Система конфигурации Nucleus позволяет настраивать пользователя для интеграции новых цепочек инструментов, поддержки архитектуры и свойств сборки.
Основные компоненты
Компоненты Nucleus RTOS включают:
- Ядро реального времени с упреждающим планированием на основе приоритетов
- Поддержка динамического связывания с использованием загружаемых модулей
- Интерфейсы для C ++ , интерфейса переносимой операционной системы ( POSIX ) и операционной системы реального времени Nucleus (проект TRON | TRON) microITRON
- SMP / AMP, контролируемый и неконтролируемый
- Поддержка SMP и контроль времени выполнения для привязанной области вычислений и привязки к ядрам процессора для задач и прерываний
- Поддержка 64-битных архитектур
- Возможность масштабирования для устройств с ограниченным объемом памяти
- Встроенная структура управления питанием
- Исходный код для всех компонентов
Услуги
- Инициализация на уровне выполнения и реестр
- POSIX: ядро, сеть и файловая система
- Оболочка и трассировка
- Агент отладки
- C ++
- Услуги по управлению питанием
Связь
Nucleus поддерживает возможность подключения к другим устройствам через различные интерфейсы, включая:
- USB 2.0 и 3.0
- Стеки USB Host, Function и On-The-Go (OTG)
- Bluetooth со множеством расширенных профилей ( A2DP , AVRCP , HFP , HSP и т. Д.)
- Соединение периферийных компонентов (PCI), PCI-X и PCIe
- Сеть контроллеров (CAN) и CANopen
- Secure Digital (SDIO)
- SPI, QSPI
- Межинтегральная схема ( I²C )
Файловая система
В отличие от Windows и Unix-подобных операционных систем, Nucleus не требует для работы файловой системы . Однако для сложных задач, требующих локального хранилища, Nucleus поддерживает несколько файловых систем, включая FAT, SAFE (отказоустойчивый) и LWEXT.
Несколько одновременных файловых систем
- Таблица размещения файлов ( FAT )
- БЕЗОПАСНЫЙ (отказоустойчивый источник питания высокой надежности)
- LWEXT
- Возможность установки сторонних файловых систем
Поддержка нескольких носителей
- CD-ROM
- Жесткий диск
- RAM-диск
- NOR и NAND мигают
- USB-накопитель
- SD MMC
Nucleus обеспечивает поддержку различных файловых систем и носителей с помощью прикладного программного интерфейса (API) виртуальной файловой системы, который обеспечивает доступ к поддерживаемым файловым системам и устройствам хранения с использованием одних и тех же вызовов функций независимо от основного формата хранения.
Сетевой стек Nucleus - это двойной стек IPv4 и IPv6, который поддерживает более 60 сетевых протоколов. Сетевой стек Nucleus поддерживает POSIX и предоставляет простой в использовании интерфейс приложения на основе сокетов. Краткий список поддерживаемых протоколов включает:
Безопасность
Nucleus поддерживает широкий спектр вариантов шифрования для безопасного обмена данными для защиты данных при хранении или передаче. Nucleus поставляется с OpenSSL и OpenSSL-подобным пакетом wolfSSL (ранее CyaSSL), который намного меньше OpenSSL для проектов, требующих шифрования, но ограниченных по объему памяти. Протоколы безопасности для защиты передаваемых данных включают IPsec / IKE, SSH / SSL / TLS / DTLS. Шифрование включает DES, 3DES, AES, SHA-256. Алгоритмы криптографии с открытым ключом включают RSA. Поддержка включает X.509, RADIUS и 802.1X.
Беспроводной
Поддерживаются несколько модулей Wi-Fi от разных производителей микросхем, таких как QCA, Broadcom, TI и CSR:
Графика пользовательского интерфейса
Nucleus 3.x поддерживает OpenGL и ведущие сторонние библиотеки пользовательского интерфейса. Nucleus поддерживает платформу Qt UI, которая была оптимизирована для размера кода и интегрирована в CodeBench для отладки и трассировки. Другие поддерживаемые пользовательские интерфейсы включают Embedded Wizard и Socionext CGI Studio .
Интернет вещей
Nucleus также объявила о поддержке инфраструктуры облачных вычислений Microsoft Azure.
Промышленные
Nucleus интегрирован со сторонними промышленными стеками от лидеров отрасли. Поддержка промышленного стека включает хост и клиент с унифицированной архитектурой OPC (OPC UA), а также EtherNet / IP от Softing и EtherCAT от KoenigPa .
Многоядерный
Nucleus поддерживает режим асимметричной многопроцессорной обработки (AMP) и режим симметричной многопроцессорности (SMP) для ведущих 32- и 64-разрядных гетерогенных многоядерных процессоров SoC. Nucleus также может работать как GOS со встроенным гипервизором Mentor.
При работе в режиме AMP Nucleus RTOS может сосуществовать с другими экземплярами Nucleus, Linux и / или программ без операционной системы (металлических), распределенных на других процессорах. В этом режиме каждый процессор работает независимо и ведет себя как отдельная система внутри SoC. Mentor Embedded Multicore Framework обеспечивает межпроцессное взаимодействие между операционными системами на различных ядрах и управление жизненным циклом процессора. Работа SMP влечет за собой создание экземпляра Nucleus RTOS для одновременного управления несколькими ядрами. Nucleus может распределять свои операции по всем ядрам многоядерного устройства или любому подмножеству ядер. Для этой цели Nucleus предлагает поддержку API среды выполнения для связанной области вычислений, а также задачи управления и привязки прерываний для основного назначения.
Пакеты продуктов
Nucleus RTOS упакована следующим образом:
- Nucleus ReadyStart Edition ReadyStart, который включает в себя систему времени выполнения , промежуточное ПО , BSP (все в исходном коде) и IDE, отладчик, инструменты компиляции, пакет трассировки в одном пакете. Nucleus Ready Start поставляется в версиях для ARM, MIPS и PPC. Nucleus ReadyStart добавляет в CodeBench специализированные плагины eclipse, чтобы обеспечить упрощенные рабочие процессы сборки и настройки и улучшения отладки, включая осведомленность о ядре, поддержку загружаемых модулей, инструменты трассировки и профилирования.
- Nucleus Source Code Edition содержит систему времени выполнения и промежуточное ПО, упакованные для поддержки уникальных архитектур и / или различных цепочек инструментов.
Сертификат безопасности
Nucleus SafetyCert сертифицирован на высочайший уровень безопасности согласно DO-178C , IEC 61508 , IEC 62304 и ISO 26262 .
До сих пор в этой серии статей мы рассматривали, какие функции предоставляет Nucleus SE. Сейчас пришло время посмотреть, как ее можно использовать в реальном приложении встраиваемого ПО.
Что такое Nucleus SE?
Мы знаем, что Nucleus SE — это ядро операционной системы реального времени, но нужно понимать, как оно вписывается в остальную часть приложения. А оно именно вписывается, так как в отличие от настольной операционной системы (например, Windows), приложение не запускается на Nucleus SE; ядро просто является частью программы, работающего на встраиваемом устройстве. Это наиболее распространенный вариант использования ОСРВ.
С высокоуровневой точки зрения, встраиваемое приложение — это некий код, который запускается вместе с запуском ЦП. При этом инициализируется аппаратная и программная среда, а затем вызывается функция main(), запускающая основной код приложения.
При использовании Nucleus SE (и многих других похожих ядер) отличие заключается в том, что функция main() является частью кода ядра. Эта функция просто инициализирует структуры данных ядра, а затем вызывает планировщик, что приводит к запуску кода приложений (задач). Пользователь может добавить в функцию main() любой собственный код инициализации.
Nucleus SE также включает набор функций – программный интерфейс приложения (API), предоставляющий набор функций, таких как связь и синхронизация задач, работа с таймерами, выделение памяти и т.д. Все функции API были описаны ранее в статьях данного цикла.
Вся программная часть Nucleus SE предоставляется в виде исходного кода (в основном на С). Для конфигурации кода в соответствии с требованиями конкретного приложения используется условная компиляция. Это подробно описывается в этой статье в разделе «Конфигурация».
После того как код был скомпилирован, получившиеся объектные модули Nucleus SE связываются с модулями кода приложения, в результате чего получается один двоичный образ, который обычно помещается во флеш-память встраиваемого устройства. Результатом такого статического связывания является то, что вся символьная информация остается доступной как из кода приложения, так и из кода ядра. Это полезно при отладке, однако, чтобы избежать некорректного использования данных Nucleus SE, требуется осторожность.
Поддержка CPU и инструментов
Так как Nucleus SE поставляется в виде исходного кода, она должна быть портируемой. Однако код, работающий на таком низком уровне (при использовании планировщиков, где требуется переключение контекста, то есть любой, кроме Run to Completion), не может быть абсолютно независимым от языка ассемблера. Я минимизировал эту зависимость, и для портирования на новый CPU низкоуровневого программирования почти не требуется. Использование нового набора инструментов разработки (компилятор, ассемблер, компоновщик и т.д.) также может привести к проблемам при портировании.
Настройка приложения Nucleus SE
Ключом к эффективному использованию Nucleus SE является правильная настройка. Это может выглядеть сложным, но на самом деле все достаточно логично и лишь требует систематического подхода. Почти вся настройка выполняется путем редактирования двух файлов: nuse_config.h и nuse_config.c.
Настройка nuse_config.h
Счётчики объектов
Количество объектов ядра каждого типа устанавливается значениями символа вида NUSE_SEMAPHORE_NUMBER. Для большинства объектов это значение может варьироваться от 0 до 15. Задачи являются исключением, их должно быть не менее одной. Сигналы, по сути, не являются самостоятельными объектами, так как они ассоциируются с задачами и включаются путем присвоения NUSE_SIGNAL_SUPPORT значения TRUE.
Активаторы функций API
Каждая функция API Nucleus SE может быть активирована отдельно путем присвоения символу, имя которого совпадает с именем функции (например, NUSE_PIPE_JAM), значения TRUE. Это приводит к включению кода функции в приложение.
Выбор планировщика и его настройки
Nucleus SE поддерживает четыре типа планировщиков, как было описано в одной из предыдущих статей. Используемый планировщик задается при помощи присвоения NUSE_SCHEDULER_TYPE одного из следующих значений: NUSE_RUN_TO_COMPLETION_SCHEDULER, NUSE_TIME_SLICE_SCHEDULER, NUSE_ROUND_ROBIN_SCHEDULER или NUSE_PRIORITY_SCHEDULER.
Можно настраивать и другие параметры планировщика:
NUSE_TIME_SLICE_TICKS указывает количество тиков на слот для планировщика Time Slice. Если используется другой планировщик, этот параметр должен иметь значение 0.
NUSE_SCHEDULE_COUNT_SUPPORT может быть установлен в значение TRUE или FALSE для активирования/деактивирования механизма счётчика планировщика.
NUSE_SUSPEND_ENABLE включает блокировку задач (приостановку) для множества функций API. Это значит, что вызов такой функции может привести к приостановке вызывающей задачи до освобождения ресурса. Для выбора этого параметра необходимо, чтобы NUSE_SUSPEND_ENABLE тоже имел значение TRUE.
Другие параметры
Нескольким другим параметрам тоже можно присваивать значения TRUE или FALSE для активирования/деактивирования других функций ядра:
NUSE_API_PARAMETER_CHECKING добавляет код проверки параметров вызова функций API. Обычно используется при отладке.
NUSE_INITIAL_TASK_STATE_SUPPORT задает исходное состояние всех задач как NUSE_READY или NUSE_PURE_SUSPEND. Если этот параметр отключить, все задачи будут иметь исходное состояние NUSE_READY.
NUSE_SYSTEM_TIME_SUPPORT – поддержка системного времени.
NUSE_INCLUDE_EVERYTHING – параметр, добавляющий максимальное количество функций в конфигурацию Nucleus SE. Он приводит к активации всего опционального функционала и каждой функции API сконфигурированных объектов. Используется для быстрого создания конфигурации Nucleus SE для проверки нового портирования кода ядра.
Настройка nuse_config.c
После указания конфигурации ядра в nuse_config.h необходимо инициализировать различные структуры данных, хранящиеся в ПЗУ. Это выполняется в файле nuse_config.c. Определение структур данных контролируется условной компиляцией, поэтому все структуры содержатся в копии файла nuse_config.c по умолчанию.
Данные задач
Массив NUSE_Task_Start_Address[] должен быть инициализирован значением начальных адресов каждой задачи. Обычно это просто список имен функций, без скобок. Прототипы функций входа задач также должны быть видимыми. В файле по умолчанию задача конфигурируется с именем NUSE_Idle_Task(), это может быть изменено на задачу приложения.
Если используется любой планировщик, кроме Run to Completion, каждой задаче требуется собственный стек. Для каждого стека задачи необходимо создать массив в ОЗУ. Эти массивы должны иметь тип ADDR, а адрес каждого из них должен храниться в NUSE_Task_Stack_Base[]. Предугадать размер массива сложно, поэтому лучше воспользоваться измерениями (см. раздел «Отладка» далее в этой статье). Размер каждого массива (то есть количество слов в стеке) должно храниться в NUSE_Task_Stack_Size[].
Если была включена функция для указания исходного состояния задачи (при помощи параметра NUSE_INITIAL_TASK_STATE_SUPPORT), массив NUSE_Task_Initial_State[] должен инициализироваться с состоянием NUSE_READY или NUSE_PURE_SUSPEND.
Данные пулов разделов
Если сконфигурирован хотя бы один пул разделов, то для каждого из них должен быть создан массив (типа U8) в ПЗУ. Размер этих массивов вычисляется следующим образом: (количество разделов * (размер раздела + 1)). Адреса этих разделов (то есть их имена) должны быть присвоены соответствующим элементам NUSE_Partition_Pool_Data_Address[]. Для каждого пула количество разделов и их размер должен быть помещен в NUSE_Partition_Pool_Partition_Number[] и NUSE_Partition_Message_Size[], соответственно.
Данные очередей
Если сконфигурирована хотя бы одна очередь, то для каждой из них должен быть создан массив (типа ADDR) в ОЗУ. Размер этих массивов – число элементов в каждой очереди. Адреса этих массивов (то есть их имена) должны быть присвоены соответствующим элементам NUSE_Queue_Data[]. Размер каждой очереди должен быть присвоен соответствующему элементу NUSE_Queue_Size[].
Данные семафоров
Если сконфигурирован хотя бы один семафор, массив NUSE_Semaphore_Initial_Value[] должен быть инициализирован начальными значениями обратного счетчика.
Данные таймеров приложения
Если сконфигурирован хотя бы один таймер, массив NUSE_Timer_Initial_Time[] должен быть инициализирован начальными значениями счетчиков. Кроме того, NUSE_Timer_Reschedule_Time[] должны быть присвоены значения перезапуска. Эти значения таймеров будут использоваться после того, как завершится первый цикл таймера. Если значениям перезапуска присвоены значения 0, счетчик будет остановлен после одного цикла.
Если настроена поддержка механизмов завершения счёта (присвоением параметру NUSE_TIMER_EXPIRATION_ROUTINE_SUPPORT значения TRUE), требуется создать еще два массива. Адреса механизмов завершения (просто список имен функций, без скобок) должны быть помещены в NUSE_Timer_Expiration_Routine_Address[]. Массив NUSE_Timer_Expiration_Routine_Parameter[] должен быть инициализирован значениями параметров завершения.
Какой API?
Все операционные системы в том или ином виде имеют API (программный интерфейс приложения). Nucleus SE не исключение, и функции, из которых состоит API, были подробно описаны в этом цикле статей.
Может показаться очевидным, что при написании приложения, использующего Nucleus SE, нужно использовать API так, как было описано в предыдущих статьях. Однако это не всегда так.
Для большинства пользователей API Nucleus SE будет чем-то новым, возможно даже их первым опытом использования API операционной системы. И так как он довольно простой, он может послужить хорошим введением в тему. В таком случае, порядок действий понятен.
- Приложение Nucleus SE является лишь частью системы, в которой для других компонентов используются другие операционные системы. Поэтому портируемость кода, и, что более важно, опыт использования различных операционных систем выглядят очень заманчиво.
- Пользователь имеет обширный опыт использования API другой операционной системы. Использование этого опыта также очень целесообразно.
- Пользователь хочет повторно использовать код, написанный для API другой операционной системы. Изменение вызовов API возможно, но потребует много времени.
Обертка, которая переносит функции API Nucleus RTOS (частично) на Nucleus SE распространяется вместе с Nucleus SE. Она может оказаться полезной разработчикам, имеющим опыт использования Nucleus RTOS, либо там, где в будущем возможен переход на эту ОСРВ. Эта обертка также может послужить примером при разработке аналогичных вещей.
Отладка приложений Nucleus SE
Написание встраиваемого приложения, использующего многозадачное ядро, является сложной задачей. Убедиться, что код работает и обнаружить ошибки, может оказаться очень непростой задачей. Несмотря на то, что это всего лишь код, работающий на процессоре, одновременное выполнение нескольких задач приводит к тому, что сфокусироваться на конкретном потоке выполнения довольно трудно. Это еще больше осложняется, когда несколько задач имеют общий код. Хуже всего, когда две задачи имеют абсолютно одинаковый код (но работают с различными данными). Также сложности добавляет распутывание структур данных, которые используются для реализации объектов ядра, чтобы увидеть осмысленную информацию.
Чтобы отладить приложения, построенное при помощи Nucleus SE, не требуется дополнительных библиотек или других служб. Весь код ядра доступен для чтения отладчиком. Следовательно, вся символьная информация доступна для изучения. При работе с приложениями Nucleus SE может быть использован любой современный инструмент отладки.
Использование отладчика
Инструменты отладки, созданные специально для встраиваемых систем, за 30 лет, которые они существуют, стали очень мощными. Основной характеристикой встраиваемого приложения, по сравнению с настольной программой является то, что все встраиваемые системы разные (а все персональные компьютеры довольно похожи друг на друга). Хороший отладчик встраиваемых систем должен быть гибким и иметь достаточно настроек, чтобы соответствовать разнообразию встраиваемых систем и требованиям пользователей. Настраиваемость отладчика выражается в различных формах, однако обычно в нем присутствует возможность создания скриптов. Именно эта возможность позволяет отладчику хорошо работать с приложением уровня ядра. Ниже я рассмотрю некоторые случаи использования отладчика.
Стоит заметить, что обычно отладчик – семейство инструментов, а не одна программа. Отладчик может иметь различные режимы работы, посредством которых он помогает при разработке кода на виртуальной системе либо на реальной аппаратуре.
Точки останова, учитывающие задачи
Если в программе есть общий для нескольких задач код, использование обычных точек останова при отладке усложняется. Скорее всего, вам нужно, чтобы код останавливался только при достижении точки останова в контексте определенной задачи, отладкой которой вы сейчас занимаетесь. Для этого вам необходима точка останова, которая будет учитывать задачу.
К счастью, возможность создания скриптов на современных отладчиках и доступность символьных данных Nucleus SE делают реализацию точек останова, учитывающих задачи, довольно простой вещью. Всё, что необходимо, это написать простой скрипт, который будет связан с точкой останова, которую вы хотите научить различать задачи. Этот скрипт будет принимать параметр: индекс (ID) интересующей вас задачи. Скрипт будет просто сравнивать это значение с индексом текущей задачи (NUSE_Task_Active). Если значения совпадают, выполнение программы приостанавливается. Если они различны, выполнение продолжается. Стоит заметить, что выполнение этого скрипта повлияет на выполнение приложения в реальном времени (прим. переводчика: имеется в виду, что исполнение программы будет подтормаживать относительно ее обычной работы). Однако, если скрипт не находится в цикле, который будет выполняться очень часто, это влияние будет минимальным.
Информация об объекте ядра
Некоторые отладчики могут выполнять целевой вызов функции, то есть напрямую вызывать функцию API для получения информации. Это позволяет избавиться от необходимости в дополнительном коде, однако эта функция API должна быть сконфигурирована, чтобы отладчик мог ею воспользоваться.
Возвращаемые значения вызовов API
NUSE_Mailbox_Send(mbox, msg, NUSE_SUSPSEND);
примет следующий вид:
NUSE_API_Call_Status = NUSE_Mailbox_Send(mbox, msg, NUSE_SUSPEND);
Если активирована блокировка задач, многие вызовы функций API могут возвращать только информацию об успешном завершении вызова либо о том, что объект был сброшен. Однако, если активирована проверка параметров API, вызовы API смогут возвращать множество других значений.
Задание размера стека задач и переполнение стека
Область памяти стека может быть заполнена характерным значением: чем-то иным, чем все единицы или все нули. После этого отладчик может быть использован для наблюдения за областями памяти и за тем, насколько значения будут изменены, что позволит понять степень заполненности стека. Если все области памяти были изменены, это не значит, что стек был переполнены, но может означать что его размера едва хватает, что опасно. Его следует увеличить и продолжить тестирование.
Чек-лист конфигурации Nucleus SE
В следующей статье (последней в этом цикле) будет подведен итог всей истории с Nucleus SE, а также будет предоставлена информация, которая поможет при создании реализаций Nucleus SE и их использовании.
Nucleus RTOS - операционная система реального времени (RTOS), предлагаемая подразделением Embedded Software Mentor Graphics для различных платформ центрального процессора (CPU). Nucleus RTOS является встроенным программным обеспечением и оценивается в 3 миллиарда устройств по всему миру. Разработка обычно выполняется на главном компьютере под управлением Windows или Linux. Приложения кросс-компилируются для работы на различных целевых архитектурах процессоров и тестируются с использованием реальных целевых плат или в среде моделирования [Источник 1] .
Содержание
Применение
Nucleus используется Garmin International в GPS-модуле, предназначенном для гражданской авиации, а также практически во всех китайских телефонах на базе массово используемого SOC MTK, в телефонах Siemens и Benq-Siemens 6x, 7x и 8x серий, Apple iPhone в качестве baseband прошивки, и телефонах на основе платформы Samsung Bada. Также используется в часах фирмы UWatch.
Mentor® Embedded Nucleus® RTOS позволяет системным разработчикам решать сложные задачи, требуемые современными передовыми встроенными проектами. Nucleus объединяет интегрированный программный IP, инструменты и партнерские технологии в единое, готовое к использованию решение - идеальное решение для приложений, где связь, безопасность, управление питанием и детерминированная производительность - главные составляющие.
Система Nucleus RTOS, развернута на более чем трех миллиардах устройствах, она доказала, что является надежной и полностью оптимизированной ОС реального времени. Nucleus успешно внедрилось в требовательные рынки с жесткими требованиями к безопасности, такие как промышленные системы, медицинские устройства, бортовые системы и многое другое. С Nucleus, Разработчики могут развертывать масштабируемое твердое детерминированное ядро в режиме реального времени на широком выборе процессоров, включая MCU, DSP, FPGA и MPU.
Основные характеристики
Поддержка многоядерных процессоров
Nucleus RTOS обеспечивает всестороннюю поддержку многоядерных решений с 32/64 битными решениями для uAMP, sAMP и SMP архитектур. Масштабируемость Nucleus облегчает ее использование в качестве исполнительной среды выполнения, по существу, для каждого ядра многоядерного SoC, включая ARM® Cortex®-A, ARM Cortex-R, ARM Cortex-M и DSP. Как компонент многоядерных решений Mentor Embedded, Nucleus RTOS дополняет Mentor® Embedded Hypervisor, Mentor® Embedded Multicore Framework и Mentor® Embedded Linux®, что позволяет разработчикам использовать мощные современные многоядерные системы на кристаллах (SoCs). Многоядерное решение Mentor предоставляет самый широкий набор интегрированных инструментов, технологий разделения и межпроцессорных коммуникационных решений (IPC) для управления операционными системами и ресурсами устройств на сложных многоядерных SoC-архитектурах. [Источник 2]
Масштабируемость
Nucleus® ReadyStart состоит из Nucleus RTOS с промежуточным программным обеспечением и графическими пакетами, чтобы предоставить системному разработчику гибкость, позволяющую легко добавлять или удалять компоненты, или создавать специализированный исполняемый образ с определенными пакетами подключения, сети, хранилища и пользовательского интерфейса необходимые для удовлетворения системных требований.
Модель процесса
Модель процесса Nucleus обеспечивает разбиение пространства для изоляции программных подсистем для повышения надежности системы. Эта облегченная структура обеспечивает изоляцию с использованием MMU на ядрах на базе Cortex-A или MPU на процессорах на базе Cortex-M. Без накладных расходов на виртуализацию памяти модель процесса Nucleus использует карту линейной памяти с защищенными областями памяти, которая гарантирует, что подсистемы программного обеспечения не могут обращаться к областям памяти без особых прав. Разработчики могут динамически перезагружать, перезапускать и обновлять модули приложений и ядра, не затрагивая другие модули или снимая систему.
Энергосберегающая разработка
Разработчики могут воспользоваться преимуществами последних энергосберегающих функций в современных процессорах с Nucleus Power Management Framework. Фреймворк Nucleus был построен с нуля для обеспечения поддержки DVFS, режимов сна, режимов глубокого сна, подавления галочки, переходов мощности и т. д. Разработчики могут использовать инфраструктуру управления энергопотреблением для написания приложений, удовлетворяющих требованиям низкого энергопотребления, путем вызова высокоуровневых API для управления состоянием питания отдельных устройств или всей системы.
Связность и промежуточное ПО
Nucleus поддерживает широкий спектр решений для подключения, в том числе оптимизированные USB 2.0 / 3.0, SDIO 2.0 / 3.0, Wi-Fi, Bluetooth / BLE, 802.15.4, PCIe и другие. Решения промежуточного ПО Nucleus включают в себя двойной сетевой стек IPv4 / IPv6, OPC UA, Ethernet / IP, мастер EtherCAT, службу сбора данных (DDS) и многое другое. Для удовлетворения требований безопасности устройства криптографическая поддержка Nucleus включает в себя OpenSSL, TLS и CyaSSL, а также поддержку аппаратного шифрования. Надежность Nucleus доказана прохождением строгих стандартов, связанные с сертификацией уровня 1 и 2 Wurldtech Achilles (сертификация отказоустойчивости сети).
Графика
С помощью Nucleus разработчики могут создавать богатые, динамичные и убедительные интерактивные пользовательские интерфейсы для спектра встроенных приложений. Графические решения включают в себя Qt® и другие сторонние коммерческие графические пакеты, чтобы предоставить инфраструктуру пользовательского интерфейса для целого ряда устройств и удовлетворить требованиям богатой трехмерной графики для решений пользовательского интерфейса, ограниченных ресурсами.
Безопасность
Решения Nucleus для обеспечения безопасности включают в себя целый ряд технологий безопасности, обеспечивающих поддержку ARM TrustZone, высоконадежную загрузку, корень доверия, безопасное хранение и защиту данных при передаче.
Интегрированная среда разработки CodeBench IDE
Nucleus ReadyStart включает в себя полную среду разработки на основе Mentor Embedded Sourcery ™ CodeBench с инструментальными средствами GCC / C++ на основе GNU и Sourcery ™ Analyzer для охвата всех аспектов встроенной разработки, начиная от воссоздания устройств и разделения ресурсов для многоядерных устройств до оптимизации приложений.
Ядро Nucleus RTOS
Nucleus базируется на архитектуре микро-ядра, которая может находиться всего в 2 килобайтах, но расширяется, чтобы охватить всю поддержку протокола, устройства и подключения, которая имеется в полнофункциональных операционных системах, включая многоядерные, и приложениях, требующих защиты памяти для повышения надежности системы. [Источник 3] Особенности ядра Nucleus RTOS:
Nucleus RTOS - это операционная система реального времени (RTOS), созданная подразделением встроенного программного обеспечения компании Mentor Graphics , подразделение Siemens , поддерживающая 32- и 64-разрядные встроенные платформы. Операционная система (ОС) предназначена для реального времени встраиваемых систем для медицинских, промышленных, бытовых, аэрокосмических и Интернет вещей (ВГД) использования. Nucleus был впервые выпущен в 1993 году. Последняя версия - 3.x, включает такие функции, как управление питанием , модель процесса, 64-битная поддержка, сертификация безопасности и поддержка гетерогенных вычислительных многоядерных систем на процессорах (SOC). .
Модель процесса Nucleus добавляет разделение пространственной области для изоляции задач и модулей на SOC с помощью блока управления памятью (MMU) или блока защиты памяти (MPU), например, на основе ядер ARMv7 / 8 Cortex-A / R / M.
СОДЕРЖАНИЕ
Поддерживаемые платформы
Nucleus поддерживает множество встроенных процессоров, включая ведущие устройства ARMv7 Cortex A, R и M. Последние выпуски поддерживают 64-разрядные устройства ARMv8 . На официальном сайте есть полный список поддерживаемых устройств. Он включает 32-битные микроконтроллеры и MPU, настраиваемые устройства, а также 32-битные и 64-битные многоядерные процессоры .
История
Nucleus 1.x был впервые выпущен в 1993 году компанией Accelerated Technology (ATI) как Nucleus PLUS. Вскоре она стала одной из наиболее часто используемых ОСРВ на рынке встраиваемых систем. После раннего успеха ATI добавила поддержку сетевых , графических и файловых систем , что ускорило внедрение.
Mentor Graphics приобрела ATI в марте 2002 года, за которым вскоре последовало второе поколение Nucleus RTOS. Версия 2.x была выпущена в 2003 году, что улучшило ее переносимость между различными архитектурами и наборами инструментов. Были добавлены новые компоненты, такие как IPv6 , файловая система флэш-памяти и универсальная последовательная шина ( USB ) 2.0. Mentor заменил устаревший отладчик Codelab инструментами разработки EDGE, которые включали инструменты компилятора , отладчик , симулятор и профилировщик .
Mentor Graphics представила Nucleus 3-го поколения в 2010 году. Версия 3.x была предназначена как для высокопроизводительных микропроцессорных блоков (MPU), так и для микроконтроллеров (MCU), процессоров цифровых сигналов (DSP) и программируемых вентильных матриц (FPGA). Для устройств с ограниченными ресурсами памяти Nucleus был разработан для уменьшения размера памяти до <10 килобайт (КБ) как для кода, так и для данных.
Nucleus 3.x представил поддержку симметричной многопроцессорной обработки (SMP) и асимметричной многопроцессорной обработки (AMP) как неконтролируемого uAMP, так и контролируемого sAMP (с использованием встроенного гипервизора Mentor ). Другие дополнения в Nucleus 3.x:
- Интегрированная поддержка управления питанием для компонентов ядра и промежуточного программного обеспечения ; включает поддержку DVFS, подавления тиков и спящих режимов, включая гибернацию .
- Модель процесса для разделения памяти для поддержки динамической загрузки и выгрузки модулей приложения. Загружаемые процессы поддерживаются как на высокопроизводительных MPU, так и на младших микроконтроллерах с поддержкой аппаратного управления памятью или без нее.
- Беспроводная поддержка
- Протоколы Интернета вещей
- Сертификат безопасности для аэрокосмической, медицинской, промышленной и автомобильной промышленности
- Поддержка ARM TrustZone
- Встроенная многоядерная платформа Mentor для управления жизненным циклом IPC и процессора для проектов AMP (как контролируемый sAMP, так и неконтролируемый uAMP)
- Поддержка трассировки времени выполнения с помощью инструментов анализа на стороне хоста
В дополнение к новым функциям в версии 3.x, Nucleus переместил бизнес-модель из меню в один унифицированный пакет.
Mentor приобрел CodeSourcery в декабре 2010 года, чтобы заменить инструменты разработки EDGE на Sourcery CodeBench . Sourcery CodeBench включает в себя цепочку инструментов компилятора, отладчик и инструменты анализа трассировки. Цепочка инструментов компилятора основана на цепочке инструментов GNU. Отладчик и интегрированная среда разработки (IDE) основаны на Eclipse . Sourcery CodeBench поддерживает архитектуры ARM, IA-32 , MIPS и PPC со встроенными рабочими процессами и поддержкой ОС для Nucleus RTOS и Mentor Embedded Linux.
Nucleus 3.x представил унифицированную систему сборки и конфигурации, в которой ядро настраивается с помощью одного файла и строится как единая библиотека. Как и menuconfig в Linux, инструмент настройки на основе пользовательского интерфейса (UI), интегрированный с CodeBench, предоставляет пользователю графически выбираемые компоненты для настройки ядра во время сборки. Система конфигурации Nucleus позволяет настраивать пользователя для интеграции новых цепочек инструментов, поддержки архитектуры и свойств сборки.
Основные компоненты
Компоненты Nucleus RTOS включают:
- Ядро реального времени с упреждающим планированием на основе приоритетов
- Поддержка динамического связывания с использованием загружаемых модулей
- Интерфейсы для C ++ , интерфейса переносимой операционной системы ( POSIX ) и операционной системы реального времени Nucleus (проект TRON | TRON) microITRON
- SMP / AMP, контролируемый и неконтролируемый
- Поддержка SMP и контроль времени выполнения для привязанной области вычислений и привязки к ядрам процессора для задач и прерываний
- Поддержка 64-битных архитектур
- Возможность масштабирования для устройств с ограниченным объемом памяти
- Встроенная структура управления питанием
- Исходный код для всех компонентов
Услуги
- Инициализация на уровне выполнения и реестр
- POSIX: ядро, сеть и файловая система
- Оболочка и трассировка
- Агент отладки
- C ++
- Услуги по управлению питанием
Связь
Nucleus поддерживает возможность подключения к другим устройствам через различные интерфейсы, включая:
- USB 2.0 и 3.0
- Стеки USB Host, Function и On-The-Go (OTG)
- Bluetooth со множеством расширенных профилей ( A2DP , AVRCP , HFP , HSP и т. Д.)
- Соединение периферийных компонентов (PCI), PCI-X и PCIe
- Сеть контроллеров (CAN) и CANopen
- Secure Digital (SDIO)
- SPI, QSPI
- Межинтегральная схема ( I²C )
Файловая система
В отличие от Windows и Unix-подобных операционных систем, Nucleus не требует для работы файловой системы . Однако для сложных задач, требующих локального хранилища, Nucleus поддерживает несколько файловых систем, включая FAT, SAFE (отказоустойчивый) и LWEXT.
Несколько одновременных файловых систем
- Таблица размещения файлов ( FAT )
- БЕЗОПАСНЫЙ (отказоустойчивый источник питания высокой надежности)
- LWEXT
- Возможность установки сторонних файловых систем
Поддержка нескольких носителей
- CD-ROM
- Жесткий диск
- RAM-диск
- NOR и NAND мигают
- USB-накопитель
- SD MMC
Nucleus обеспечивает поддержку различных файловых систем и носителей с помощью прикладного программного интерфейса (API) виртуальной файловой системы, который обеспечивает доступ к поддерживаемым файловым системам и устройствам хранения с использованием одних и тех же вызовов функций независимо от основного формата хранения.
Сетевой стек Nucleus - это двойной стек IPv4 и IPv6, который поддерживает более 60 сетевых протоколов. Сетевой стек Nucleus поддерживает POSIX и предоставляет простой в использовании интерфейс приложения на основе сокетов. Краткий список поддерживаемых протоколов включает:
Безопасность
Nucleus поддерживает широкий спектр вариантов шифрования для безопасного обмена данными для защиты данных при хранении или передаче. Nucleus поставляется с OpenSSL и OpenSSL-подобным пакетом wolfSSL (ранее CyaSSL), который намного меньше OpenSSL для проектов, требующих шифрования, но ограниченных по объему памяти. Протоколы безопасности для защиты передаваемых данных включают IPsec / IKE, SSH / SSL / TLS / DTLS. Шифрование включает DES, 3DES, AES, SHA-256. Алгоритмы криптографии с открытым ключом включают RSA. Поддержка включает X.509, RADIUS и 802.1X.
Беспроводной
Поддерживаются несколько модулей Wi-Fi от разных производителей микросхем, таких как QCA, Broadcom, TI и CSR:
Графика пользовательского интерфейса
Nucleus 3.x поддерживает OpenGL и ведущие сторонние библиотеки пользовательского интерфейса. Nucleus поддерживает платформу Qt UI, которая была оптимизирована для размера кода и интегрирована в CodeBench для отладки и трассировки. Другие поддерживаемые пользовательские интерфейсы включают Embedded Wizard и Socionext CGI Studio .
Интернет вещей
Nucleus также объявила о поддержке инфраструктуры облачных вычислений Microsoft Azure.
Промышленные
Nucleus интегрирован со сторонними промышленными стеками от лидеров отрасли. Поддержка промышленного стека включает хост и клиент с унифицированной архитектурой OPC (OPC UA), а также EtherNet / IP от Softing и EtherCAT от KoenigPa .
Многоядерный
Nucleus поддерживает режим асимметричной многопроцессорной обработки (AMP) и режим симметричной многопроцессорности (SMP) для ведущих 32- и 64-разрядных гетерогенных многоядерных процессоров SoC. Nucleus также может работать как GOS со встроенным гипервизором Mentor.
При работе в режиме AMP Nucleus RTOS может сосуществовать с другими экземплярами Nucleus, Linux и / или программ без операционной системы (металлических), распределенных на других процессорах. В этом режиме каждый процессор работает независимо и ведет себя как отдельная система внутри SoC. Mentor Embedded Multicore Framework обеспечивает межпроцессное взаимодействие между операционными системами на различных ядрах и управление жизненным циклом процессора. Работа SMP влечет за собой создание экземпляра Nucleus RTOS для одновременного управления несколькими ядрами. Nucleus может распределять свои операции по всем ядрам многоядерного устройства или любому подмножеству ядер. Для этой цели Nucleus предлагает поддержку API среды выполнения для связанной области вычислений, а также задачи управления и привязки прерываний для основного назначения.
Пакеты продуктов
Nucleus RTOS упакована следующим образом:
- Nucleus ReadyStart Edition ReadyStart, который включает в себя систему времени выполнения , промежуточное ПО , BSP (все в исходном коде) и IDE, отладчик, инструменты компиляции, пакет трассировки в одном пакете. Nucleus Ready Start поставляется в версиях для ARM, MIPS и PPC. Nucleus ReadyStart добавляет в CodeBench специализированные плагины eclipse, чтобы обеспечить упрощенные рабочие процессы сборки и настройки и улучшения отладки, включая осведомленность о ядре, поддержку загружаемых модулей, инструменты трассировки и профилирования.
- Nucleus Source Code Edition содержит систему времени выполнения и промежуточное ПО, упакованные для поддержки уникальных архитектур и / или различных цепочек инструментов.
Сертификат безопасности
Nucleus SafetyCert сертифицирован на высочайший уровень безопасности согласно DO-178C , IEC 61508 , IEC 62304 и ISO 26262 .
Читайте также: