Порт ОС Autosar для MCU
Я делаю академический проект по переносу ОС Autosar на микроконтроллер. После прочтения статей и информации об Autosar, Arctic Core и Arctic Studio у меня есть несколько вопросов:
- Я использовал для портирования FreeRTOS на микроконтроллер, и это очень просто, я просто включил некоторые *.h и *.c файлы FreeRTOS, а затем использовал функции FreeRTOS для создания своего приложения на чипе. Можно ли сделать аналогично Autosar? Если это возможно, какие файлы я должен включить в свой main.c
- Второй вопрос, во FreeRTOS, мне нужно только использовать функцию xcreatetask() (это функция FreeRTOS), чтобы установить приоритет задачи, а затем я применил функцию vstarttaskschedule(), чтобы запустить задачу в очереди, однако я не могу видеть эти виды функций в Автосар ОС. Может кто-нибудь сказать мне, какие функции в автосар имеют те же функции, что и функции, которые я сказал.
- Когда я программирую чипы Texas Instrument, всегда есть основная функция, которая включает в себя основную программу, которую мы создадим для чипа. Однако я не вижу каких-либо основных функций в примере с Арктическим ядром. Как чипы запускает программу без основной функции? Пожалуйста, помогите мне ответить на эти вопросы!
3 ответа
3. Вы не можете видеть основную функцию в ядре ARTIC: AUTOSAR не определяет код запуска. Ожидается, что вы напишите основную функцию самостоятельно. Ядро в ОС AUTOSAR инициализируется из модуля ECUM. Если вы хотите загрузить свою ОС, у вас должен быть модуль ECUM. Также у вас должен быть модуль BSWM для запуска таблиц расписания. Вы должны создать правило в BSWM для запуска RTE, и оно запустит вашу таблицу расписаний. Вы должны вручную ввести код запуска (инициализация RAM/Register/etc), после чего вы должны вызвать основную функцию, основная функция будет закодирована вручную. Вызовите EcuM_init из основной функции. Таким образом, ваша ОС будет загружаться. 2. Вы не можете найти функцию для установки приоритета и активации задачи: AUTOSAR не поддерживает динамический приоритет задачи. Вы должны установить все приоритеты в конфигурации. Для запуска задачи вы можете использовать ActivateTask(). Один быстрый способ запустить задачу при запуске - установить параметр OsTaskAutostart для одной задачи. Задача, для которой вы установили параметр OsTaskAutostart, будет вызвана, как только ядро будет инициализировано.
- Ваш стартовый код будет целевым.
- ECUM выполняет часть инициализации для всех модулей SW в ECU.
- Не забудьте позвонить в ECUM с вашего Main.c
- ECUM выполняет инициализацию BSWM, драйверов и программных модулей.
- Как только RTE инициализируется - в RTE есть часть SchM, которая планирует основные функции каждого модуля.
- Основные функции каждого модуля SW известны RTE по файлам BSWMD и SWCD.
Прочитайте RTE SWS, ECUM SWS, SYSTEMTemplate SWS для получения дополнительной информации
Я предполагаю, что ваш академический проект уже завершен, однако перенос ОС AUTOSAR на определенный микроконтроллер не подходит для академического проекта.
Во-первых, по вашему вопросу я не могу сказать, является ли ОС ARCCORE или другой. Во-вторых, из моего опыта работы с FreeRTOS, существует только ограниченный объем знаний, относящихся к ОС AUTOSAR, и создание задач (2.) осуществляется на уровне приложения, а не портирования. В-третьих, большинство ОС AUTOSAR используют специализированные встроенные компиляторы, например, GHS или DIAB, которые не являются домом для научных кругов.
Я сам не портировал AUTOSAR OS, но я предлагаю взглянуть на перенесенную версию, архитектуру и файловую структуру, систему и затем процедуры запуска, векторные таблицы, периферийный код и т. Д. Сложность может быть уменьшена при портировании в пределах та же архитектура MCU, скажем, машины Renesas или ARM.
Чтобы ответить на ваш вопрос 3., вы не найдете main() в примерах ARCCORE. main() находится в os_init.c и выглядит так:
extern void EcuM_Init(void);
int main( void )
{
EcuM_Init();
}
Затем EcuM_Init() [EcuM.c] вызывает InitOS();