Кликните здесь (README_CN.md), чтобы посмотреть китайскую версию.
RMP — это небольшая операционная система реального времени, разработанная для обеспечения формальной надёжности и простоты. Надёжность достигается за счёт применения формальных методов (ещё не завершены; проведено только тестирование методом белого ящика со 100% покрытием ветвей). Ядро можно рассматривать как предварительно сертифицированное IEC 61508 SIL2 или EAL 4. Предоставляются все основные функции, необходимые для ОСРВ, но не более того. Это гарантирует, что система представляет собой минимально возможное ядро и также подходит для использования в качестве гостевой операционной системы при размещении на мониторах виртуальных машин.
Эта операционная система намного компактнее, чем любые другие ОСРВ, особенно по сравнению с FreeRTOS или RT-Thread, и её понимание должно быть достаточно простым. Тем не менее она предоставляет полный набор функций, которые могут вам понадобиться при разработке микроконтроллеров с ограниченными ресурсами, таких как эффективное управление памятью, антиалиасинг графики и различные вспомогательные функции. Все эти функции представлены в одном файле .C и не требуют дополнительного потребления оперативной памяти!
Руководство по операционной системе можно найти здесь (/Document/Public).
Ознакомьтесь с разделами «Внесение вклада» (CONTRIBUTING.md) и «Кодекс поведения» (CODE_OF_CONDUCT.md), если хотите внести свой вклад, и с шаблоном запроса на вытягивание (PULL_REQUEST_TEMPLATE.md), когда делаете запросы на вытягивание. Это программное обеспечение является официальной работой EDI и, таким образом, принадлежит общественному достоянию. Все авторские права, принадлежащие EDI, предоставляются всем субъектам в соответствии со всеми применимыми законами в максимальной степени.
Что касается пакетов, предоставляемых поставщиками, и библиотек абстракции оборудования, пожалуйста, обратитесь к репозиторию M0A00_Library (https://github.com/EDI-Systems/M0A00_Library), чтобы загрузить и использовать их должным образом.
Существующие ОСРВ можно разделить на три категории: корпоративные, хоббистские и обучающие. Корпоративные системы обычно разрабатываются для реального развёртывания и являются отличными универсальными решениями, но они, по крайней мере, помещают все верификационные документы и методы за платный доступ, если сам код бесплатен. Хоббистских систем много, новые репозитории создаются почти каждый день, но им не хватает долгосрочной приверженности, и они часто заброшены через некоторое время. Обучающие системы созданы для студентов колледжей и не обладают глубиной, когда речь заходит о продвинутых темах, таких как верификация.
С этой целью RMP стремится создать полностью открытую, способную и понятную систему, сертифицированную до зубов. Вы можете использовать репозиторий тремя способами: (1) модифицировать и развернуть его в реальных условиях, (2) следовать его коду и документам, чтобы получить полное представление обо всех деталях задействованных технологий, и (3) отказаться от системы и… Реализуйте проект, опираясь на знания, полученные в рамках этой работы.
Разработка системы будет проходить в три этапа. На первом этапе мы не будем заранее писать формальную спецификацию, а разработаем систему как любую другую любительскую систему. Мы перенесём систему на максимальное количество архитектур, чтобы проверить гибкость её абстракции, и запустим как можно больше классов приложений, чтобы гарантировать удобство использования её интерфейса.
На втором этапе мы используем первую реализацию в качестве руководства для создания формальной спецификации системы и докажем, что модель системы обладает определёнными желаемыми свойствами. На последнем этапе мы разработаем формальную семантику выбранного подмножества C и перепишем всё ядро в соответствии с формальной моделью, создавая при этом необходимые документы для функциональной безопасности (в частности, IEC 61508 SIL 4 и ISO 26262 ASIL D, возможно, EAL, и сначала сосредоточимся на первых), и разместим весь процесс (за исключением тех, на которые у нас нет авторских прав, то есть стандартов) в открытом доступе.
Конкретные сроки разработки системы не установлены. В настоящее время первый этап считается завершённым, а второй этап продолжается. Если вы заинтересованы в проекте, присоединяйтесь; в отличие от других проектов, здесь приветствуются новички.
Скомпилируйте 32-битный двоичный файл Linux здесь и посмотрите результаты тестов!
Скачайте предварительно скомпилированную игру здесь, загрузите её в свой любимый эмулятор (или карту памяти Namco 163 и подключите её к реальной консоли) и посмотрите результаты тестов!
Карта памяти Namco 163 обязательна, так как система использует её для обеспечения таймеров IRQ для измерения производительности. Namco 163 — единственный картовод, который имеет читаемый счётчик отметок времени и может быть найден на картриджах, которые также содержат такие известные игры, как «Звёздные войны» и «Sangokushi II: Hanou no Tairiku (三国志II 覇王の大陸)». Чип иногда называют Namcot 163 или iNES mapper 019.
Создать поток
RMP_Thd_Crt(&Thd_1 /* Блок управления потоком */,
Func_1 /* Функция входа */,
&Stack_1 /* Адрес стека */,
sizeof(Stack_1), /* Размер стека */,
(void*)0x12345678 /* Параметр */,
1 /* Приоритет */,
5 /* Временные интервалы */);
Удалить поток
RMP_Thd_Del(&Thd_1 /* Блок управления потоком */);
Приостановить поток
RMP_Thd_Suspend(&Thd_1 /* Блок управления потоком */);
Возобновить поток
RMP_Thd_Resume(&Thd_1 /* Блок управления потоком */);
void Func_1(void* Param)
{
RMP_LOG_S("Переданный параметр ");
RMP_LOG_H((ptr_t)Param);
RMP_LOG_S("\r\n");
while(1)
{
RMP_Thd_Delay(30000);
RMP_LOG_S("Задержка 30000 циклов\r\n\r\n");
};
}
void RMP_Init_Hook(void)
{
RMP_Thd_Crt(&Thd_1, Func_1, &Stack_1, sizeof(Stack_1), (void*)0x12345678, 1, 5);
}
void Func_1(void* Param)
{
ptr_t Time=0;
while(1)
{
RMP_Thd_Delay(30000);
RMP_Thd_Snd(&Thd_2, Time, RMP_SLICE_MAX);
Time++;
};
}
void Func_2(void* Param)
{
ptr_t Data;
while(1)
{
RMP-Thd-Rcv(&Data, RMP_SLICE_MAX);
``` **Перевод текста на русский язык:**
### Counting Semaphores
```C
void Func_1(void* Param)
{
while(1)
{
RMP_Thd_Delay(30000);
RMP_Sem_Post(&Sem_1, 1);
};
}
void Func_2(void* Param)
{
ptr_t Data;
while(1)
{
RMP_Sem_Pend(&Sem_1, RMP_SLICE_MAX);
RMP_LOG_S("Semaphore successfully acquired!\r\n\r\n");
};
}
void RMP_Init_Hook(void)
{
RMP_Sem_Crt(&Sem_1,0);
RMP_Thd_Crt(&Thd_1, Func_1, &Stack_1, sizeof(Stack_1), (void*)0x12345678, 1, 5);
RMP_Thd_Cрт(&Thd_2, Func_2, &Stack_2, sizeof(Stack_2), (void*)0x87654321, 1, 5);
}
/* Инициализация пула памяти */
RMP_Mem_Init(Pool, Pool_Size);
/* Выделение из пула */
Mem=RMP_Malloc(Pool, Alloc_Size);
/* Освобождение выделенной памяти */
RMP_Free(Pool, Mem);
Абсолютный минимум для RMP составляет примерно 1.6k ROM и 432 байта RAM, что достигается на порту STM32F030F4 (Cortex-M0). Это число включает в себя 60-байтовый блок управления потоком и 256-байтовый стек первого потока, а также 64-байтовый стековый блок ядра для обработки прерываний. Ядро ОС и урезанный HAL потребляют вместе 52 байта памяти. Если вы хотите ещё больше уменьшить этот объём, то HAL от производителя вам не подойдёт, и вы можете создать свой собственный.
Текущая минимальная реализация концепции, которая может завершить тестовый бенчмарк, достигнута на ATMEGA328P. Она имеет всего лишь скудные 32k Flash и 2k SRAM.
Производительность ядра в реальных условиях показана следующим образом. Все параметры компилятора установлены на максимальную оптимизацию (обычно -O3 с LTO, если доступно) и оптимизированы по времени, все значения являются средними в циклах процессора; WCET, зарегистрированный в заголовочных файлах тестов, примерно эквивалентен этому значению плюс помехи от прерывания таймера тиков.
Разница между Msgq
и Bmq
заключается в том, что в Msgq
только получатель может блокироваться, тогда как в Bmq
оба могут блокироваться.
Чип | Платформа | Сборка | Yield | Sem | FIFO | Msgq | Bmq | Mail/I | Sem/I | Msgq/I | Bmq/I | Mem | Alrm | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
RP2A03/FC-84 | MOS6502 | CC65 | 4073 | 5435 | 5435 | 2028 | 7726 | 10445 | 4831 | 5180 | 7220 | 8350 | 7484 | TBD |
RP2A03/MESEN | ... | ... | 4060 | 5439 | 5424 | 2040 | 7728 | 10443 | 4836 | 5185 | 7227 | 8355 | 7446 | TBD |
SPCE061A | unSP | GCC | 694 | 1732 | 1548 | 927 | 2671 | 3709 | 1619 | 1475 | 2242 | 2889 | 3518 | TBD |
PIC32MZ2048 | MIPS | XC32 | 190 | 345 | 305 | 150 | 475 | 620 | 295 | 260 | 370 | 465 | 365 | TBD |
... | MIPS-FR64 | . | 475 | 630 | 585 | 160 | 775 | 935 | 400 | 360 | 490 | 585 | 371 | TBD |
| Чип |
В тексте запроса присутствуют фрагменты кода на языке C, но они не содержат ошибок или опечаток, поэтому перевод выполнен корректно. | Платформа | Сборка | Производительность | Почта | Семафор | FIFO | Очередь сообщений | Буфер сообщений | Виртуальные порты (V) | Виртуальные порты при прерывании (V/I) | Память | Аварийный сигнал | | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--:| | ATMEGA328P | AVR | GCC | 408 | 719 | 686 | 313 | 1065 | — | — | N/A | TBD | | ATMEGA1284P | ... | ... | 437 | 751 | 717 | 314 | 1098 | — | — | 1680 | TBD | | ATMEGA2560 | ... | ... | 449 | 774 | 736 | 326 | 1131 | — | — | 1686 | TBD | | R5F104PJ | RL78 | CCRL | 261 | 565 | 520 | 308 | 924 | — | — | 1854 | TBD | | PIC24FJ128 | PIC24F | XC16 | 152 | 334 | 271 | 168 | 468 | — | — | 379 | TBD | | DSPIC33EP512 | DSPIC33E | ... | 214 | 447 | 353 | 219 | 608 | — | — | 448 | TBD | | MSP430F149 | MSP430 | CCS | 312 | 641 | 573 | 312 | 985 | — | — | N/A | TBD | | MSP430FR5994 | MSP430X | ... | 468 | 1054 | 891 | 492 | 1573 | — | — | 3291 | TBD | | STM32F030F4 | Cortex-M0 | Keil | 362 | 763 | 666 | 379 | 1196 | — | — | N/A | TBD | | HC32L136K8 | Cortex-M0+ | Keil | 211 | 422 | 370 | 219 | 646 | — | — | 542 | TBD | | STM32L071CB | Cortex-M0+ | Keil | 335 | 581 | 532 | 253 | 892 | — | — | N/A | TBD | | ... | ... | GCC | 337 | 656 | 600 | 284 | 947 | — | — | N/A | TBD | | STM32F103RE | Cortex-M3 | Keil | 203 | 438 | 385 | 226 | 684 | — | — | 518 | TBD | | ... | ... | GCC | TBD | TBD | TBD | TBD | TBD | — | — | TBD | TBD | | STM32F405RG | Cortex-M4F | Keil | 180 | 345 | 321 | 180 | 667 | 40 % | — | 455 | TBD | | ... | ... | GCC | 196 | 388 | 345 | 192 | 677 | 59 % | — | 411 | TBD | | STM32F767IG | Cortex-M7F | Keil | 176 | 329 | 277 | 174 | 510 | — | — | 334 | TBD | | ... | ... | GCC | 182 | 335 | 288 | 156 | 473 | — | — | 332 | TBD | | TMS570LS0432 | Cortex-R4 | CCS | 306 | 493 | 460 | 193 | 686 | — | — | 533 | TBD | | TMS570LC4357 | Cortex-R5 | ... | 275 | 479 | 467 | 216 | 746 | — | — | 482 | TBD | | TMS320F2812 | C28x | CCS | 217 | 493 | 407 | 229 | 706 | — | — | 939 | TBD | | TMS320F28335 | C28x/FPU32 | ... | 246 | 513 | 440 | 235 | 751 | — | — | 946 | TBD | | CH32V307VC | RV32IMAC | GCC | 209 | 386 | 336 | 172 | 538 | — | — | 433 | TBD | | ... | RV32IMAFC | ... | 217 | 398 | 341 | 172 | 557 | — | — | 433 | TBD | | Xeon 6326 | X86-LINUX | ... | 24k | 24k | 24k | 46 | 24k | — | — | 159 | TBD | ### Компиляция
Проекты Makefile, Keil, CCS и MPLAB для различных микроконтроллеров доступны в папке Project. Подробные инструкции по их запуску можно найти в файлах readme в каждой папке. Однако следует иметь в виду, что некоторым примерам могут потребоваться библиотеки, специфичные для поставщика, такие как STMicroelectronics HAL. Также могут потребоваться дополнительные драйверы. Их можно найти в репозитории M0A00_Library.
Чтобы запустить примеры программ, просто загрузите их на плату разработки и начните пошаговую отладку. В некоторых примерах будет использоваться один или два светодиода для индикации состояния системы. В этом случае необходимо заполнить функции оболочки мигания светодиодов.
Для использования графической библиотеки и других расширенных функций обратитесь к руководству пользователя.
При развёртывании этого решения в производственной системе рекомендуется внимательно прочитать руководство в папке Document, чтобы правильно настроить все макросы.
Другие наборы инструментов на данный момент не рекомендуются и не поддерживаются, хотя в будущем их поддержка может быть реализована.
Подробности о нашем кодексе поведения и процессе отправки запросов на вытягивание можно узнать, прочитав CONTRIBUTING.md.
M5P01 R6T1.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )