【答案解析】 本题考查考生解决嵌入式系统综合问题的能力。
【问题1】
本问题考查程序可执行程序基本结构和概念。
程序经过编译后生成的目标文件至少含有三个段,分别是text段、data段和bss段。
bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,在程序载入时由内核清零。bss段属于静态内存分配。
data段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域,data段属于静态内存分配。
text段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域,这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
在本题中数组arrMap被定义为无初值的全局变量,所以此数组位于bss段中。
【问题2】
本问题考查RapidIO通讯的基本概念。
RapidIO规范在2009年发布了2.1版本,向后兼容RapidIO1.3。在2.1版本中采用了新的高性能物理层,除此之外还增强了数据平面的性能。针对并行传输方式提出了8/16并行LVDS协议,对串行方式提出了1x/4x两种模式。RapidIO协议的I/O操作是基于请求的,在结束时会有响应事务。
上述串行模式下的RapidIO协议即SRIO通信协议,它构建了3层的协议体系。如图3所示,分别是物理层、传输层、逻辑层。物理层定义了硬件接口的电器特性,并包括链路控制、初级流量控制和低级错误管理等功能;位于中间的传输层,负责进行寻址和路由信息管理;顶层的逻辑层定义了服务类型和包交换的格式。
逻辑层定义了数据包的格式,同时支持两种操作方式,分别是直接IO/DMA(Direct IO/Direct Memory Access)方式和消息传递(Message Passing)方式。
1)直接IO/DMA传输方式
直接IO/DMA是一种常用的数据传输方式,但是发送端需要知道被访问设备的存储空间地址映射。在直接IO/DMA模式下,被访问端的操作基本由硬件实现。直接IO/DMA下,发起一次传输操作,需要有效数据、目标器件ID、数据长度、数据在被访问设备存储空间的地址以及包优先级等。同时,所有构成的包的长度为32bit的整数倍;若包长度不能满足要求,则添加附加位进行弥补。在直接IO/DMA传输方式下包含以下几种传输类型:
(1)NWRITE:可以直接向被访问器件的存储空间写数据。单次操作最多写入256字节数据,且不要求目标器件响应。
(2)NWRITE_R:与NWRITE基本相同,不同的是NWRITE_R操作要求目标器件响应。
NWRITE和NWRITE_R这两种传输类型均属于Rapid协议中定义的第5类事务。
(3)SWRITE:流写操作。在进行流写操作时数据大小要满足8字节的整数倍,且发送后不要求目的器件进行响应。同时SWRITE操作也是SRIO传输方式中效率最高的。其属于第6类事务,包的开销大大减小,提高了数据传输的效率。
(4)NREAD:直接从目的器件相应的存储空间读取内容,一次操作可读取数据长度为1~256bit。NREAD属于SRIO协议中第2类事务。
(5)Atomic:即原子操作,它不包含任何有效载荷。
(6)Maintenance:即维护包,它的主要作用是器件发现、路由信息维护和交换器件初始化配置等。
2)消息传递方式
消息传递方式不要求发送节点知道目的节点的地址空间映射,当数据到达目的节点时,会根据邮箱号确定消息存储位置。在消息传递模式下进行数据传输时,除了有效载荷外还需要提供目的节点的ID、数据长度、包优先级和邮箱号等。除了用户自定义的传输类型外,消息传输方式定义了两种传输类型:
(1)DOORBELL:门铃消息要求信息传输长度小于等于16bit,适合于处理器间的中断通知。门铃消息属于第10类事务。
(2)MESSAGE:多事务消息的有效载荷最高可达4096字节,最多可包含16个事务,每个事务最大有效载荷为256字节,且要求有效载荷大小必须为双字的整数倍。MESSAGE是第11类事务。
3)以上两种传输方式的差异
SRIO逻辑层中直接IO/DMA模式和消息传递模式这两种传输方式的主要差异如下表所示。
| RaoidIO逻辑层中两种传输方式的比较结果
|
| 主要特征
|
直接IO/DMA方式
|
消息传递方式
|
| 发送端设备是否能直接访问目的端设备存储地址
|
可以
|
不可以
|
发送端设备是否需要知道目的端设备存储空间的地 址映射
|
需要
|
不需要
|
| 支持的数据寻址方式
|
直接寻址
|
通过邮箱号间接寻址
|
| 支持的数据访问方式
|
读/写
|
只能写
|
| 被访问端设备是否存在软件开销
|
无
|
有
|
【问题3】
本问题考查中断处理的基本知识。
中断是指计算机系统运行时,出现来自处理机以外的任何现行程序不知道的事件,CPU暂停现行程序,转去处理这些事件,待处理完毕,再返回原来的程序继续执行,这个过程称为中断,这种控制方式称为中断控制方式。
请求CPU中断的设备或事件称为中断源,根据中断源的不同类别,可以把中断分为内中断和外中断两种。中断的处理过程一般按如下步骤进行:
(1)关中断:进入不可再次响应中断的状态,由硬件自动实现:
(2)保存断点:为了在中断处理结束后能正确地返回到中断点,在响应中断时,必须把当前的程序计数器PC中的内容(即断点)保存起来;
(3)识别中断源,转向中断服务程序:在多个中断源同时请求中断的情况下,本次实际响应的只能是优先权最高的那个中断源,所以,需要进一步判断中断源,并转入相应的中断服务程序入口;
(4)保存现场和屏蔽字:进入中断服务程序后,首先要保存现场,现场信息一般指的是程序状态字,中断屏蔽寄存器和CPU中某些寄存器的内容。保存旧的屏蔽字是为了中断返回前恢复屏蔽字,设置新的屏蔽字是为了实现屏蔽字改变中断优先级或控制中断的产生;
(5)开中断:因为接下去就要执行中断服务程序,开中断将允许更高级中断请求得到响应,实现中断嵌套;
(6)执行中断服务程序主体:不同中断源的中断服务程序是不同的,实际有效的中断处理工作是在此程序段中实现的;
(7)关中断:是为了在恢复现场和屏蔽字时不被中断打断;
(8)恢复现场和屏蔽字:将现场和屏蔽字恢复到进入中断前的状态;
(9)中断返回:中断返回是用一条IRET指令实现的,它完成恢复断点的功能,从而返回到原程序执行。
进入中断时执行的关中断、保存断点操作和识别中断源是由硬件实现的,它类似于一条指令,但它与一般的指令不同,不能被编写在程序中。