列表

详情


【说明】
某公司承接了一个数据处理模块的项目,由沈工负责模块的方案设计,沈工的设计方案如图4-1所示。该数据处理模块以PowerPC处理器为核心,设计了存储器、以太网、温度传感器、调试接口等功能电路。
处理器外接FLASH存储器用于存储上电初始化程序和应用程序。处理器通过I2C接口连接测温电路,监控模块的工作温度。以太网、串口、调试离散量等用于软件调试和状态显示。
测温电路选用ADT7461AR芯片,用于测试模块温度,ADT7461AR是一个双通道数字温度计,工作电压3v至5v,具有低/超温报警功能,采用I2C接口实现主机对远程/本地温度数据的采集,采集数据存储在高/低两个数据寄存器中,每个寄存器为16位,高寄存器表示整数值,低寄存器表示小数值。


存储模块采用某公司的FLASH存储芯片。支持编程、擦除、复位等操作命令。该FLASH芯片的常用命令序列如表4-1所示。表中的地址和数据皆为16进制数。


【问题1】
ADT7461AR芯片支持两种测温模式,其中第一种模式为二进制模式,用0表示0度,测温范围为0℃~+127℃;第二种模式为偏移二进制模式,用64表示0度,测温范围为-55℃~+150℃,温度数据转换关系如表4-2所示。
请在(1)~(4)处写出对应温度的二进制数。


【问题2】
沈工用C语言实现对FLASH的操作,需按照表4-1中定义的命令序列顺序执行即可。仔细阅读下列代码,请在(1)~(4)处将对应的C语言代码补全。


【问题3】
该嵌入式系统对处理的性能要求较高,沈工在完成软件设计后,需要对每一个函数的执行性能进行测试,检测其是否满足系统设计的要求。沈工通过PowerPC处理器内部的高精度时钟寄存器(TimeBase)进行计时,该寄存器由高低两个32位的寄存器组成,根据总线频率自动递增,当低32位寄存器递增到0xFFFFFFFF时,向高32位寄存器进位。计数值可以换算成时间值,精确到微秒级。
在功能函数fimction10的执行体前后,进行时间统计,最后计算出该函数的执行时间值,请在(1)~(2)处将对应的C语言代码补全。



参考答案:

【问题1】
(1)0011 0110 0000 0000
(2)0000 0000 0100 0000
(3)0100 0001 0000 0000
(4)0011 0010 0000 0000
【问题2】
(1)0x2AA
(2)0x80
(3)offset_addr
(4)0x30
【问题3】
(1)tbl.lower–tb0.lower
(2)0xFFFFFFFF–tb0.lower +tbl.lower+1

详细解析:

本题考查嵌入式系统中计算机模拟量表示、FLASH设备驱动、高精度计数器等方面的相关知识及应用。
【问题1】

根据题干的描述信息,该芯片的采集数据存储在高/低两个数据寄存器中,每个寄存器为16位,高寄存器表示整数值,低寄存器表示小数值。
当芯片工作在第一种模式(二进制模式),用0表示0度。根据温度为0℃时为0000 0000 0000 0000,+1℃时为0000 0001 0000 0000 ,说明高8位寄存器的范围是从0到127,表示了0℃~127℃。
然后根据+0.5℃时为0000 0000 1000 0000,低8位寄存器中从左到右分别表示了+0.5℃,+0.25℃,+0.125℃等。
当芯片工作在第二种模式(偏移二进制模式),用64表示0度。低8位跟二进制模式是一样的。高8位寄存器从9(64-55)到214(64+150),表示-55℃~+150℃

【问题2】
根据表4-1以及C语言代码的注释,可以得知是需要对扇区进行擦除操作,而扇区擦除操作共需要6个命令的总线写操作完成,命令序列如下:
(1)将0xAA写到FLASH芯片地址0x555;
(2)将0x55写到FLASH芯片地址0x2AA;
(3)将0x80写到FLASH芯片地址0x555;
(4)将0xAA写到FLASH芯片地址0x555;
(5)将0x55写到FLASH芯片地址0x2AA;
(6)将0x30写到要擦除的扇区对应的地址。
【问题3】

Power Architecture的处理器提供了一个名为Time Base(TB)的计数寄存器,它用来记录系统时间。TB寄存器会以一种依赖于实现的总线频率周期性地增加,这个频率可能不是恒定的。操作系统(OS)要负责确定更新频率是否发生了变化,以及对内部结构进行必要的调整,从而将计数值换算为绝对时间值。一般TB寄存器的计时精度可以达到微妙级。
本项目中用一个包含高低两个32位整型数的结构体来存储TB寄存器的值。当低32位寄存器发生溢出时,处理器会自动向高32寄存器加1。通过插桩的方式测量函数的执行时间时,需要在功能函数fimctionlO 的执行体前后,分别两次获取TB寄存器的值,最后计算两次的差值,即为该函数的执行时间值。本题中tb0为函数进入时的TB值,tb1为函数退出前的TB值,tb2为tb1和tb0的差值,即函数的执行时间。
当tb1的低32位大于等于tb0的低32位时,tb2的高位等于tb1的高位与tb0的高位的差值,tb2的低位等于tb1的低位与tb0的低位的差值。
当tb1的低32位小于tb0的低32位时,则需借用高位进行计算。tb2的高位等于tb1高位与tb0高位的差值再减1,tb2的低位等于0xFFFFFFFF-tb0的低位+ tb1的低位再加1。

上一题