Arctic Core结构分析

本文深入分析了Arctic Core,一个遵循AUTOSAR标准的开源嵌入式系统平台。Arctic Core包括支持代码、开发环境Arctic Studio和配置工具BSW Builder。内容涵盖Arctic Core的模块化设计、实现路线图、开发工具的功能以及BSW Builder的ECU配置。此外,文章详细阐述了Arctic Core的获取、编译、调试过程,以及操作系统启动流程和任务调度。最后讨论了RTE(运行时环境)在Arctic Core中的作用和与操作系统的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 概述

    1. 背景

    ARC Core是一个符合AUTOSAR标准的嵌入式开发平台,它包含三个组件:支持代码(Arctic Core)、开发平台(Arctic Studio)和配置工具(BSW Builder)。

    1. Arctic Core

    Arctic Core是一个开放源码(GPL)的嵌入式系统平台,它基于模块化设计,符合AUTOSAR标准,目前实现了以下内容:

    1. 符合OSEK标准的实时内核
    2. LINCAN总线的通信栈
    3. 外设:ADC, PWM, digital I/O

    其实现路线图如下(图 11):

    031610_1056_ArcticCore1.jpg

    图 11 Arctic Core路线图

     

    已经实现

     

    在Arctic Studio Pro中实现

     

    2010年3月实现

     

    2010年5月实现

     

    2010年9月实现

     

    没有计划

    1. Arctic Studio

    Arctic Studio是一个集成了gcc编译器的开发环境(powerpc-eabispe),同时包括了C语言编辑器CDT,在Professional版本中包含ECU的配置工具。

    Arctic Studio对源代码进行统一管理,它会自动创建用于构建Arctic Core的Makefile的基本模板,但用户仍需要编辑自己工程内的Makefile。构建系统模型如图 12所示。

    031610_1056_ArcticCore2.png

    图 12 构建系统

    1. BSW Builder

    BSW Builder是一个付费的AUTOSAR中BSW的配置工具,它支持图形化的ECU级编辑(如图 13所示)和操作系统级编辑(如图 14所示)。

    031610_1056_ArcticCore3.png

    图 13 BSW Builder

    031610_1056_ArcticCore4.png

    图 14 BSW Builder操作系统编辑

    通过基于arxml数据的配置,可以生成和C语言代码的文件。

    1. 目标

    本文档的目的在于分析Arctic Core结构,从而获得它的运行方式RTE与OS的关系,为RTE的实现做准备。

    1. 方法

    分析主要由以下方式进行:

    1. 准备阶段:Arctic Core的获取、编译与调试。
    1. 静态分析:项目的依赖关系及目录结构。
    2. 动态分析:Arctic Core的运行过程,OSEK OSRTE在运行时的关系。
  2. Arctic Core的获取、编译与调试

    1. 获取

      1. Clone Arctic Core

        1. 下载安装Arctic Studiohttp://arccore.com/download/Arctic-Core-Studio)。
        1. 安装过程会附带安装cygwinmercurial,需要确保它们被正确安装。
        2. File->Import中选择Mercurial版本库。并在URL中填入:
          http://arccore.com/hg/arc-stable
          (稳定版)
          http://arccore.com/hg/arc
          (孵化版)
        3. 并选择check out as a project(s) in the workspace完成导入。
      2. Convert to a C/C++ Project

        1. 由于导入完成后项目为一般项目,没有用CDT建立类型和变量索引,所以源码不能进行编译。需要在Project Explorer视图中选择项目,并将其转换为C项目。如图 21所示。

    031610_1056_ArcticCore5.png

    图 21 将检出项目转换为C项目

    1. 在转换选项中选择Makefile ProjectToolchainEmpty Toolchain。如图 22所示。

    031610_1056_ArcticCore6.png

    图 22 转换为C/C++项目

    1. 使用

      1. 建立自己的项目

        1. 在菜单中选择File à New à C Project
        1. 新建对话框中Project Type填入Empty Arctic Core ProjectToolchainCore Builder Cygwin Toolchain
        2. Arctic Core source path中填入:${workspace_loc:/arc-stable},其中arc-stable是检出时填写的项目名称。
        3. Advanced settings…中检查下面三个环境变量是否配置正确(C/C++ Build / Environment):

    含义

    变量

    编译器位置

    CROSS_COMPILE=/opt/powerpc-eabispe/bin/powerpc-eabispe-

    板级支持包位置

    BOARDDIR=<arc-stable/boards/任意一个目录名

    需要注意的是:如果想以后要仿真调试,需要选择带有sim的目标板(如mpc5554sim)

    目录外编译位置

    BDIR=../${ProjName}

    1. C/C++ Build / SettingsBinary选项卡中勾选Elf-Parser,编译成功后目录中的elf文件就可以被自动解析。
    2. Project PreferencesProject reference中勾选Arctic Core项目(如arc-stable),编写代码时源代码就可以被自动搜索关联。
    3. 建立C语言文件,并编写代码。(或者也可以拷贝源码库中example下的代码,再进行修改,但要注意的是只拷贝目录下的文件,不要拷贝目录。如图 23所示)

    031610_1056_ArcticCore7.png

    图 23 拷贝版本库中的示例

    1. 使用BSW Builder编写源代码

    配置信息(如Os_Cfg.c)可以使用手工填写,也可以使用BSW Builder生成。下面的例子就是用BSW Builder写一个简单的OSEK操作系统应用:

    1. 首先新建一个C语言项目

    031610_1056_ArcticCore8.png

    图 24 新建C语言项目

    1. 建立新的ECU配置文件,这个文件是arxml文件。

    031610_1056_ArcticCore9.png

    图 25 New Ecu Configuration

    1. Mcu选择MPC551x并确定。
    2. 添加一个OS对象:

    031610_1056_ArcticCore10.png

    图 26 添加OS对象

    1. 双击OS进入其配置页面。
    2. 勾选所有的hook并添加1Alarm1Counter、一个Event1Task。填入OS tick frequency1000Hz,也就是说1ms运行一次。
    3. 修改CounterTick per base unit1Counter unitOsTick,与系统时钟同步。Max Allowed Value1000,也就是说1秒回卷一次。Min allowed ticks cyclic alarm 10,则表示alarm最短也要10ms才能出发一次。
    4. 修改EventEvent Mask1,表示一号事件。
    5. 修改Task类型为Extended,优先级为1并且Autostart
    6. 修改AlarmAlarm Counter为刚刚创建的Counter_1,并且AutostartAlarm time100表示0.1秒触发一次。Alarm cycle也为100,类型为"相对"。
    7. 添加set Event action,并Set EventEvent_1Set Event TaskTask_1
    8. 完成后选择Generate Stubs…产生Task.c
    9. 回到Overview,在Generator output directory中填入工程目录下的config并在workflow中选择Generator产生Os_Cfg.cOs_Cfg.h
    10. 打开Task.c文件,在文件顶部填入调试输出信息支持头文件:

      #define USE_DEBUG

      #include "Trace.h"

       

      #define USE_SIMPLE_PRINTF

      #include "simple_printf.h"

    11. Task_1中填入简单的调试信息:

      // Tasks

      void Task_1(void)

      {

          simple_printf("Task_1 Started!\n");

          for (;;)

          {

              WaitEvent(EVENT_MASK_Event_1);

              ClearEvent(EVENT_MASK_Event_1);

              simple_printf("Hello World\n");

          }

      }

    12. 在所有支持的系统Hook中加入相应的调试信息:

      // Hooks

      void ErrorHook(StatusType Error)

      {

          dbg_printf("Error Code = %d\n", Error);

      }

       

      void PostTaskHook(void)

      {

          TaskType currTask;

          GetTaskID(&currTask);

          TickType alarmTick;

          GetAlarm(ALARM_ID_Alarm_1, &alarmTick);

          dbg_printf("<%d> Task %d Switch finished\n", alarmTick, currTask);

      }

       

      void PreTaskHook(void)

      {

          TaskType currTask;

          GetTaskID(&currTask);

          dbg_printf("[%d] Task %d Get in\n", GetOsTick(), currTask);

      }

       

      ProtectionReturnType ProtectionHook(StatusType FatalError)

      {

          dbg_printf("Error Code = %d\n", FatalError);

          return PRO_KILLAPPL;

      }

       

      void ShutdownHook(StatusType Error)

      {

          dbg_printf("OS Shutdown!\n");

      }

       

      void StartupHook(void)

      {

          dbg_printf("OS Startup!\n");

      }

    1. 编译

    代码编写完成后,检查makefile是否包含了config目录中的全部代码,如下所示:

     

    # Our object files

    obj-y += simple_main.o

    # OS object files.

    obj-y += Os_Cfg.o

    并检查build_config.mk文件中是否包含了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值