vxworks653编程手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.V xWorks653运行时系统
1.1. 运行时层
一个vxworks653模块由下面四层组成:
■core OS—必需
■partition—至少需要一个(vThreads 或COIL-based),每个都在一个分区的操作系统之中■APEX shared library—ARINC 653 应用所需
■POSIX shared library—POSIX 应用所需
1.1.1.Core OS层
核心操作系统提供服务给分区。
缺省的,核心操作系统使用ARINC653规范中的时间抢占的调度(TPS)来调度分区。Vxworks653的核心操作系统还可以采用APPS调度策略在TPS调度的空闲时间内调度优先级
抢占调度(PPS)使能的分区。
核心操作系统提供给每个VThreads分区操作系统的服务包括:
●分区系统资源
●调度分区
●代表分区的操作系统执行trap异常
●定义和强制分区边界
●装载分区
●使用端口和通道在分区间传递消息
●处理I/O
●代表应用完成系统调用
●支持分区的调试
●监控分区和系统的健康
1.1.
2.vThreads 层
vThreads分区操作系统在核心操作系统分配给该分区的时间内调度vThreads中的线程。vThreads不直接与设备交互,而是通过核心操作系统的系统调用。
1.1.3.APEX 层
构建在vThreads之上,遵循ARINC653规范,并且提供相应功能和API。
1.1.4.POSIX层
构建在vThreads之上,遵循用于实时扩展的POSIX标准(1003.1b)。
1.2. 装载和启动
当目标板加电时,按照下面的步骤进行装载和启动
●初始的启动码装载核心操作系统,分区操作系统,共享库,以及应用
●核心操作系统初始化自身,启动它自己的子系统
●核心操作系统创建分区
●核心操作系统启动分区调度器,并且让应用初始化自身
核心操作系统可以在初始化完成之后下载在线装载的应用程序到分区。应用可以在分区运行之时装载到分区。
1.3. 运行时模型
核心操作系统处理来自每个分区的系统调用,并且在运行系统调用前校验每个系统调用的语句。使用vThreads分区操作系统的应用拥有完全的vThreads任务间通信机制。
APEX库提供了遵循ARINC653规范的分区管理,进程管理以及时间管理;为分区间通信提供了消息,通道,端口;为分区内通信提供缓冲区,黑板,信号量以及事件。
端口映射允许在VxWorks653模块之外通信。
二.开发APEX应用
APEX是位于应用程序和支持ARINC653规范的操作系统之间的API。对于VxWorks653,操作系统是vThreads分区操作系统和核心操作系统。APEX给vThreads分区提供了时间、进程管理以及管理周期性和非周期性进程的能力。
APEX提供如下服务:
●管理分区
●管理进程
●管理时间
●与其他分区通信(使用消息,端口和通道)
●分区内的通信(使用缓冲区,黑板,信号量以及事件)
●监控健康
2.1. 分区管理
分区的管理包含分配分区内存以及依据ARINC653规范初始化分区。
2.1.1.分配分区内存
每个分区的资源分配都定义在基于XML的配置和编译过程中,根据指定在该规范中的分区需求,为每个分区分配唯一的物理内存。通过禁止对超过该分区的内存区域的写访问来确保内存分区。
2.1.2.初始化分区:冷和热启动
冷启动:当VxWorks653模块加电并且创建分区时,使用冷启动分区操作模式。在冷启动模式下,分区对象被分配并且初始化。
热启动:热启动分区操作模式导致一个分区重新初始化或者由于遇到错误重新启动。在热启动模式下,持久数据不会重新初始化,分区代码也不会重新装载。
每个分区所使用的资源(如通道、进程、队列、信号量或事件等)在系统编译时指定。在分区的初始化阶段,创建分区所需的资源,然后分区进入NORMAL模式。
2.1.
3.分区属性
分区属性定义在XML配置文件中。
固定的分区属性包括:
●标识符:定义在VxWorks653模块上唯一的分区标识符。
●内存需求:分配给分区的物理内存
●周期:分区的激活周期。用来确定核心操作系统的整个时间帧内的分区激活的运行时位
置。
●持续时间:分区的每个周期内核心操作系统给予的处理器时间。
●关键级别:分区的RTCA/DO-178B认证级别。
●通信需求:分区与其他分区通信的通信通道
●分区健康监控表(健康监控配置):健康监控器对于故障的动作指令。
2.1.4.获得分区状态
GET_PARTITION_STATUS函数可以获得当前情况下的分区状态。
type PARTITION_STATUS_TYPE is record
IDENTIFIER : PARTITION_ID_TYPE;
PERIOD : SYSTEM_TIME_TYPE;
DURATION : SYSTEM_TIME_TYPE;
LOCK_LEVEL : LOCK_LEVEL_TYPE;
OPERATING_MODE : OPERATING_MODE_TYPE;
START_CONDITION : START_CONDITION_TYPE;
end record;
type OPERATING_MODE_TYPE is (IDLE, COLD_START, WARM_START, NORMAL);
type START_CONDITION_TYPE is (NORMAL_START,
PARTITION_RESTART,
HM_MODULE_RESTART,
HM_PARTITION_RESTART);
Where:
NORMAL_START is a normal power-up.
PARTITION_RESTART is either due to COLD_START or WARM_START by the partition
itself, through the SET_PARTITION_MODE service.
HM_MODULE_RESTART is a recovery action taken at module level by the HM.