【问题标题】:Port Autosar OS to MCU将 Autosar OS 移植到 MCU
【发布时间】:2015-06-14 05:15:57
【问题描述】:

我正在做一个关于将 Autosar OS 移植到微控制器的学术项目。在阅读了有关 Autosar、Arctic Core 和 Arctic Studio 的论文和信息后,我有一些问题:

  1. 我以前将 FreeRTOS 移植到微控制器上,这很容易,我只包含了一些 FreeRTOS 的 *.h 和 *.c 文件,然后使用 FreeRTOS 功能在芯片上构建我的应用程序。我可以像 Autosar 一样做吗?如果可能的话,我应该将哪些文件包含到我的 main.c 中
  2. 第二个问题,在 FreeRTOS 中,我只需要使用 xcreatetask() 函数(这是一个 FreeRTOS 函数)来设置任务优先级,然后我应用 vstarttaskschedule() 函数来运行队列中的任务但是我看不到这些类型Autosar OS 中的功能。谁能告诉我 autosar 中的哪个函数与我说的函数具有相同的功能。
  3. 当我对德州仪器芯片进行编程时,总是有 main 函数,其中包括我们将为芯片构建的主程序。但是,我在 arctic Core 示例中看不到任何主要功能。没有main函数,芯片如何运行程序? 请帮我回答这些问题!

【问题讨论】:

  • 问题 1 和 2 看起来就像在 documentation 中得到的最佳答案。但是ARCCORE要求你注册,所以我没有看;但是,您应该。对于问题3,main()函数的存在与芯片无关; main() 是代码的入口点是 C 和 C++ 的标准要求;但是,一些内核和应用程序框架库在库中包含 main() 函数,该函数又调用您必须在 您的 代码中提供的一些备用用户入口点
  • Autosar 系统非常依赖于 UML 和 XML 的代码生成,并有意强制执行基于自上而下设计的工作流。因此,这是一个与您习惯使用 FreeRTOS 的范式非常不同的范式。与传统的 RTOS 相比,典型的前期“启动成本”也绝对是巨大的,以至于如果你作为一个单独的开发人员在一个学期的大学项目中可以用它做任何事情,我会留下深刻的印象。

标签: embedded freertos texas-instruments launchpad autosar


【解决方案1】:

我猜您的学术项目已经结束,但是将 AUTOSAR 操作系统移植到特定的微控制器并不适合学术项目。

首先,根据您的问题,我无法判断操作系统是 ARCCORE 还是其他。其次,根据我使用 FreeRTOS 的经验,只有有限的知识适用于 AUTOSAR OS,并且创建任务 (2.) 是应用程序级别的,而不是移植。第三,大多数 AUTOSAR OS 依赖于专门的嵌入式编译器,例如不是学术界的 GHS 或 DIAB。

我自己没有移植过 AUTOSAR OS,但我建议先看看移植的版本、架构和文件结构、系统,然后是启动例程、向量表、外围代码等。复杂性可能会降低在相同的 MCU 架构中移植,比如瑞萨机器或 ARM。

要回答您的问题 3,您不会在 ARCCORE 示例中找到 main()。 main() 位于 os_init.c 中,如下所示:

extern void EcuM_Init(void);


int main( void )
{
    EcuM_Init();
}

然后,EcuM_Init() [EcuM.c] 调用 InitOS();

【讨论】:

    【解决方案2】:
    1. 您的启动代码将针对特定目标。
    2. ECUM 为 ECU 内的所有软件模块执行初始化部分。
    3. 记得从 Main.c 调用 ECUM
    4. ECUM 对 BSWM、驱动程序和软件模块进行初始化。
    5. 一旦 RTE 被初始化 - RTE 中有一个部分 SchM 用于调度每个模块的 Mainfunctions。
    6. 每个 SW 模块的 Mainfunctions 通过 BSWMD 和 SWCD 文件为 RTE 所知。

    阅读 RTE SWS、ECUM SWS、SYSTEMTemplate SWS 了解更多信息

    【讨论】:

      【解决方案3】:

      3、在ARTIC核心中看不到main函数: AUTOSAR 没有定义启动代码。您应该自己编写 main 函数。 AUTOSAR OS 中的内核从 ECUM 模块初始化。如果你想启动你的操作系统,你必须有 ECUM 模块。你也应该有 BSWM 模块来启动时间表。您必须在 BSWM 中为 RTE 启动创建规则,它将启动您的日程表。 您必须手动编码启动代码(RAM/寄存器/等初始化),然后您必须调用主函数,主函数将被手动编码。从主函数调用 EcuM_init。这样你的操作系统就会启动。 2,您无法定位设置任务优先级和激活的功能: AUTOSAR 不支持动态任务优先级。您必须在配置中设置所有优先级。要运行任务,您可以使用 ActivateTask()。在启动时启动任务的一个快速技巧是,为一项任务设置参数 OsTaskAutostart。一旦内核初始化,您为其设置参数 OsTaskAutostart 的任务将被调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-06
        • 1970-01-01
        • 2017-07-04
        • 2014-05-04
        • 2012-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多