嵌师案例分析(04)
关于
1年前
更新
0
频次
14
题目数
分享

有问题?问问AI帮你修改 改主题:如咖啡问卷改为奶茶问卷
感谢您能抽出几分钟时间来参加本次答题,现在我们就马上开始吧!
:11.3 案例3、某数据处理模块设某公司承接了一个数据处理模块的项目,由沈工负责模块的方案设计,沈工的设计方案如图11-53所示。该数据处理模块以PowerPC处理器为核心,设计了存储器、以太网、温度传感器、调试接口等功能电路。[图片1]处理器外接FLASH存储器用于存储上电初始化程序和应用程序。处理器通过I2C接口连接测温电路,监控模块的工作温度。以太网、串口、调试离散量等用于软件调试和状态显示。测温电路选用ADT7461AR芯片,用于测试模块温度。ADT7461AR是一个双通道数字温度计,工作电压3~5V,具有低/超温报警功能,采用I2C接口实现主机对远程/本地温度数据的采集,采集数据存储在高/低两个数据寄存器中,每个寄存器为16位,高寄存器表示整数值,低寄存器表示小数值。存储模块采用某公司的FLASH存储芯片。支持编程、擦除、复位等操作命令。该FLASH芯片的常用命令序列如表11-20所示。表中的地址和数据皆为十六进制数。[图片2]
Q1:11.3案例3-1、ADT7461AR芯片支持两种测温模式,其中第一种模式为二进制模式,用0表示0度,测温范围为0℃~+127℃;第二种模式为偏移二进制模式,用64表示0℃,测温范围为-55℃~+150℃,温度数据转换关系如表11-21所示,请补充其中空(1)~(2)处的内容,即对应温度的二进制数。[图片]
Q2:11.3案例3-2、ADT7461AR芯片支持两种测温模式,其中第一种模式为二进制模式,用0表示0度,测温范围为0℃~+127℃;第二种模式为偏移二进制模式,用64表示0℃,测温范围为-55℃~+150℃,温度数据转换关系如表11-21所示,请补充其中空(3)~(4)处的内容,即对应温度的二进制数。[图片]
Q3:11.3案例3-3、沈工用C语言实现对FLASH的操作,需按照表11-20中定义的命令序列顺序执行即可。仔细阅读下列代码,请在(1)~(4)处将对应的C语言代码补全。/*定义宏FLASH_BASE_ADDRESS为FLASH芯片的基地址*/#define FLASH_WRITE_BYTE(addr,data) xxxxxxxx(此处代码略)/*Reset Flash*/Void RestFlash (void){FLASH_WRITE_BYTE(FLASH_BASE_ADDRESS,0xF0);Return;}/*对FLASH的擦除是按扇区进行的,SectorErase函数每次可擦除一个扇区。假设某扇区的偏移地址为offset_addr,下面sectorErase函数体为擦除该扇区的命令序列*/void SectorErase(int offset_addr){FLASH_WRITE_BYTE (FLASH_BASE_ADDRESS+0x555,0xAA);FLASH_WRITE_BYTE (FLASH_BASE_ADDRESS+【1】,0x55);FLASH_WRITE_BYTE (FLASH_BASE_ADDRESS+0x555,【2】);FLASH_WRITE_BYTE (FLASH_BASE_ADDRESS+0x555,0xAA);FLASH_WRITE_BYTE (FLASH_BASE_ADDRESS+0x2AA,0x55);FLASH_WRITE_BYTE (FLASH_BASE_ADDRESS+【3】,【4】);return;}
Q4:11.3案例3-4、该嵌入式系统对处理的性能要求较高,沈工在完成软件设计后,需要对每一个函数的执行性能进行测试,检测其是否满足系统设计的要求。沈工通过PowerPC处理器内部的高精度时钟寄存器(TimeBase)进行计时,该寄存器由高低两个32位的寄存器组成,根据总线频率自动递增,当低32位寄存器递增到0xFFFFFFFF时,向高32位寄存器进位。计数值可以换算成时间值,精确到微秒级。在功能函数function1()的执行体前后进行时间统计,最后计算出该函数的执行时间值,请在(1)~(2)处将对应的C代码补全。struct timeBase{unsigned int upper;unsigned int lower;};void function1(void){struct timeBase tb0,tb1,tb2;long value;/*获取TimeBase寄存器中的计数值*/TimeBaseGet(tb0.upper, tb0.lower);/*函数执行体…*//*再次获取TimeBase寄存器中的计数值*/TimeBaseGet(tb1.upper,tb1.lower);tb2.upper=tb1.upper-tb0.upper;/*当低32位计数值未反转,则直接进行计算,否则需借用高位进行计算*/if(tb1.lower=tb0.lower){tb2.lower=【1】;}else{tb2.upper-=1;tb2.lower=【2】;}/*根据总线频率,将时钟节拍转换为时间值*/value=CountToUs(tb2);printf(%s cost time %dus.\n,_function_,value);}
:11.3案例4、某数据采集与处理系统设计某公司承接了一个数据采集与处理系统的项目,由刘工负责系统的方案设计,刘工的设计方案如图11-54所示。该方案是基于PCI总线的多功能处理系统,PCI设备1是以以太网,PCI设备2用于数据采集,PCI设备3、PCI设备4用于和该系统中的其他处理模块进行互联,LAGACY设备1、LAGACY设备2用于处理系统中一些慢速设备。[图片]
Q5:11.3案例4-1、PCI设备2和主CPU之间采用双口RAM方式交换数据,双口RAM是常见的共享式多端口存储器,其最大特点是存储数据共享。它允许两个独立的CPU或控制器同时异步访问存储单元。既然数据共享,就必须存在访问仲裁控制,否则就会出现错误或冲突。内部仲裁逻辑控制提供以下功能:对同一地址单元访问的时序控制;存储单元数据块的访问权限分配;信令交换逻辑(例如中断信号)等。两个端口对同一内存操作有4种情况:A两个端口同时对同一地址单元读出数据。B两个端口同时对同一地址单元写入数据。C两个端口不同时对同一地址单元存取数据。D两个端口同时对同一地址单元,一个写入数据,另一个读出数据。在上述情况下,两个端口的存取不会出现错误的是____和_____,会出现写入错误的是___,会出现读出错误的是____。
:11.3案例4-2、PCI设备2和主CPU之间通过双端口存储器进行数据交换。刘工设计了环形队列的实现方式。设备2向环形队列写入数据,主CPU从环形队列读取数据。环形队列是一个首尾相连的FIFO数据结构,采用数组存储,到达尾部时将转回到0位置,该转回是通过取模操作来实现的。因此环形队列逻辑上是将数组元素q[0]与q[MAX-1]连接,形成一个存放队列的环形空间。为了方便读写,还要用数组下标来指明队列的读写位置,其中head指向可以读的位置,tail指向可以写的位置,环形队列如图11-55所示。[图片]使用环形队列时需要判断队列为空还是为满。当tail追上head时,队列为满,当head追上tail时,队列为空。通常判断环形队列为空/为满有两种判断方法。(1)附加一个标志位tag,当head赶上tail,队列空,则令tag=0,当tail赶上head,队列满,则令tag=1。(2)限制tail赶上head,即队尾结点与队首结点之间至少留有一个元素的空间。队列空:head==tail,队列满:(tail+1)%MAXN==head。(1)采用第一种方法(即附加标志实现算法),环形队列定义如下:typedef struct ringq{int head;/*头部,出队列方向*/int tail;/*尾部,入队列方向*/int tag;int size;/*队列总尺寸*/int space[RINGQ_MAX];/*队列空间*/}RINGQ;RINGQ p,*q;q=p;初始化环形队列的C语言代码为:q-head=q-tail=q-tag=0;q-size=RINGQ_MAX;
Q6:11.3案例4-2(1)、判断队列为空的C语言代码为____。判断队列为满的C语言代码为____。
Q7:11.3案例4-2(2)、入队操作时,如果队列不满,则入队后更新尾指针的C语言代码尾q-tail=____。出队操作时,如果队列不空,则出队后更新头指针的C语言代码为q-head=____。
:11.3案例4-2(重复)、PCI设备2和主CPU之间通过双端口存储器进行数据交换。刘工设计了环形队列的实现方式。设备2向环形队列写入数据,主CPU从环形队列读取数据。环形队列是一个首尾相连的FIFO数据结构,采用数组存储,到达尾部时将转回到0位置,该转回是通过取模操作来实现的。因此环形队列逻辑上是将数组元素q[0]与q[MAX-1]连接,形成一个存放队列的环形空间。为了方便读写,还要用数组下标来指明队列的读写位置,其中head指向可以读的位置,tail指向可以写的位置,环形队列如图11-55所示。[图片]使用环形队列时需要判断队列为空还是为满。当tail追上head时,队列为满,当head追上tail时,队列为空。通常判断环形队列为空/为满有两种判断方法。(1)附加一个标志位tag,当head赶上tail,队列空,则令tag=0,当tail赶上head,队列满,则令tag=1。(2)限制tail赶上head,即队尾结点与队首结点之间至少留有一个元素的空间。队列空:head==tail,队列满:(tail+1)%MAXN==head。(1)采用第一种方法(即附加标志实现算法),环形队列定义如下:typedef struct ringq{int head;/*头部,出队列方向*/int tail;/*尾部,入队列方向*/int tag;int size;/*队列总尺寸*/int space[RINGQ_MAX];/*队列空间*/}RINGQ;RINGQ p,*q;q=p;初始化环形队列的C语言代码为:q-head=q-tail=q-tag=0;q-size=RINGQ_MAX;
Q8:11.3案例4-2(3)、采用第二种方法,使用上述数据结构,初始化环形队列的C语言代码为:q-head=q-tail=0;q-size=RINGQ_MAX;判断队列为空的C语言代码为____。判断队列为满的C语言代码为____。
Q9:11.3案例4-2(4)、采用第二种方法,使用上述数据结构,初始化环形队列的C语言代码为:q-head=q-tail=0;q-size=RINGQ_MAX;入队操作时,如果队列不满,则入队后更新尾指针的C语言代码为q-tail=_____。出队操作时,如果队列不空,则出队后更新头指针的C语言代码为q-head=_____。
:11.3案例5、某控制系统设计某公司承接一个控制系统的项目,由王工负责系统的方案设计。王工的设计方案如图11-57所示。该方案是基于VME总线的多机并行处理系统,由主控制模块作为VME总线的主设备,即总线控制器,负责整个系统的控制与管理;3个数据处理模块作为从设备,负责数据处理与计算;1个I/O模块也作为从设备,负责系统与外部接口之间的高速数据通信。同时,为了简化设计,该系统5个模块均采用同一款VME协议芯片,实现内总线和VME总线的连接。[图片1]该系统中每个模块的相关信息见表11-22所示。[图片2]
联系我们
问卷网公众号