1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mysterywolf-RT-Thread-wrapper-of-uCOS-III

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
readme.md

RT-Thread операционная система: μC/OS-III совместимый слой

μC/OS-III RTOS Application Compatibility Layer (ACL) для RT-Thread позволяет без проблем переносить приложения, разработанные на основе μC/OS-III, на операционную систему RT-Thread.

Если вам нравится проект, пожалуйста, поставьте ему звезду. Это будет лучшей поддержкой для проекта. Если вы хотите внести свой вклад в проект, пожалуйста, fork.

0 Предварительные замечания

Этот документ содержит изображения, которые могут не загрузиться при доступе к GitHub из-за ограничений китайского сегмента интернета. В этом случае рекомендуется скачать или клонировать проект и прочитать файл «docs/中文说明文档.pdf».

1 Введение

Это совместимый слой для операционной системы RT-Thread, который позволяет легко переносить проекты, основанные на μC/OS-III от американской компании Micrium, на RT-Thread. При разработке и написании слоя учитывались особенности оригинальной версии μC/OS-III. Проект полностью написан на языке C.

Поддержка версий: μC/OS-III 3.00–3.08.

Видеообзор и обучающий курс: https://www.bilibili.com/video/BV1b54y1U7AG.

1.1 Другие совместимые слои для RT-Thread

1.2 Для кого подходит этот слой?

Он подойдёт тем, кто хочет перейти с μC/OS-III на RT-Thread и имеет опыт работы с μC/OS-III: слой поможет быстро перенести проект на RT-Thread с минимальными затратами времени и усилий. Также он может быть полезен для переноса старых проектов на RT-Thread или для разработки новых продуктов на этой платформе, если у разработчиков есть опыт работы с μC/OS. Слой помогает избежать ошибок, связанных с переходом с одной операционной системы на другую.

Например, он учитывает следующие различия между μC/OS-III и RT-Thread:

  1. Различия в функциях приостановки и возобновления задач. RT-Thread не поддерживает вложенную приостановку и возобновление задач, в то время как μC/OS-III это делает.
  2. Различия в параметрах программных таймеров.
  3. Различия в данных стека задач.

Слой также обеспечивает совместимость с программным обеспечением μC/Probe от Micrium, которое позволяет просматривать и отлаживать информацию о RT-Thread и μC/OS-III через графический интерфейс.

1.3 Информация о версиях

Компонент Версия Конфигурационный файл Описание
RT-Thread nano 3.1.3 rtconfig.h
μC/OS-III 3.03.00 os_cfg_app.h, os_cfg.h, os_app_hooks.c Совместимый слой совместим со всеми версиями μC/OS-III 3.00.00-3.08.00
μC/CPU 1.30.00 cpu_cfg.h Частично обновлён до последней версии, совместим со всем программным обеспечением Micrium
μC/LIB 1.39.00 lib_cfg.h Последняя версия

1.4 Веб-сайты

RT-Thread: https://www.rt-thread.org/.

Документация: https://www.rt-thread.org/document/site/tutorial/nano/an0038-nano-introduction/.

μCOS-III: https://www.micrium.com/.

Документация: https://doc.micrium.com/display/kernel304/uC-OS-III+Documentation+Home.

2 Использование

2.1 Keil-MDK имитационный проект

Проект основан на платформе STM32F103.

Путь к проекту Keil: rt-thread-3.1.3/bsp/stm32f103/Project.uvprojx.

Необходимо установить RT-Thread Nano-3.1.3 Keil Support Package заранее.

Обратите внимание, что для отладки используется USART2, а не USART1.

usart2

2.2 Шаги миграции

(Если вы используете RT-Thread Nano, следуйте этим шагам; если вы используете полную версию RT-Thread, вы можете сразу перейти к разделу «6 Env инструмент автоматизации конфигурации в проекте»).

  1. Добавьте все файлы из папок uCOS-III, uC-LIB и uC-CPU в свой проект, сохраняя исходную структуру папок. По сравнению с исходной версией μCOS-III добавлен файл os_rtwrap.c, который обеспечивает поддержку преобразования между RT-Thread и μCOS-III.
  2. Просмотрите файл μCOS-III/os.h и обратите внимание на коды ошибок. Эти коды ошибок отличаются от исходных кодов ошибок μCOS-III. Обратите внимание: не следует открывать закомментированные члены перечисления кодов ошибок, так как они могут вызвать ошибки компиляции при миграции, предупреждая пользователей о том, что эти коды ошибок больше не доступны в совместимом слое.
  3. Настройте файлы os_cfg.h и os_cfg_app.h. Каждый параметр конфигурации описан в этих файлах и соответствует исходной версии μCOS-III. Если есть различия, они объясняются в комментариях. Исходные параметры конфигурации μCOS-III описаны в следующих источниках: a) «Встроенные операционные системы реального времени μC/OS-III», Пекинское издательство авиационного университета гражданской авиации, переводчики Гун Хуэй и др., редактор Шао Бэйбэй. b) Онлайн-документация Micrium μCOS-III (https://doc.micrium.com/display/kernel304/uC-OS-III+Features+os_cfg.h).
  4. В исходной версии μCOS-III функции обратного вызова таймера вызываются в потоке таймера, а не в прерывании. Поэтому для использования программного таймера μCOS-III необходимо установить макроопределение RT_USING_TIMER_SOFT равным 1 в файле rtconfig.h. 3.2 Крючки (хуки) функций

μCOS-III предоставляет только хуки для μCOS-III-совместимого слоя. Например, если вы зарегистрировали функцию OSTaskDelHook, она будет вызываться только при вызове функции OSTaskDel, но не при вызове rtt_thread_detach (этот хук обрабатывается хуками RTT). Это сделано для того, чтобы слои μCOS-III и RTT были чётко разделены и μCOS-III не вмешивался во внутренние транзакции RTT.

Хуки μCOS-III реализованы в двух файлах: os_cpu_c.c и os_app_hooks.c. В соответствии с концепцией μCOS-III, файл os_cpu_c.c предоставляет исходные хуки функций (то есть эти хуки вызываются соответствующими функциями напрямую), этот файл и его внутренние хуки написаны инженерами по миграции и не должны изменяться прикладными инженерами. Файл os_cpu_c.c также предоставляет соответствующие указатели функций для регистрации и использования хуков в файле os_app_hooks.c, который может быть изменён прикладными инженерами. Другими словами, мы можем размещать в файле os_app_hooks.c только те функции, которые необходимо вызывать из хуков.

Следующие оригинальные хуки μCOS-III будут отменены и переданы RT-Thread:

void          OSTaskReturnHook          (OS_TCB *p_tcb);
void          OSTaskSwHook              (void);
void          OSTimeTickHook            (void);

Соответствующие прикладные хуки также будут отменены:

void  App_OS_TaskReturnHook (OS_TCB  *p_tcb);
void  App_OS_TaskSwHook (void);
void  App_OS_TimeTickHook (void);

3.3 Статистика задач (OS_StatTask(), os_stat.c)

В μCOS-III статистика задач является системной задачей, которая может выполнять некоторые статистические операции во время работы системы, такие как подсчёт общего использования ЦП (0,00% - 100,00%), использование ЦП каждой задачи (0,00% - 100,00%) и использование стека каждой задачи. Использование ЦП представлено целым числом от 0 до 10 000 (соответствует 0,00–100,00%).

RT-Thread не имеет статистики задач, поэтому необходимо создать задачу для совместимости со статистикой задач оригинальной версии μCOS-III. Эта задача будет автоматически создана при инициализации совместимого слоя, и пользователю не нужно вмешиваться. Пользователю нужно только вызвать глобальную переменную OSStatTaskCPUUsage, чтобы получить текущее использование ЦП, а стратегия расчёта использования ЦП такая же, как и в оригинальной версии μCOS-III.

Текущие функции реализации статистики задач:

  1. Рассчитать общее использование ЦП.
  2. Рассчитайте использование стека для каждой задачи (когда OS_CFG_DBG_EN и OS_CFG_STAT_TASK_STK_CHK_EN равны 1).

Обратите внимание, что после включения статистики задач настоятельно рекомендуется не использовать её другими задачами, и приоритет статистики задач всегда равен OS_CFG_PRIO_MAX-2u.

3.4 Блоки управления задачами и блоки управления внутренними объектами (структуры)

Этот совместимый слой максимально совместим с блоками управления задачами и внутренними объектами (структурами), чтобы обеспечить прямую работу перенесённых старых программ без изменений (хотя прямое обращение к членам структуры не рекомендуется μCOS-III).

Например, члены структуры OS_TCB включают большинство членов оригинальной версии. Если вам не нужны совместимые члены оригинальной версии, вы можете определить макрос PKG_USING_UCOSIII_WRAPPER_TINY, и структура OS_TCB будет значительно сокращена. Вы также можете отключить OS_CFG_TASK_SEM_EN, OS_CFG_TASK_Q_EN и OS_CFG_TASK_REG_TBL_SIZE, чтобы дополнительно сократить объём кода. 3.5 Глобальные переменные

В настоящее время этот уровень совместимости может использовать следующие глобальные переменные μCOS-III (расположены в файле os.h). Для получения конкретной информации о значении этих глобальных переменных, пожалуйста, обратитесь к разделу 2.2 «Шаги миграции», где перечислены справочные материалы.

#define           OSSchedLockNestingCtr     rt_critical_level()         /* Уровень вложенности блокировки                         */
#define           OSIntNestingCtr           rt_interrupt_get_nest()     /* Уровень вложенности прерывания                        */
#define           OSTCBCurPtr               ((OS_TCB*)rt_thread_self()) /* Указатель на текущий запущенный TCB                   */
                                                                        /* ПРИОРИТЕТЫ ------------------------------- */
#define           OSPrioCur                 rt_current_priority         /* Приоритет текущей задачи                             */
#define           OSPrioTbl                 rt_thread_priority_table

#if OS_CFG_APP_HOOKS_EN > 0u
OS_EXT            OS_APP_HOOK_TCB           OS_AppTaskCreateHookPtr;    /* Перехватчики приложений                              */
OS_EXT            OS_APP_HOOK_TCB           OS_AppTaskDelHookPtr;
OS_EXT            OS_APP_HOOK_VOID          OS_AppIdleTaskHookPtr;
OS_EXT            OS_APP_HOCK_VOID          OS_AppStatTaskHookPtr;
#endif

OS_EXT            OS_STATE                  OSRunning;                  /* Флаг, указывающий, что ядро работает                 */
OS_EXT            OS_STATE                  OSInitialized;              /* Флаг, указывающий на инициализацию ядра              */

#ifdef OS_SAFETY_CRITICAL_IEC61508
OS_EXT            CPU_BOOLEAN               OSSafetyCriticalStartFlag;  /* Флаг, указывающий, что все инициализировано         */
#endif

                                                                        /* СЕМАФОРЫ ------------------------------- */
#if OS_CFG_SEM_EN > 0u
#ifndef PKG_USING_UCOSIII_WRAPPER_TINY
#if OS_CFG_DBG_EN > 0u 
OS_EXT            OS_SEM                   *OSSemDbgListPtr;
#endif
OS_EXT            OS_OBJ_QTY                OSSemQty;                   /* Количество созданных семафоров                     */
#endif
#endif

                                                                        /* ОЧЕРЕДИ ----------------------------------- */
#if OS_CFG_Q_EN   > 0u
#ifndef PKG_USING_UCOSIII_WRAPPER_TINY
#if OS_CFG_DBG_EN > 0u
OS_EXT            OS_Q                     *OSQDbgListPtr;
#endif
OS_EXT            OS_OBJ_QTY                OSQQty;                     /* Количество созданных очередей сообщений             */
#endif
#endif
``` **Управление мьютексами**

/* MUTEX MANAGEMENT ------------------------- */
#if OS_CFG_MUTEX_EN > 0u
#ifndef PKG_USING_UCOSIII_WRAPPER_TINY
#if OS_CFG_DBG_EN > 0u
OS_EXT            OS_MUTEX                 *OSMutexDbgListPtr;
#endif
OS_EXT            OS_OBJ_QTY                OSMutexQty;                 /* Number of mutexes created                  */
#endif
#endif

**Флаги**

                                                                        /* FLAGS ------------------------------------ */
#if OS_CFG_FLAG_EN > 0u
#ifndef PKG_USING_UCOSIII_WRAPPER_TINY
#if OS_CFG_DBG_EN > 0u
OS_EXT            OS_FLAG_GRP              *OSFlagDbgListPtr;
#endif
OS_EXT            OS_OBJ_QTY                OSFlagQty;
#endif
#endif

**Управление памятью**

                                                                        /* MEMORY MANAGEMENT ------------------------ */
#if OS_CFG_MEM_EN > 0u
#if OS_CFG_DBG_EN > 0u
OS_EXT            OS_MEM                   *OSMemDbgListPtr;
#endif
OS_EXT            OS_OBJ_QTY                OSMemQty;                   /* Number of memory partitions created        */
#endif

**Задачи**

                                                                        /* TASKS ------------------------------------ */
#ifndef PKG_USING_UCOSIII_WRAPPER_TINY
#if OS_CFG_DBG_EN > 0u
OS_EXT            OS_TCB                   *OSTaskDbgListPtr;
#endif
OS_EXT            OS_OBJ_QTY                OSTaskQty;                  /* Number of tasks created                    */
#endif
#if OS_CFG_TASK_REG_TBL_SIZE > 0u
OS_EXT            OS_REG_ID                 OSTaskRegNextAvailID;       /* Next available Task Register ID            */
#endif
#if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
OS_EXT            OS_TICK                   OSSchedRoundRobinDfltTimeQuanta;
OS_EXT            CPU_BOOLEAN               OSSchedRoundRobinEn;        /* Enable/Disable round-robin scheduling      */
#endif

#if OS_CFG_STAT_TASK_EN > 0u
                                                                        /* IDLE TASK -------------------------------- */
OS_EXT            OS_IDLE_CTR               OSIdleTaskCtr;              

                                                                        /* STATISTICS ------------------------------- */
OS_EXT            CPU_BOOLEAN               OSStatResetFlag;            /* Force the reset of the computed statistics */
OS_EXT            OS_CPU_USAGE              OSStatTaskCPUUsage;         /* CPU Usage in %                             */
OS_EXT            OS_CPU_USAGE              OSStatTaskCPUUsageMax;      /* CPU Usage in % (Peak)                      */
OS_EXT            OS_TICK                   OSStatTaskCtr;
OS_EXT            OS_TICK                   OSStatTaskCtrMax;
OS_EXT            OS_TICK                   OSStatTaskCtrRun;
OS_EXT            CPU_BOOLEAN               OSStatTaskRdy;
OS_EXT            OS_TCB                    OSStatTaskTCB;
#endif

#if OS_CFG_TMR_EN > 0u                                                  /* TIMERS ----------------------------------- */
#ifndef PKG_USING_UCOSIII_WRAPPER_TINY 
#if OS_CFG_DBG_EN > 0u
OS_EXT            OS_TMR                   *OSTmrDbgListPtr;
#endif
OS_EXT            OS_OBJ_QTY                OSTmrQty;                   /* Number of timers created                   */
#endif
#endif

*Примечание: в запросе представлен текст, не относящийся к сфере IT.* ## 4.2 Загрузка

Поскольку официальный сервер развёрнут в США, доступ к нему из материкового Китая очень медленный, для скачивания необходимо зарегистрироваться, и программное обеспечение размещено на зарубежном Dropbox, в Китае оно недоступно. Поэтому я уже помог вам скачать и упорядочить его, чтобы оно соответствовало последней версии официального сайта.

### 4.2.1 Baidu Cloud

Обновление может привести к тому, что текущий Baidu Cloud Link станет недействительным, этот Baidu Cloud Link будет обновляться постоянно (если вы обнаружите, что ссылка недействительна, пожалуйста, сообщите мне через issue):

> Ссылка: https://pan.baidu.com/s/1WarXJcl0cf0sXfougtJ5bg
> Код извлечения: 0000

### 4.2.2 Tencent Weiyun

Обновление может привести к тому, что текущая микрооблачная ссылка станет недействительной, эта микрооблачная ссылка будет постоянно обновляться (если вы обнаружите, что ссылка недействительна, пожалуйста, сообщите мне через issue):

> Ссылка: https://share.weiyun.com/BSBqVvO5

## 4.3 Использование

Этот совместимый слой уже реализовал стыковку с μC/Probe, хотя он не может отображать всю информацию о ядре так же, как оригинальная версия μCOS-III, но большинство информации и вся ключевая информация ядра уже реализованы для стыковки с μC/Probe. В то же время пользователи могут использовать этот совместимый слой для прямого отображения и отладки информации о RT-Thread и данных через μC/Probe.**Если возникнут какие-либо странные проблемы, пожалуйста, запустите это программное обеспечение с правами администратора!**

**В настоящее время можно просматривать следующие задачи и информацию об объектах ядра.**

### 4.3.1 Доступные элементы вкладки «Task(s)»
|    Доступные элементы     |                             Описание                             |
| :---------------------: | :----------------------------------------------------------: |
|       Item            |                           Индекс списка                           |
|       Name            |                           Имя задачи                            |
|       Prio            |                         Задача приоритета                        |
|       State           | Задача состояния<br /> Ready задача готова<br /> Pend задача ожидает объект ядра <br /> Suspend задача приостановлена <br /> Delay задача задерживается |
| Pending On Object     |   Если задача находится в состоянии Pend ожидания объекта ядра, отображается тип ожидающего объекта ядра   |
|    Pending On         |   Если задача находится в состоянии Pend ожидания объекта ядра, отображается имя ожидающего объекта ядра   |
|       #Used           |                     Максимальное использование стека задач                     |
|       #Free           |                      Минимальное оставшееся пространство стека задач                  |
|       Size            |                    Начальный размер распределения стека задач                |
|    Stack Usage        |                                Использование стека                                |
|       Name            |                       Имя статического массива стека                       |
|        SP             |                     Указатель стека / базовый адрес стека                 |



### 4.3.2 Доступные элементы вкладки Semaphore(s)
|            Доступные элементы            |                   Описание                   |
| :-------------------------: | :--------------------------------------: |
|            Item            |                 Индекс списка                 |
|            Name            |                 Имя семафора                |
|          Counter           |               Количество семафоров              |
| High Priority Task Waiting | В списке задач с наивысшим приоритетом, ожидающих этот семафор, указано имя задачи |



### 4.3.3 Доступные элементы вкладки Mutex(s)
|            Доступные элементы            |                   Описание                   |
| :-------------------------: | :--------------------------------------: |
|            Item            |                 Индекс списка                 |
|            Name            |                 Название мьютекса                |
|      Nesting Counter       |            Глубина рекурсивного вызова мьютекса            |
|    Owner Original Prio     |      Приоритет задачи, владеющей этим мьютексом      |
| High Priority Task Waiting | В списке задач с наивысшим приоритетом, ожидающих этот мьютекс, указано имя задачи |



### 4.3.4 Доступные элементы вкладки Event Flag(s)
|            Доступные элементы            |                     Описание                     |
| :-------------------------: | :------------------------------------------: |
|            Item            |                  Индекс списка                   |
|            Name            |                Название группы флагов событий                |
|           Flags            |                      События                     |
| High Priority Task Waiting | В списке задач с наивысшим приоритетом, ожидающих эту группу флагов событий, указано имя задачи |



### 4.3.5 Доступные элементы вкладки Queue(s)
|            Доступные элементы            |                     Описание                     |
| :-------------------------: | :------------------------------------------: |
|            Item            |                  Индекс списка                   |
|            Name            |                Имя очереди сообщений                |
| High Priority Task Waiting | В списке задач с наивысшим приоритетом, ожидающих эту очередь сообщений, указано имя задачи |



### 4.3.6 Доступные элементы вкладки Timers
|            Доступные элементы            |          Описание          |
| :-------------------------: | :--------------------: |
|            Item            |        Индекс списка        |
|            Name            |       Название таймера       |
|            Mode            |      Режим таймера       |
|           State            |      Состояние таймера       |
|        Time Remain         |    Оставшееся время таймера     |
|        Start Delay         |      Начальная задержка      |
|           Period           |   Период задержки таймера   |
| Callback Function Pointer  |  Адрес функции обратного вызова таймера  |
| Callback Function Argument | Адрес параметра функции обратного вызова таймера |



### 4.3.7 Доступные элементы вкладки Tick Lists
Нет доступных элементов.



### 4.3.8 Memory
*Перевод выполнен автоматически. Если у вас есть вопросы или уточнения, пожалуйста, задайте их.* Открытое программное обеспечение. Подробности см. в содержании файла LICENSE в проекте.

## 8.5 Поддержка

Если вам нравится этот проект, **можете поставить «звёздочку» в правом верхнем углу этой страницы**. Это будет стоить вам 50 копеек. Я буду польщён и вдохновлён продолжать поддерживать этот проект.

<img src="docs/pic/donate.png" style="zoom: 67%;" />

Введение

Совместимый уровень RT-Thread операционной системы с uCOS-III: бесшовная миграция прикладного уровня, разработанного на базе ОС uC/OS-III, в операционную систему RT-Thread. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mysterywolf-RT-Thread-wrapper-of-uCOS-III.git
git@api.gitlife.ru:oschina-mirror/mysterywolf-RT-Thread-wrapper-of-uCOS-III.git
oschina-mirror
mysterywolf-RT-Thread-wrapper-of-uCOS-III
mysterywolf-RT-Thread-wrapper-of-uCOS-III
master