TencentOS tiny в настоящее время поддерживает перенос ядра для чипов ARM Cortex M, таких как полный ряд STM32 на основе Cortex M и полный ряд NXP на основе Cortex M. В этом руководстве будет использоваться официальная демонстрационная плата STM32 NUCLEO-L073RZ для примера переноса. Методы переноса для других плат ARM Cortex M аналогичны.
Для отладки чипов ARM Cortex M также требуется эмулятор. Плата NUCLEO-L073RZ имеет встроенный эмулятор ST-Link. Если ваша плата разработки или модуль чипа не имеет встроенного эмулятора, вам потребуется подключить внешний эмулятор, такой как J-Link или U-Link.
Это руководство предназначено для использования компилятора IAR, поэтому перед переносом ядра вам необходимо установить компилятор IAR. Последняя версия IAR — 8.40, доступна по адресу: https://www.iar.com/iar-embedded-workbench/#!?currentTab=free-trials
После загрузки установите его в окружении Windows, следуя инструкциям. После установки вы можете использовать его бесплатно в течение gst дней, после чего вам потребуется приобрести лицензию на программное обеспечение.
Для установки STM32CubeMX вам также потребуется предварительно установить среду JDK. Вы можете найти инструкции по установке и настройке JDK в интернете, поэтому здесь не будет подробного описания.
После установки STM32CubeMX вы можете использовать его для создания базового проекта безRTOS для платы разработки NUCLEO-L073RZ. Если ваш чип не является STM32, а другим производителем ARM Cortex M, вы можете подготовить базовый проект безRTOS в соответствии с руководством производителя. Последующие шаги переноса ядра будут одинаковыми.
Как показано на рисунке выше: с помощью фильтрации MCU находит соответствующую модель микроконтроллера для вашей разработки. При двойном щелчке откроется окно конфигурации проекта, как показано на следующем рисунке:
После нажатия кнопки "Сгенерировать код", результат генерации проекта без операционной системы будет следующим:
Таким образом, проект без операционной системы для платы NUCLEO-L073RZ сгенерирован. Этот проект можно скомпилировать и загрузить на плату для выполнения.
Исходный код TencentOS tiny открыт и доступен для загрузки по адресу: https://github.com/Tencent/TencentOS-tiny.git| Первый уровень каталога | Второй уровень каталога | Описание | |--------------------------|--------------------------|----------| | arch | arm | TencentOS tiny, адаптированный для ARM-ядра (включает код для прерываний, планирования и тика) | | board | NUCLEO_L073RZ | Проекты для целевой микроконтроллерной платы | | kernel | core | Исходный код ядра TencentOS tiny | | | pm | Исходный код модуля энергосбережения TencentOS tiny | | osal | cmsis_os | TencentOS tiny, адаптированный для CMSIS OS |Так как в этом руководстве рассматривается только адаптация ядра TencentOS tiny, здесь используются исходные коды каталогов arch, board, kernel и osal.
Как показано на рисунке, создайте основной каталог TencentOS_tiny и добавьте в него четыре подкаталога. В каталоги arch, kernel и osal следует скопировать исходные коды из репозитория, а в каталог board следует скопировать исходные коды нашего ранее сгенерированного проекта без операционной системы. Название нашей разрабатываемой платы — NUCLEO_L073RZ, и все исходные коды проекта без операционной системы следует скопировать в соответствующий каталог, как показано на следующем рисунке:
Далее перейдите в каталог TencentOS_tiny/board/NUCLEO_L073RZ/EWARM и откройте проект IAR. Мы начнем добавлять исходные коды ядра TencentOS tiny.
В разделе кода навигации IAR добавляем группу tos/arch для добавления исходных кодов TencentOS tiny для платформы arch.
Файл tos_cpu.c — это файл адаптации CPU для TencentOS tiny, который включает инициализацию стека и адаптацию прерываний. Если ваш чип имеет ядро ARM Cortex-M, этот файл можно не изменять. Ядра M0, M3, M4 и M7 являются универсальными, а для других IP-ядер требуется пересоздание адаптации.Файл port_s.S — это файл задачи управления процессами TencentOS tiny, который в основном выполняет операции по загрузке и выгрузке стека. Файл port_c.c адаптирует systick и т.д. Эти два файла уникальны для каждого IP-ядра и компилятора. Если ваш чип имеет ядро ARM Cortex M, мы уже адаптировали их. Например, если мы переносим чип STM32L073RZ с ядром ARM Cortex M0+, используя компилятор IAR, мы выбираем адаптированные файлы из папки arch\arm\arm-v7m\cortex-m0+\iccarm. Если ваша плата разработки — STM32F429IG с ядром M4 и компилятором GCC, вы выбираете адаптированные файлы из папки arch\arm\arm-v7m\cortex-m4\gcc.
Исходные коды ядра находятся в папке kerne и включают в себя папки core и pm. Папка core содержит базовый ядро, а папка pm — компоненты низкого энергопотребления ядра. При базовом переносе можно не добавлять исходные коды из папки pm, как показано на следующем рисунке. В разделе кода навигации IAR добавляем группу tos/kernel для добавления исходных кодов базового ядра:
CMSIS OS — это адаптированный слой абстракции OS для TencentOS tiny, который позволяет упростить переход бизнес-логики с других RTOS на TencentOS tiny. В разделе кода навигации IAR добавляем группу tos/cmsis-os для добавления исходных кодов CMSIS OS.
### 5. Добавление папки заголовочных файлов TencentOS tiny
Перед добавлением папки заголовочных файлов создайте в папке проекта, который нужно перенести, новую папку TOS_CONFIG для хранения конфигурационных заголовочных файлов TencentOS tiny, то есть файла tos_config.h, который будет создан далее.
Все папки заголовочных файлов, которые нужно добавить для TencentOS tiny, представлены на следующем рисунке:
#ifndef _TOS_CONFIG_H_
#define _TOS_CONFIG_H_
#include "stm32l0xx.h" // Заголовочный файл цели, пользователь должен изменить его в зависимости от ситуации
#define TOS_CFG_TASK_PRIO_MAX 10u // Конфигурация максимального количества приоритетов для TencentOS tiny
#define TOS_CFG_ROUND_ROBIN_EN 0u // Конфигурация включения режима времени кругового обмена в ядре TencentOS tiny
#define TOS_CFG_OBJECT_VERIFY_EN 1u // Конфигурация включения проверки легальности указателей в TencentOS tiny
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 1u // Макропarameter для включения функции динамического создания задач в TencentOS tiny
#define TOS_CFG_EVENT_EN 1u // Макропarameter для включения модуля событий в TencentOS tiny
#define TOS_CFG_MMBLK_EN 1u // Конфигурация включения модуля управления блоками памяти в TencentOS tiny
#define TOS_CFG_MMHEAP_EN 1u // Конфигурация включения модуля динамического управления памятью в TencentOS tiny
``````c
#define TOS_CFG_MMHEAP_DEFAULT_POOL_EN 1u // Макропараметр для включения функции по умолчанию для динамического пула памяти в TencentOS tiny
#define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE 0x100 // Конфигурация размера по умолчанию для динамического пула памяти в TencentOS tiny
#define TOS_CFG_MUTEX_EN 1u // Конфигурация включения модуля мьютексов в TencentOS tiny
#define TOS_CFG_MESSAGE_QUEUE_EN 1u // Конфигурация включения модуля очередей сообщений в TencentOS tiny
#define TOS_CFG_MAIL_QUEUE_EN 1u // Конфигурация включения модуля почтовых очередей сообщений в TencentOS tiny
#define TOS_CFG_PRIORITY_MESSAGE_QUEUE_EN 1u // Конфигурация включения модуля очередей сообщений с приоритетом в TencentOS tiny
#define TOS_CFG_PRIORITY_MAIL_QUEUE_EN 1u // Конфигурация включения модуля почтовых очередей сообщений с приоритетом в TencentOS tiny
#define TOS_CFG_TIMER_EN 1u // Конфигурация включения модуля программных таймеров в TencentOS tiny
#define TOS_CFG_PWR_MGR_EN 0u // Конфигурация включения модуля управления питанием периферий в TencentOS tiny
#define TOS_CFG_TICKLESS_EN 0u // Конфигурация включения модуля Tickless для низкого энергопотребления в TencentOS tiny
#define TOS_CFG_SEM_EN 1u // Конфигурация включения модуля семафоров в TencentOS tiny
#define TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN 1u // Конфигурация включения функции обнаружения глубины стека задач в TencentOS tiny
#define TOS_CFG_FAULT_BACKTRACE_EN 0u // Конфигурация включения функции обратного прослеживания стека при сбоях в TencentOS tiny
``````c
#define TOS_CFG_IDLE_TASK_STK_SIZE 128u // Конфигурация размера стека задачи-пустышки в TencentOS tiny
#define TOS_CFG_CPU_TICK_PER_SECOND 1000u // Конфигурация частоты тиков в TencentOS tiny
#define TOS_CFG_CPU_CLOCK (SystemCoreClock) // Конфигурация частоты процессора в TencentOS tiny
#define TOS_CFG_TIMER_AS_PROC 1u // Настройка, указывающая, следует ли конфигурировать TIMER как функциональный режим
#endif
После настройки всех параметров TencentOS tiny, файл tos_config.h
следует поместить в директорию вашего проекта для конкретной платформы, например, в директорию board\NUCLEO_L073RZ\TOS_CONFIG
.
Таким образом, все необходимые файлы TencentOS tiny добавлены в проект.
stm32l0xx_it.c
В файле stm32l0xx_it.c
включите заголовочный файл tos.h
:
Перед функцией PendSV_Handler
добавьте ключевое слово __weak
, так как эта функция уже переопределена в сборке TencentOS tiny. В функции SysTick_Handler
добавьте вызов функции управления очередями TencentOS tiny, как показано на следующем рисунке:
main.c
и написание функций задач#include "cmsis_os.h"
// Задача 1
#define TASK1_STK_SIZE 256
void task1(void *pdata);
osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);
```// Задача 2
#define TASK2_STK_SIZE 256
void task2(void *pdata);
osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE);
void task1(void *pdata)
{
int count = 1;
while(1)
{
printf("\r\nПривет, мир!\r\n### Это задача 1, счетчик равен %d \r\n", count++);
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
osDelay(2000);
}
}
void task2(void *pdata)
{
int count = 1;
while(1)
{
printf("\r\nПривет, TencentOS !\r\n*** Это задача 2, счетчик равен %d \r\n", count++);
osDelay(1000);
}
}
int fputc(int ch, FILE *f)
{
if (ch == '\n')
{
HAL_UART_Transmit(&huart2, (void *)"\r", 1, 30000);
}
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
Как показано на следующем рисунке:
Далее, после инициализации аппаратных компонентов в функции main
, добавьте код инициализации и запуска TencentOS tiny:
osKernelInitialize(); // Инициализация ядра TencentOS tiny
osThreadCreate(osThread(task1), NULL); // Создание задачи 1
osThreadCreate(osThread(task2), NULL); // Создание задачи 2
osKernelStart(); // Запуск TencentOS tiny

Следуя инструкциям на изображении выше, выполните сборку и загрузку на разработочную плату для завершения тестирования TencentOS tiny. Как показано на следующем изображении, можно увидеть альтернативную печать информации в последовательном порту, что указывает на выполнение двух задач и их переключение между собой:

Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )