Os¶
目标¶
本文档以S32K148芯片平台为例,用于指导客户进行OS集成,文档主要包括的内容为:OS集成指导、基于普通应用的集成示例讲解、项目集成特殊说明。
通过阅读本文档,用户可以了解代码集成过程,ORIENTAIS配置工具的配置过程,以及如何应用配置工具生成的配置文件。由于各项目的需求不同,集成示例不会针对于特定的商业项目做详细讲解。特定商业项目的主要集成问题,将在项目集成特殊说明章节讲述。
缩写词和术语¶
缩写词/术语 |
描述 |
AUTOSAR OS |
Specification of Operating System |
ECU |
Electronic Control Unit:电控单元 |
MCAL |
Microcontroller Abstraction Layer:微控制器抽象层 |
MCU |
Micro Controller Unit:微处理器 |
参考文档¶
AUTOSAR_SWS_OS.pdf
ORIENTAIS_OS_用户手册.pdf
ORIENTAIS_Studio_OS_用户手册.pdf
OSEK/VDX Operating System.pdf
软件架构¶
OS对外部模块的依赖¶
编号 |
类别 |
约束限制 |
1 |
MCAL - MCU |
用户需正确配置MCAL中MCU模块,在启动OS前,用户应调用MCU初始化以确保系统时钟的准确性。 |
协议栈集成¶
普华交付的内容为:协议栈源码和ORIENTAIS Configurator配置工具。
本章节仅描述ORIENTAIS Configurator建立配置工程的方法,不描述如何配置OS,配置示例请参考本文档的章节(集成示例)。
模块名 |
模块分类 |
---|---|
Os.h |
ORIENTAIS OS 的内核模块。 |
Os_Alarm.c |
|
Os_Appl.c |
|
Os_Core.c |
|
Os_Counter.c |
|
Os_ECode.h |
|
Os_Err.h |
|
Os_Event.c |
|
Os_Hook.c |
|
Os_Hook.h |
|
Os_Internal.h |
|
Os_Interrupt.c |
|
Os_Ioc.c |
|
Os_Kernel.c |
|
Os_LoadRatio.c |
|
Os_LoadRatio.h |
|
Os_Marcos.h |
|
Os_MemMap.h |
|
Os_Monitor.c |
|
Os_Monitor.h |
|
Os_Mprot.c |
|
Os_Panic.c |
|
Os_Peripheral.c |
|
Os_Resource.c |
|
Os_Rpc.c |
|
Os_ScheduleTable.c |
|
Os_Spinlock.c |
|
Os_Sprot.c |
|
Os_StackMonitor.c |
|
Os_Task.c |
|
Os_Tprot.c |
|
Os_Trace.c |
|
Os_Trace.h |
|
Os_Types.h |
|
Os_Extend.c |
扩展功能 |
Os_Extend.h |
|
Mcu_Core.c |
移植相关 |
Mcu_Core.h |
|
Mcu_Irq.h |
|
Mcu_Timer.c |
|
Mcu_Timer.h |
|
Os_MemmapImp.h |
|
Arch_Context.s |
|
Arch_Define.h |
|
Arch_Extend.c |
|
Arch_Extend.h |
|
Arch_Irq.c |
|
Arch_Irq.h |
|
Arch_Mpu.c |
|
Arch_Mpu.h |
|
Arch_Processor.c |
|
Arch_Processor.h |
|
Arch_Trap.c |
|
Ioc.c |
配置文件 |
Ioc.h |
|
Os_Cfg.c |
|
Os_Cfg.h |
|
Os_CfgData.h |
|
Os_Cfg_S.h |
|
Os_CoreCfg.c |
|
Os_CoreCfg.h |
|
Os_DataSection.lsl |
|
Os_Intvet.c |
|
Os_Kdata.c |
|
Os_Linker.ld |
|
Os_Mp_MemMap.h |
|
Os_MprotCfg.c |
|
Os_MprotCfg.h |
|
Os_Trace.orti |
|
Os_UserInf.c |
步骤 |
操作 |
说明 |
1 |
ORIENTAIS Configurator配置工具工程搭建和协议栈模块加载 |
若配置工具已经搭建,则仅需进行协议栈模块的加载操作。 |
2 |
模块配置及配置文件生成 |
NA |
3 |
代码集成 |
现有工程、协议栈源代码和配置生成文件的集成。 |
4 |
验证测试 |
NA |
新建ORIENTAIS Configurator配置工程¶
安装ORIENTAIS Configurator软件后,双击软件图标打开软件。
图 新建工程-1
菜单栏File🡪New🡪Project,新建工程。
图 新建工程-2
在弹出的新建窗口中选择Autosar下的 [BSW Project],选择Next。
图 新建工程-3
在弹出的窗口中输入工程名,选择Finish。
图 新建工程-4
选择[Bsw_Builder],右键单击,选择New ECU Configuration。
图 新建ECU
在弹出的窗口中输入ECU名,选择S32K148芯片,然后选择Next。
图 选择芯片平台
在弹出的窗口中勾选需添加的模块,点击Finish。
图 完成ECU配置
新建工程如下图所示。
图 完成新建工程
模块配置及生成代码¶
模块配置¶
模块的具体配置,取决于具体的项目需求。OS各模块配置项的详细介绍,请参考ORIENTAIS OS_用户手册.pdf。
配置代码生成¶
功能集成¶
此章节用于指导用户在集成OS过程中应注意一些事项。
代码集成¶
协议栈代码包括两部分:普华提供的协议栈源码和ORIENTAIS Configurator配置生成代码。
用户须将协议栈源码和章节(模块配置及生成代码)生成的源代码添加到集成开发工具的对应文件夹。
Note
OS集成之前,需确保MCU时钟的正确性。
集成注意事项¶
对于集成过程中,OS特殊要求和用户经常出现的问题,归类总结形成表 协议栈集成约束清单。用户需逐一排查表中的约束项,以避免集成问题出现。
编号 |
类别 |
约束限制 |
---|---|---|
1 |
堆栈 |
用户需确保为任务堆栈和中断堆栈分配足够的堆栈空间 |
2 |
头文件 |
|
3 |
MCU初始化 |
用户应调用Mcu_Init()以初始化系统时钟 |
4 |
启动OS |
用户应调用StartOS()以启动OS |
集成示例¶
本章节通过OS为例,向用户展示OS的集成过程。用户可以据此熟悉OS配置工具的配置过程,以及如何应用配置工具生成的配置文件。
Note
本示例配置为1核且可扩展类为SC1模式。该示例仅包含基础配置,故下面配置为部分OS配置。
集成目标¶
通过搭建基础工程,实现OS的基本功能(即:任务调度功能)。
TASK |
|||
Name |
Priority |
Preemptive Poilcy |
Activation Limit |
Core0_Task |
1 |
FULL |
1 |
Auto start |
|||
False |
|||
Alarm |
|||
Name |
Activate |
Counter |
Task |
Core0_Alarm |
Activate Task |
SystemTimer_Core_0 |
Core0_Task |
ISR |
|||
Name |
Category |
Priority |
Nested Enable |
CAN0_ORed_ADDR |
GATEGORY_2 |
1 |
False |
模块的配置¶
OsOS界面配置如下:
图 OsOS 配置
配置项名
描述
Cores Number
配置OS为1核。
Map CPU
将单核OS映射至核0运行。
Scalability Class
将OS功能裁减为SC1下的功能。
Os Status
设置OS的状态为EXTENED模式。
Error Hook
开启错误钩子函数
Shutdown Hook
开启关闭钩子函数
Startup Hook
开启启动钩子函数
SystemTimer配置界面如下:
图 SystemTimer配置
配置项名
描述
STM_Frequency[MHZ]
系统时钟频率:48MHZ
Priority
设置系统中断的优先级为:10
Nest Enable
设置该系统中断是否支持嵌套功能
TickTime[s]
设置系统中断周期时间为:0.001s
OsCounter配置界面如下:
图 OsCounter配置
配置项名
描述
Max Tick
设置系统Counter的最大tick值为:65535 Tick。
Min Cycle
设置系统Counter的最小tick值为:1 Tick。
OsAppMode配置如下:
图 OsAppMode配置
配置项名
描述
OsAppMode
设置OS的工作模式:OSDEFAULTAPPMODE。
OsTask配置界面如下:
图 OsTask配置-1
图 OsTask配置-2
配置项名
描述
Activation Limit
设置该任务能被连续激活的次数:允许连续激活1次
Priority
设置任务的优先级为:1
Preemptive Policy
设置该任务的抢占策略为:FULL
Stack Size
设置任务的堆栈为:256(单位:4bytes)
OsAlarm界面配置如下:
图 OsAlarm配置-1
图 OsAlarm配置-2
配置项名
描述
Counter Ref
选择驱动Alarm的Counter:SystemTimer_Core_0。
OsAlarmActivateTask
选择Alarm到期后的动作为:激活Core0_Task。
OsAlarmAutostart
设置Alarm启动方式:自启动。
Start Time[tick]
设置Alarm的启动偏移tick值为:100 Tick。
Autosar Type
设置该Alarm的启动方式为:相对启动。
Cycle Time[tick]
设置该周期Alarm的tick值为:100 Tick。
AppMode
设置该Alarm的启动模式为:OSDEFAULTAPPMODE
OsIsr配置界面如下:
图 OsIsr配置
配置项名
描述
Category
配置CAN0_ORed_ADDR中断为:CATEGORY_2
Stack Size
设置CAN0_ORed_ADDR中断栈空间为:128(单位:4bytes)
Priority
设置CAN0_ORed_ADDR中断的优先级为:1
Nested Enable
设置中断嵌套功能:不开启总的嵌套。
配置代码生成¶
请参考本文档的章节(模块配置及生成代码)。
源代码集成¶
普华交付给用户的工程结构如下:
BSW_Config目录,这个目录用来存放配置工具生成的配置文件。
SystemServices目录,存放模块相关的源代码。
集成步骤¶
OS代码集成步骤如下:
将章节(模块配置及生成代码)中ORIENTAIS Configurator生成的配置文件复制到BSW/Config/BSW_Config文件夹中。
将普华提供的协议栈源代码文件复制到BSW/SystemServices文件夹中。
协议栈调度集成¶
OS调度集成步骤如下:
协议栈调度集成,需要逐一排查并实现表 协议栈集成约束清单所罗列的问题,以避免集成出现差错。
执行编译、链接操作生成elf文件,并将elf文件烧写到目标板中。
MCU初始化相关的代码,在下方的main.c文件中给出重点标注。
1// 初始化MCU时钟
2int main(void)
3{
4 Mcu_Init(Mcu_ConfigRoot); // 初始化MCU模块,加载配置参数
5 Mcu_InitClock(0); // 初始化时钟,参数0表示使用默认时钟配置
6
7 /* 等待PLL锁定 */
8 while (MCU_PLL_UNLOCKED == Mcu_GetPllStatus()); // 循环等待PLL稳定
9
10 Mcu_DistributePllClock(); // 分发PLL时钟到各外设
11
12 StartOS(OSDEFAULTAPPMODE); // 启动操作系统,使用默认应用模式
13
14 /* 无限循环(理论上不会执行到此处) */
15 while (1)
16 {
17 }
18 return 1;
19}
验证结果¶
在调试软件界面点击全速运行,周期任务能够按照周期时间执行,达到了集成目标的要求。