-
概述
-
背景
ARC Core是一个符合AUTOSAR标准的嵌入式开发平台,它包含三个组件:支持代码(Arctic Core)、开发平台(Arctic Studio)和配置工具(BSW Builder)。
-
Arctic Core
Arctic Core是一个开放源码(GPL)的嵌入式系统平台,它基于模块化设计,符合AUTOSAR标准,目前实现了以下内容:
- 符合OSEK标准的实时内核
- LIN和CAN总线的通信栈
- 外设:ADC, PWM, digital I/O
其实现路线图如下(图 11):
图 11 Arctic Core路线图
已经实现
在Arctic Studio Pro中实现
2010年3月实现
2010年5月实现
2010年9月实现
没有计划
-
Arctic Studio
Arctic Studio是一个集成了gcc编译器的开发环境(powerpc-eabispe),同时包括了C语言编辑器CDT,在Professional版本中包含ECU的配置工具。
Arctic Studio对源代码进行统一管理,它会自动创建用于构建Arctic Core的Makefile的基本模板,但用户仍需要编辑自己工程内的Makefile。构建系统模型如图 12所示。
图 12 构建系统
-
BSW Builder
BSW Builder是一个付费的AUTOSAR中BSW的配置工具,它支持图形化的ECU级编辑(如图 13所示)和操作系统级编辑(如图 14所示)。
图 13 BSW Builder
图 14 BSW Builder操作系统编辑
通过基于arxml数据的配置,可以生成和C语言代码的文件。
-
目标
本文档的目的在于分析Arctic Core结构,从而获得它的运行方式及RTE与OS的关系,为RTE的实现做准备。
-
方法
分析主要由以下方式进行:
- 准备阶段:Arctic Core的获取、编译与调试。
- 静态分析:项目的依赖关系及目录结构。
- 动态分析:Arctic Core的运行过程,OSEK OS与RTE在运行时的关系。
-
-
Arctic Core的获取、编译与调试
-
获取
-
Clone Arctic Core
- 安装过程会附带安装cygwin和mercurial,需要确保它们被正确安装。
- 在File->Import中选择Mercurial版本库。并在URL中填入:
http://arccore.com/hg/arc-stable(稳定版)
http://arccore.com/hg/arc(孵化版) - 并选择check out as a project(s) in the workspace完成导入。
-
Convert to a C/C++ Project
- 由于导入完成后项目为一般项目,没有用CDT建立类型和变量索引,所以源码不能进行编译。需要在Project Explorer视图中选择项目,并将其转换为C项目。如图 21所示。
-
图 21 将检出项目转换为C项目
- 在转换选项中选择Makefile Project,Toolchain为Empty Toolchain。如图 22所示。
图 22 转换为C/C++项目
-
使用
-
建立自己的项目
- 在菜单中选择File à New à C Project
- 新建对话框中Project Type填入Empty Arctic Core Project。Toolchain为Core Builder Cygwin Toolchain。
- 在Arctic Core source path中填入:${workspace_loc:/arc-stable},其中arc-stable是检出时填写的项目名称。
- 在Advanced settings…中检查下面三个环境变量是否配置正确(C/C++ Build / Environment):
-
含义
变量
编译器位置
CROSS_COMPILE=/opt/powerpc-eabispe/bin/powerpc-eabispe-
板级支持包位置
BOARDDIR=<arc-stable/boards/任意一个目录名
需要注意的是:如果想以后要仿真调试,需要选择带有sim的目标板(如mpc5554sim)
目录外编译位置
BDIR=../${ProjName}
- 在C/C++ Build / Settings下Binary选项卡中勾选Elf-Parser,编译成功后目录中的elf文件就可以被自动解析。
- 在Project Preferences下Project reference中勾选Arctic Core项目(如arc-stable),编写代码时源代码就可以被自动搜索关联。
- 建立C语言文件,并编写代码。(或者也可以拷贝源码库中example下的代码,再进行修改,但要注意的是只拷贝目录下的文件,不要拷贝目录。如图 23所示)
图 23 拷贝版本库中的示例
-
使用BSW Builder编写源代码
配置信息(如Os_Cfg.c)可以使用手工填写,也可以使用BSW Builder生成。下面的例子就是用BSW Builder写一个简单的OSEK操作系统应用:
- 首先新建一个C语言项目
图 24 新建C语言项目
- 建立新的ECU配置文件,这个文件是arxml文件。
图 25 New Ecu Configuration
- Mcu选择MPC551x并确定。
- 添加一个OS对象:
图 26 添加OS对象
- 双击OS进入其配置页面。
- 勾选所有的hook并添加1个Alarm、1个Counter、一个Event和1个Task。填入OS tick frequency为1000Hz,也就是说1ms运行一次。
- 修改Counter的Tick per base unit为1,Counter unit为OsTick,与系统时钟同步。Max Allowed Value为1000,也就是说1秒回卷一次。Min allowed ticks cyclic alarm 为10,则表示alarm最短也要10ms才能出发一次。
- 修改Event的Event Mask为1,表示一号事件。
- 修改Task类型为Extended,优先级为1并且Autostart。
- 修改Alarm的Alarm Counter为刚刚创建的Counter_1,并且Autostart。Alarm time为100表示0.1秒触发一次。Alarm cycle也为100,类型为"相对"。
- 添加set Event action,并Set Event为Event_1,Set Event Task为Task_1。
- 完成后选择Generate Stubs…产生Task.c
- 回到Overview,在Generator output directory中填入工程目录下的config并在workflow中选择Generator产生Os_Cfg.c和Os_Cfg.h。
-
打开Task.c文件,在文件顶部填入调试输出信息支持头文件:
#define USE_DEBUG
#include "Trace.h"
#define USE_SIMPLE_PRINTF
#include "simple_printf.h"
-
在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");
}
}
-
在所有支持的系统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");
}
-
编译
代码编写完成后,检查makefile是否包含了config目录中的全部代码,如下所示:
# Our object files
obj-y += simple_main.o
# OS object files.
obj-y += Os_Cfg.o
并检查build_config.mk文件中是否包含了
-
Arctic Core结构分析
最新推荐文章于 2025-05-26 14:34:48 发布