参考答案:
【问题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。