试题一(共15分)

【说明】

智能家居系统以消费者的使用习惯为依据,利用信息系统和自动化控制系统实现人与家用设备之间的信息交换,也就是说,智能家居是对家庭环境中的各个子系统(家电、水电、窗帘、视频监控、服务机器人等)进行互通控制的一套体系。图1-1为某单位设计的以ZigBee、Wi-Fi及GSM为基础构建的集智能控制、安全监控为一体的智能家居系统示意图,依次是:家庭内部以ZigBee为基础的无线系统、用来进行视频传输的Wi-Fi网络和用来外部交互的外部交互网络。

安全视频监控系统利用Wi-Fi网络同家庭PC主机连接,用户可以通过外网或者内部Wi-Fi连接、实时监控家庭状态,或者当家庭内部出现紧急事件后,可以通过GSM网络向家庭用户发送短信或彩信。

王工计划为某小区设计一套智能家居系统,利用ZigBee技术的低功耗、自组织、可扩展等特点,组建家庭内部无线传感器网络,网络节点包括室内温湿度采集节点、火灾环境监测节点、模拟空调控制节点、模拟雨水窗户监控节点。王工在开发智能家居系统时采用V开发模型、V开发模型强调软件开发的协作和速度,将软件实现和验证有机结合起来,在保证较高的软件质量情况下缩短开发周期,图1-2为V模型示意图。该模型中,每个开发活动都有对应的验证活动,在进行客户需求分析时,测试人员可以了解产品设计特性、用户真正的需求,确定测试目标,可以准备用例并策划测试活动;在软件需求分析阶段,测试人员可以了解实现的过程、评审需求,设计测试方案和计划,并准备测试环境,设计系统或配置项测试用例:在软件概要设计阶段,测试人员可以评审概要设计,设计软件集成方案和用例;在详细设计阶段,测试人员可以评审详细设计,设计单元测试用例;在编码阶段,测试人员可以评审代码,并执行单元测试。

【问题1】(4分)

在图1-2所示的V模型中,与开发阶段中概要设计对应的测试阶段称为 ( 1 ) 。在系统或配置项测试阶段应采用 ( 2 ) 方法。

分析:

V模型是在快速应用开发模型的基础上演变而来的,由于将开发过程构造成一个V字型而得名,V模型强调软件开发的协作和速度,将软件实现和验证有机结合起来,在保证较高的软件质量的情况下缩短开发周期。

空(1)处对应概要设计。在软件工程中,以概要设计为测试依据的测试级别应为集成测试或部件测试,所以空 (1) 处的正确答案应为部件测试或组件测试或集成测试。

空(2)处的测试方法应为系统或配置项测试的测试方法。系统或配置项测试时,应该主要使用黑盒测试方法,但对一些特殊功能的测试还要对照代码使用白盒测试方法进行验证,所以应为灰盒测试方法。所以空(2)处的正确答案应为灰盒测试。

【问题2】(5分)

完成下面对图1-2所示的V模型的论述,将答案填写在答题纸的对应栏中。

1.客户需求分析对应验收测试。在进行需求分析、功能设计的同时,测试人员就可以阅读、审查分析结果,了解产品设计特性、用户真正的需求,从而确定 ( 1 ) 。

2.进行软件需求分析时,测试人员可了解实现的过程、评审需求,可设计( 2 ) 和 ( 3 ) 。 

3、设计人员做详细设计时,测试人员可参与设计,对设计进行 ( 4 ) ,同时 ( 5 ) ,并基于用例开发测试脚本。

分析:

从图1-2所示的V模型中可以看出,左边是设计和分析,是软件设计实现的过程,同时伴随着质量保证活动——审核的过程,也就是静态的测试过程;右边是对左边结果的验证,是动态测试的过程,即对设计和分析的结果进行测试,以确认是否满足用户的需求。

在进行客户需求分析时,测试人员就可以阅读、审查需求分析的结果,从而了解产品的设计特性、用户的真正需求,确定测试目标,可以准备用例(Use Case)并策划测试活动。

在软件需求分析阶段,测试人员可以了解实现的过程、评审需求,设计测试方案和计划,并准备测试环境,设计系统或配置项测试用例。

当系统设计人员在做系统设计时,测试人员可以了解系统是如何实现的,基于什么样的平台,这样可以设计系统的测试方案和测试计划,并事先准备系统的测试环境,包括硬件和第三方软件的采购。这些准备工作实际上要花很多时间。

当设计人员在做详细设计时,测试人员可以参与设计,对设计进行评审,找出设计的缺陷,同时设计单元测试用例,完善测试计划,并基于这些测试用例开发测试脚本。

在编程的同时,测试人员可以评审代码,并执行单元测试。进行单元测试是一种很有效的办法,可以尽快找出程序中的错误,充分的单元测试可以大幅度提高程序质量、减少成本。

从中可以看出,V模型使人们能清楚地看到质量保证活动和项目同时展开,项目一启动,软件测试的工作也就启动了,避免了瀑布模型所带来的误区,即“软件测试是在代码完成之后进行的”这一误区。

答案:

(1)测试目标

(2)测试方案和计划

(3)系统或配置项测试用例

(4)评审

(5)设计单元测试用例

【问题3】(6分)

ZigBee协调器是整个ZigBee家庭内网的核心,负责管理各个ZigBee节点设备与PC网关的信息和控制指令的传输。温湿度采集终端将传感器的数据以点播的形式发送给协调器,其他采集/控制节点以广播的形式与ZigBee协调器进行数据的交换,协调器和PC采用串口通信协议。协调器上电后,首先进行系统初始化,信道扫描、创建信道并组建网络。如果组建网络成功,则进行各层事件扫描;如果失败,则继续创建,如果检测到应用层有事件,则对事件进行处理;否则反复扫描各层事件。当应用层有事件,则检查数据类型。如果是室内环境数据,则经过串口发送到网关;如果不是室内环境数据,则进一步判断是否为控制指令;如果是,则向控制节点发送控制指令。ZigBee协调器软件流程图如图1-3所示。补充图1-3中的(1)~(4),并将答案填写在答题纸的对应栏中。

答案:

(1)系统初始化

(2)组网成功

(3)检查数据类型

(4)向控制节点发送控制指令

试题二(共15分)

【说明】

在智能家居系统设计中,李工被分配进行ZigBee协调器、信息采集器节点、终端控制节点和安全视频监控系统的部分硬件电路原理设计。

李工在基于微处理器的ZigBee协调器设计中,使用四个LED灯(D1、D2、D3、D4)表示状态,四个LED灯分别接到处理器的P2_0、P2_1、P2_2和P2_3管脚,部分相关的硬件设计如图2-1所示。

李工在CO₂ 的信息采集器节点设计中,采用红外传感器T6004进行CO₂ 信息收集,T6004利用CO₂ 可以吸收特定波段红外辐射的原理,同时内置温度补偿,与控制器CC2530进行连接、部分相关的硬件设计如图2-2所示。T6004传感器的工作电压为5V,CC2530控制器的工作电压为2.0~3.6V。

李工在空调终端控制节点设计中,采用红外遥控电路中的红外发光二极管将调制好的红外光波发送给空调的红外接收电路,部分相关的硬件设计如图2-3所示,处理器通过P1_4管脚进行红外光波的发送。

李工设计的安全视频监控系统原理示意图如图2-4所示。主处理器采用TI的DM6446,该处理器包括ARM子系统、DSP子系统、视频处理子系统等,前端模拟视频通过TVP5146进行(可接2路模拟视频输入,分别是V1和V2)采集,TVP5146将模拟视频数据转换为10bit的YCbCr4:2:2数字格式,然后送到主处理器。主处理器通过I²C总线可以对TVP5146进行配置(TVP5146接口电压为3.3V),TVP5146和主处理器之间接口包括:10bit数字视频信号、时钟信号、行场同步信号。DM6446主处理器的视频信号接口、I²C接口工作电压为1.8V。

【问题1】(4分)

在ZigBee协调器设计中,按照需求李工定义了四个LED灯的状态含义,分别是:D1“亮”表示协调器已启动,“灭”表示协调器未启动;D2“亮”表示有外围信息采集器节点已加入到ZigBee网络,“灭”表示目前无节点加入网络;D3“亮”表示有终端控制节点已加入到ZigBee网络,“灭”表示目前无节点加入网络;D4“亮”表示协调器正在通过串口和PC 主机进行数据通信,“灭”表示目前没有数据通信。如果当前ZigBee协调器处于启动状态且只有CO₂ 外围信息采集器连入ZigBee网络,没有任何终端控制节点连接,协调器正在通过串口向PC主机发送CO₂ 的采集信息,在这种情况下,P2_ 0、P2_ 1、P2_ 2和P2_ 3应该分别输出什么电平(回答高电平或低电平)?

分析:

根据该问题给出的题干,在ZigBee协调器设计中,李工定义了四个LED灯的状态含义,分别是:D1“亮”表示协调器已启动,“灭”表示协调器未启动;D2“亮”表示有外围信息采集器节点已加入到ZigBee网络,“灭”表示目前无节点加入网络;D3“亮”表示有终端控制节点已加入到ZigBee网络,“灭”表示目前无节点加入网络;D4“亮”表示协调器正在通过串口和PC主机进行数据通信,“灭”表示目前没有数据通信。

如果当前ZigBee协调器处于启动状态且只有CO₂ 外围信息采集器连入ZigBee网络,收有任何终端控制节点连接,协调器正在通过串口向PC主机发送CO₂ 的采集信息,在这种情况下,协调器已经启动(D1亮)、有外围的信息采集器连接到网络(D2亮)、没有控制节点连接到网络(D3灭)、正在进行通信(D4亮)。根据该内容判断,结合电路中要使得灯亮时候的电平控制,可以很容易知道P2_0为低电平(D1灯亮),P2_1为低电平(D2灯亮),P2_2为高电平(D3灯灭),P2_3为低电平(D4灯亮)。

【问题2】(5分)

1.在图2-2的CO₂ 信息采集器设计中,两个IN4007(U3和U4)的作用是什么?

2.为了使得红外发光二极管发射,图2-3中的P1_4应该输出高电平还是低电平?

3.在图2-4中,连接主处理器DM6446和TVP5146之间的SN74AVC芯片的作用是什么?

分析:

在该题干中已经说明:T6004传感器的工作电压为5V,CC2530控制器的工作电压为2.0~3.6V。在图2-2的CO₂ 信息采集器设计中,两个IN4007(U3和U4)的最左端输入电压为5V、所以可知其作用为降压,是为了进行电压匹配。

为了使得红外发光二极管发射,图2-3中的P1 4应该输出高电平才可以使得三极管导通,进而才可以使得灯亮。

在图2-4中,DM6446的IO口工作电压是1.8V,而TVP5146芯片的接口工作电压是3.3V,因此连接二者的SN74AVC芯片可以起到电平转换的作用,实现TVP5146和DM6446二者在进行数据通信中的电压匹配。

【问题3】(6分)

在使用I²C接口对TVP5146进行配置时,DM6446为主,TVP5146为从。在每次写寄存器配置操作中,需要主先发送设备从地址,再发送待操作的寄存器地址,最后发送待写入的数据,并且每次主向从发送消息,都需要接收到从的应答后,才能进入下一步操作。

在调试过程中,李工希望通过I²C来配置TVP5146的视频标准模式,对应的寄存器地址和各个Bit位的含义如表2-1所示。

假设当前TVP5146的I²C地址为0x64(设备从地址),李工希望将该TVP5146配置为NTSC525视频标准,请从以下A~I中选择合适的操作,补充到图2-S中的空(1)~(6)处。

A、通过I²C发送寄存器地址00h

B、通过I²C发送寄存器地址02h

C.通过I²C发送数据01h

D.通过I²C发送数据03h

E.通过I²C发送设备从地址64h

F.通过I²C发送设备从地址60h

G.等待TVP5146应答

H、向TVP5146发送回应

I、是否有中断发生

分析:

根据题干可知,在使用I²C接口对TVP5146进行配置时,DM6446为主,TVP5146为从。在每次写寄存器配置操作中,需要主先发送设备从地址(通过I²C发送设备从地址64h)并等待TVP5146应答,在回应通过后再发送待操作的寄存器地址(通过I²C发送寄存器地址02h,该寄存器地址由表2-1可知)并等待从设备的回应,在等待到正确的回应后,最后发送待写入的数据(通过I²C发送数据01h,数据寄存器的内容由配置的模式来决定,题目中给定的模式对应的寄存器值为0lh),待接收到正确的回应后配置寄存器的过程才算完成。

答案:

(1)  E

(2)  G

(3)  B

(4) G

(5)  C

(6)  G

试题三(共15分)

【说明】

在智能家居系统软件设计中,家庭内网节点软件设计包括协调器软件、现场采集/执行器(室内温湿度采集节点、模拟台灯控制节点、模拟雨水窗户监控节点、模拟空调控制节点和火灾检测节点)的软件设计。软件功能组成如图3-1所示。

整个系统中,协调器是整个家庭内网的核心,负责管理各个节点设备与PC网关的信息和控制指令的传输。温湿度采集终端将传感器的数据以点播的形式发送给协调器,其他采集/控制节点以广播的形式与协调器进行数据的交换,协调器和PC采用串口通信协议。协调器软件主要完成以下功能:

(1)创建信道,组建网络;如果失败,则继续创建。

(2)组建网络成功,则进行各层事件扫描。

(3)如果检测到应用层有事件,则转第(4)步,否则反复扫描各层事件。

(4)判断数据类型,如果是室内环境数据,则经串口发送到网关;如果是控制指令,则向控制节点发送控制指令;如果前面两者均不是,则不处理。

(5)继续扫描各层事件。

【问题1】(3分)

在本软件开发过程中,开发人员使用了基于模型的嵌入式代码生成技术,目前对模型验证最主要的方法是(1),通过此方法验证后,利用此验证结果可对模型的覆盖率进行分析,模型的覆盖率类型一般包括 (2)(至少写出两种类型)。

分析:

随着嵌入式软件规模越来越大,可靠性要求越来越高,采用基于模型的开发方法已成为发展趋势。特别是一些基于模型的开发工具自带的代码生成器已经经过鉴定,其生成的代码已经不需要进行白盒测试。所以对基于模型开发的软件测试来说,模型的验证方法就尤为关键,因为模型的正确性决定着代码的正确性。

目前对模型采取的验证方法包括评审、分析和仿真。评审和分析都是静态的验证方法,而仿真属于动态验证方法。通过动态仿真模型,可以发现模型动态运行过程中的一些问题。仿真完成后,可以根据动态仿真结果分析模型的覆盖率,而静态验证方法(评审和分析)的结果就不能作为模型覆盖率分析的基础。所以根据这些内容可知,问题1的模型验证最主要的方法是仿真。

模型的覆盖率类型主要包括条件覆盖、分支(或判定)覆盖、MC/DC覆盖、插值表覆盖、信号范围覆盖、组合逻辑块覆盖等。目前的工程实践中,经常使用的覆盖率类型包括条件覆盖、分支(或判定)覆盖和MC/DC覆盖。考生可从这三种常用类型中选择两种类型,也可从全部覆盖类型中任意选择两种类型。

【问题2】(6分)

为了测试此软件功能,测试人员设计了表3-1所示的测试用例,请填写该表中的空(1)~(3)。

分析:

 答案:

(1) 进行各层事件扫描

(2) 室内温湿度数据

(3) 台灯
 

【问题3】(6分)

覆盖率是度量测试完整性的一个手段,也是度量测试有效性的一个手段。在嵌入式软件白盒测试过程中,通常以语句覆盖率、条件覆盖率和MC/DC覆盖率作为度量指标。在实现第4条功能时,设计人员采用了下列算法:

If( (数据有效==TRUE)&&(数据类型==室内环境数据) )
{

      数据经串口发送到网关;

}

If( (数据有效==TRUE)&&(数据类型==控制指令) )
{
    向控制节点发送控制指令;
}

请指出对上述算法达到100%语句覆盖、100%条件覆盖和100%MC/DC覆盖所需的最少测试用例数目,填写在表3-2的空(1)~(3)中。

分析:

(1) 语句覆盖要求设计适当数量的测试用例,运行被测程序,使得程序中每一条语句至少被运行一遍,语句覆盖在测试中主要发现错误语句。

(2) 条件覆盖要求设计适当数量的测试用例,运行被测程序,使得程序中每个判断中的每个条件的真值分支和假值分支至少执行一次,但未必能覆盖全部分支。

(3) 修正判定条件覆盖(MC/DC)要求设计适当数量的测试用例,保证在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每个判断中的每个条件必须能够独立影响一个判断的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判断结果改变。

1. 理解代码逻辑

代码可以抽象为两个独立的 if 条件分支,它们判断条件不同,执行不同的操作。

第一段代码:

if ( (数据有效 == TRUE) && (数据类型 == 室内环境数据) ) {
    数据经串口发送到网关;
}

条件记为 C1∧C2 :

  • C1:数据有效 == TRUE

  • C2:数据类型 == 室内环境数据

第二段代码:

if ( (数据有效 == TRUE) && (数据类型 == 控制指令) ) {
    向控制节点发送控制指令;
}

条件记为 C1∧C3:

  • C3:数据类型 == 控制指令

注意 C2 和 C3 是互斥的(数据类型只能是一种),所以 C2 为真时 C3 必为假,反之亦然。

2. 100% 语句覆盖

要求每个可执行语句至少执行一次。

  • 第一段 if 为真,执行发送到网关

  • 第二段 if 为真,执行发送控制指令

  • 两个条件语句本身总能执行,所以只需让两条 if 都为真。

但 C2 和 C3 不可能同时真,所以需要用两次测试:

  1. (C1=T,C2=T,C3=F) → 执行第一个 if 体

  2. (C1=T,C2=F,C3=T) → 执行第二个 if 体

这样两个语句体都执行一次。
最少用例数 = 2

3. 100% 条件覆盖

要求每个条件的真、假都至少出现一次。

条件集合:C1,C2,C3
C2 和 C3 不是独立的,但覆盖测试时不需要独立覆盖组合,只需保证每个条件至少一次 T 和 F。

但我们的测试可以这样满足:

  1. (C1=T,C2=T,C3=F)→ C1: T, C2: T, C3: F

  2. (C1=F,C2=F,C3=T)(注:C3=T时 C2 自然 F,C1=F 时不用管 C2/C3 真假)

这样覆盖:

  • C1: T(用例1)、F(用例2)

  • C2: T(用例1)、F(用例2,因 C2 为 F)

  • C3: F(用例1,因 C3 与 C2 互斥)、T(用例2)

最少用例数 = 2

4. 100% MC/DC 覆盖

 

按照上述MC/DC覆盖要求,要使得每个判断中的每个条件必须能够独立影响一个判断的输出。对问题3中的两个判断进行分析:

每个判断有两个条件,两个条件共有四种组合,即
TT(TRUE和TRUE)
TF(TRUE和FALSE)
FT(FALSE和TRUE)
FF(FALSE和FALSE)

但是由于这两个判断均为逻辑与条件,当前一个条件为FALSE时,其整个判断值为FALSE,后一个条件的真或假均不能独立影响整个判断的输出,所以对每个判断只需要TT、TF和FX(X表示后一个条件为TRUE或FALSE都可以)三种情况就可以。即:

T T
T F
F X

同时由于这两个判断中的第一个条件相同,并且第二个条件互斥(即一个为真时,另一个一定为假),所以第一个判断的FX与第二个判断的FX相同,可共用一个测试用例覆盖,故对两个判断的FX仅需要1个用例即可。同时当执行第一个判断的TT用例时,也一定执行了第二个判断的TF用例,但是当执行第一个判断的TF用例时,未必能执行第二个判断的TT。所以为了问题3的MC/DC覆盖,最少需要执行第一个判断的TT、TF和FT,以及第二个判断的TT,故总共需要4个测试用例即可满足MC/DC覆盖要求。 

4 个测试用例 满足两个条件的 MC/DC。

说明:语句覆盖和条件覆盖的区别

核心区别

  • 条件覆盖:只关心每个条件本身的真假值是否都出现过,不关心条件组合的结果(即不关心整个 if 是否执行)。

  • 语句覆盖:关心每个语句体是否至少执行一次。

它们是不同维度的测试覆盖准则,要求不同,独立评价。

您的例子分析

用例1: (C1=T, C2=T, C3=F)

  • 第一个 if 的整个条件 (C1 && C2) = T,所以执行“发送到网关”。

  • 第二个 if 的整个条件 (C1 && C3) = F,所以不执行“发送控制指令”。

用例2: (C1=F, C2=F, C3=T)

  • 第一个 if 的整个条件 (C1 && C2) = F,所以不执行“发送到网关”。

  • 第二个 if 的整个条件 (C1 && C3) = F,所以也不执行“发送控制指令”。

问题:用例2 中,第二个 if 的语句体没有执行

为什么条件覆盖仍算通过?

条件覆盖的要求是:

每个条件的真、假至少出现一次。

检查:

  • C1:用例1 为 T,用例2 为 F ✓

  • C2:用例1 为 T,用例2 为 F ✓

  • C3:用例1 为 F,用例2 为 T ✓

三个条件都同时出现了 T 和 F,所以条件覆盖的要求已经满足。

条件覆盖不要求每个 if 的语句体都执行,也不要求每个条件组合都导致某个特定的结果(如 T 或 F)。

试题四(共15分)

【说明】

随着汽车工业的飞速发展,越来越多的车上的原有机械控制装置正在被电子控制装置所取代,这是典型的实时控制系统,例如用于控制发动机、自动变速箱、防抱死系统、电子稳定控制系统、牵引力控制系统、刹车辅助系统的ECU和用于座位调整、车窗玻璃升降、车顶移动的电子产品,这在很大程度上提高和完善了汽车的性能和技术水平。但是,汽车上电控系统的多样化和系统结构的复杂化,也直接导致相应的汽车电子软件开发难度越来越高。

某汽车的ECU(Electronic Control Unit,电子控制单元)系统,采用某高性能的多核处理器,软件架构采用符合AUTOSAR(AUTOmotive Open System Architecture,汽车开放系统架构)标准的多核操作系统,将多个控制应用集成在一个处理器上运行,降低了系统设计的成本、体积、功耗。

【问题1】(5分)

AUTOSAR中定义了应用任务有四种不同的状态,其状态之间的切换如图4-1所示。

请从以下状态选项中为(1)~(5)选择正确的状态编号,并将答案填写在答题纸的对应栏中。
A.触发
B.启动
C.挂起
D.被抢占
E.创建
F.激活
G.删除
H.时间片用完

分析:

基础任务:只有运行、阻塞、就绪三个状态。较之基础任务,多了一个等待状态。拓展任务被允许调用系统服务WaitEvent。每个任务状态的特点如下:

(1) 运行态:在任何时间点只有一个任务能处于运行状态,CPU将会被分配到该任务,该任务的指令将被执行。

(2) 就绪态:所有的任务要转换为运行状态都必须先处于就绪状态,处于就绪态的任务只需等待分配处理器就能转换为运行态。调度器决定哪一个就绪态的任务将是下一个执行的任务。

(3) 阻塞态:处于阻塞态的任务是被动的,可以被激活。

(4) 等待态:处于等待态的任务将不能继续执行,它将等待至少一个事件发生。

任务状态的转换原则如下:
(1) 触发:一个新的任务被设置成就绪状态。 

(2) 启动:一个就绪态的任务被调度器选择去执行。

(3) 被抢占:调度器决定去执行另一个任务,使得运行态任务进入就绪态。

(4) 挂起:运行态任务通过调用系统服务导致它的状态转换为阻塞态。

(5) 等待:通过一个系统服务引起状态转换到等待态,等待任务等待一个事件,以能够继续操作。

(6) 激活:至少一个任务等待的事件发生。

答案:

(1) C

(2) F

(3) A

(4) B

(5) D

【问题2】(4分)

(1)该系统中任务的优先级是静态分配的,在某些特定的情况下,多任务抢占资源会发生死锁,解决的策略一般是采用优先级天花板方式。请简述优先级天花板的原理。

分析:

优先级天花板是当任务申请某资源时,把该任务的优先级提升到可访问这个资源的所有任务中的最高优先级,这个优先级称为该资源的优先级天花板。

(2)该系统采用了多核处理器,多核处理器一般有SMP和AMP两种不同的工作方式。请简述SMP和AMP的差异。

分析:

SMP是对称多处理技术,多个内核由一个操作系统管理。AMP是非对称多处理技术,每一个内核由一个操作系统管理。

【问题3】(6分)

该ECU系统在上电、复位或唤醒后,首先进入Boot模式,进行开或者关,对FLASH和RAM进行初始化,然后进入用户程序,用户程序是从cstart函数开始执行的,在多核嵌入式系统中通常是先进行主核的estart,主核自身进行部分初始化后将从核从HALT状态激活,然后主核和从核在完成各自必要的设置后分别进入各自的main函数。图4-2是该系统多核处理器的启动流程,请补充空(1)~(3)的内容,将解答填写在答题纸的对应栏中。

答案:

(1) 对FLASH和RAM进行初始化

(2) 主核把从核由HALT状态激活

(3) 从核执行相关初始化设置

试题五(共15分)

【说明】

在某工厂的物流车间,设计一款智能监测系统,实现对车间进行24小时不间断图像采集的功能。王工设计了一个实时监测采集系统,主要由图像采集卡和数据存储卡组成。由于实时图像的数据量巨大,设计采用DMA方式进行数据传输,当DMA传输完成后,DMA控制器会发起一个硬件中断。操作系统接收到硬件中断,调用中断服务程序。该系统的软件基于某嵌入式操作系统开发,支持中断管理、多任务调度等功能。与DMA 相关的一段驱动程序示例代码如下。

【C语言程序声明与定义】

/*DMA控制寄存器基地址*/
# define DMA0_BASE_ADDR0xC0021100
# define DMA1 BASEADDR0xC0021180

/*DMA中断向量号*/
# define DMA0_INT VECTOR5
# define DMA1_INT VECTOR6

UINT32 Dma err ret=0;/*DMA传输状态全局变量,用于在DMA传输函数和DMA中断处理程序中传递DMA完成状态*/

SEM_ID sem_DMA1; /*互斥信号量*/

SEM_ID _sem_ DMA2; /*同步信号量*/

SEM_ IDsemBCreate( int/*排队规则*/, int/*初始值*/);/*操作系统创建信号量 api*/

int semTake(int/*信号量ID*/, int/*等待时间*/); /*操作系统获取信号量api*/

int semGive(int/*信号量ID*/); /*操作系统释放信号量api*/

extern int intConnect(int/* 中 断 向 量 */,VOIDFUNCPTR/* 中 断 服 务 程 序 */, int/* 参 数 */);
/*操作系统释放中断连接程序api*/


【程序1】
/*DMA功能初始化*/
UINT32 dma_init( )
{
    /*创建互斥信号量*/
    sem_DMA1=semBCreate(SEM_Q_FIFO/*系统定义的排队方式*/,1);
    /*创建同步信号量*/
    sem DMA2=semBCreate(SEM _Q _FIFO/*系统定义的排队方式*/,0);
    /*向操作系统挂接中断处理程序*/
    intConnect(DMA0_INT_VECTOR,( (1) ) dma_intHandle,0);
    return 0;
}


【程序2】
/*DMA传输函数
   返回值1表示正常完成,2表示传输超时,4表示奇偶校验错
/
UINT32 dma_trans(UINT32 src_addr,/*DMA传输源地址*/
UINT32 dst addr, /*DMA传输目的地址*/
UINT32 length /*DMA传输长度*/
)
{
     Dma_err_ret=0; //第1行
     /*DMA控制寄存器的操作序列为原子操作,进入临界区*/
     semTake( (2) ,WAIT FOREVER/*系统定义的等待时间*/);//第2行
    /*DMA寄存器初始化*/
    /*代码略、、、*/
    /*设置DMA传输的源地址、目的地址、长度*/
    /*代码略…*/
    /*启动DMA传输*/
    /*代码略… */
    /*等待DMA传输完成*/
    semTake( (3) ,WAIT FOREVER/*系统定义的等待时间*/);//第3行
   /*退出临界区*/
   semGive( (4) );
   //第4行
   /*返回DMA传输完成状态*/
   return( Dma_err_ret); //第5行
}

【程序3】
/*DMA中断处理程序*/
void dma_intHandle( )
{
   UINT32 tempReg = 0;
   UINT32baseAddr=DMA0_BASE_ADDR;
   /*获取DMA传输完成状态寄存器*/
   tempReg=*(UINT32*)( base addr+0x04);
   *(UINT32*)( base addr+0x04)=tempReg&0xff;
   /*
   *保存DMA传输完成状态到全局变量
   *1表示正常完成,2表示传输超时,4表示奇偶校验错
   */
   Dma_err_ret=tempReg&0xff;
   /*释放同步信号量,通知DMA传输完成*/
   semGive( (5) );
}

【问题1】(5分)

在操作系统的头文件中,有如下类型定义:
typedef void(*VOIDFUNCPTR)();/*ptr to function returning void*/
typedof int(*FUNCPTR)()1 /*ptr to function returning int*/

1.该类型定义了一组什么类型的变量,简述其功能。

分析:

函数指针是指向函数的指针变量。因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样。函数指针有两个用途:调用函数和作为函数的参数。函数指针的声明方法为:

返回值类型 ( *指针变量名 )( [形参列表] );

“返回值类型”说明函数的返回类型,“(*指针变量名)”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:

int func ( int x ); /*声明一个函数*/
int (*f) (int x);/*声明一个函数指针*/
f=func; /*将func函数的首地址赋给指针f*/
或者使用下面的方法将函数地址赋给函数指针:
f=&func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

答案:

函数指针。函数指针是指向函数的指针,包含了函数的地址,可以通过它直接调用函数。

2.在程序1的 dma_init 函数中,应该将intConnect函数的第二个参数转换成相应的类型,可以消除编译警告,请补充其中空 (1)的内容。

分析:

intConnect函数的第二个参数声明为VOIDFUNCPTR 型,它是一个返回值为空的函数指针,所以在程序1的 dma_init 函数中,应该将intConnect 函数的第二个参数转换成VOIDFUNCPTR类型,可以消除编译警告。

【问题2】(4分)

DMA控制器的寄存器操作序列,必须为原子操作,该程序中使用了两个信号量,一个用于进行寄存器操作系统的临界区保护,一个用于在传输函数和DMA完成中断处理程序之间同步。请根据信号量创建时的不同初始值,在程序2的 dma_ trans 函数和程序3的 dma_ intHandle 函数中,补充空 (2) 、(3) 、 (4) 、 (5)处的内容。

参考答案:

(2) sem_DMAl
(3) sem_DMA2
(4) sem DMAl
(5) sem_DMA2

【问题3】(6分)

在该系统中有A、B两个应用任务同时从不同角度采集图像,都需要调用该DMA传输函数,任务A和任务B的优先级相同。该系统采用优先级抢占的调度策略。在任务A调用DMA传输函数进行DMA传输时,有时会出现函数返回值为0的情况。根据DMA控制器的芯片手册定义,1表示正常完成,2表示传输超时,4表示奇偶校验错,所以返回值不应该为0。

王工经过认真排查后,分析该故障发生的原因是当任务A调用 dma_trans 函数时,会发生任务suspend 的情况,此时如果任务B也调用 dma_trans 函数,则会发生上述故障。

1.请给出 dma_trans 函数中会导致任务发生阻塞的代码行号。

2.按照王工的分析,对全局变量的不正确操作会导致该函数的返回值错误,请给出发生错误的代码行号。

3.王工对该程序进行了改进,将上述会导致返回值错误的代码放在某一行程序之后执行,即可解决该问题,请给出代码行号。

注意:这里的行号是指程序2中注释所标的第1行到第5行,请在第1行到第5行之中选择。

参考答案:
 
1. 2或第2行或3或第3行

2. 1或第1行

3. 2或第2行

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐