问答题
阅读下列说明和图,回答问题,将解答填入答题纸的对应栏内。【说明】服务型智能扫地机器人涉及了众多传感器,通过对环境信息的融合感知进行行为决策。同时也设计了丰富的多媒体人机交互系统,实现输入输出功能。
问答题
服务型智能扫地机器人的输入输出终端采用触摸屏技术,李工设计了一款具有触摸功能的显示单元,该显示单元的主板采用X86架构的处理器,触摸控制板的核心是控制芯片,当触摸笔点击触摸面板时,将通过输入端点上传数据报文,格式如图4-1所示。数据报文按照小端字节顺序发送,第一个Byte表示触摸笔的状态,0x70表示Down,0x30表示up,后四个Byte包含触摸笔点击位置的坐标值,Bytel和Byte2表示x轴坐标,Byte3和Byte4表示Y轴坐标。触摸板左上角坐标值为(0,0),右下角坐标值为(1022,766)。
【正确答案】(1)0x70
(2)0xFF
(3)0x1或者1
(4)0x7F
(5)0x1或者1
【答案解析】触摸屏通过串行通信协议向主机传送数据报文。常用的串行协议包括RS一232、RS一422和RS一485等。尽管串行通信速度较慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。文中定义了串行数据报文格式,分别是触摸笔的状态、X轴坐标低字节、X轴坐标高字节、Y轴坐标低字节、Y轴坐标高字节。当触摸笔在触摸板中心位置按下时,触摸笔的状态是Ox70,x轴坐标是511(即0x1FF),Y轴坐标是383(即0x17F)。由于数据报文按照小端字节顺序发送,所以x轴坐标低字节是0xFF、x轴坐标高字节是Ox1、Y轴坐标低字节是Ox7F、Y轴坐标高字节是Ox1。
问答题
该机器人系统内部集成众多传感器,通过现场总线互联起来,构成了底层的网络,选用的CAN控制器内含二个接收缓冲器、三个发送缓冲器,具有灵活的中断管理能力。李工设计了一种采用中断方式的数据接收程序,每当接收寄存器接收到数据时,中断寄存器的接收中断使能,并产生中断信号通知CPU,中断处理程序在读取数据后,清空中断标识位,等待下一次中断。由于两个接收器共享一个中断号,在调试过程中发现,当短时间(毫秒级)接收大量数据时,丢包现象比较严重。李工对上述流程进行了改进,当产生一次中断时,依次查询两路接收器的状态,这样大大提高了数据接收处理能力,减少了系统开销,其处理流程如图4-2所示。
【正确答案】(1)设备中断使能
(2)接收器0有数据
(3)接收器1有数据
(4)接收器0有数据
(5)清除中断标识
【答案解析】一般CPU和外部设备之间的数据传输有查询和中断两种方式。从查询式的传输过程可以看出,它的优点是硬件开销小,使用起来比较简单。但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其他程序,这样就浪费了CPU的大量时间,降低了主机的利用率。为了解决这个矛盾,提出了中断传送方式,即当CPU进行主程序操作时,外设的数据己存入输入端口的数据寄存器,或端口的数据输出寄存器己空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU即返回继续执行原来被中断的主程序。这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高。能够向CPU发出中断请求的设备或事件称为中断源。而对其的处理方式即中断处理。当CPU(中央处理器)执行一条现行指令的时候,如果外设向CPU发出中断请求,那么CPU在满足响应的情况下,将发出中断响应信号,与此同时关闭中断,表示CPU不再受理另外一个设备的中断。这时,CPU将寻找中断请求源是哪一个设备,并保存CPU自己的程序计数器(PC)的内容。然后,它将转移到处理该中断源的中断服务程序。CPU在保存现场信息、设备服务(如交换数据)以后,将恢复现场信息。在这些动作完成以后,开放中断,并返回原来被中断的主程序的下一条指令。当中断控制器的输入不够多时,使用共享中断是很有必要的。典型的外部通用异步收发器(UART),它只有一个中断输出,为不同的内部中断资源所共享,比如:接受中断和发送中断。这些中断在中断控制器内部用“或方式”有效地连接到一块了。使用共享中断时,必须要考虑的是:当两个或更多的中断信号同时产生或相继产生时,会出现什么样的状况?如果不能很好处理的话,就有可能丢失中断信号以及锁定中断线。共享边缘触发中断比较复杂。如果两个中断信号同时产生或相继产生,中断控制器就会只收到一个中断信号。要避免丢失中断信号,中断服务程序必须在离开当前命令行外壳之前检查所有中断资源。共享中断的最简单方式,就是使用电平触发中断类型。这种方式很安全,例如,如果两个中断请求同时要求中断服务,只能处理其中一个,这时中断线不会锁住,仍然能有效工作。而另一个中断请求会照常产生,等待处理。
问答题
该机器人系统按照图4.2的方式接收传感器采集数据,并由上层应用程序对数据进行处理。当应用访问操作速度和底层硬件输入的速度存在较大差异时,采用环形缓冲机制,可以起到良好的缓冲作用,减少丢包率。李工设计的环形缓冲是基于先进先出(FIFO)的原则,并设计了环形缓冲的数据结构,读写指针各自独立,读任务和写任务可以同时访问环形缓冲,无需互斥信号量的介入。但是,在运行多任务时,如果存在多个读任务和多个写任务同时操作环形缓冲,则需要应用互斥操作机制。1.请简述互斥操作的作用。2.为了在多任务环境中能正确使用环形缓冲,不发生读写冲突,增加了读写锁进行保护。应用任务读取环形缓冲的伪代码如下,请完善其中空(1)~(3)处的内容,将答案写入答题纸对应栏内。BOOL bReadLock=FALSE;BOOL bWriteLock=FALSE;intReadRingBuf()(if((环形队列为空)||(1))return 0(2);将环形队列中的数据拷贝到应用缓冲区;调整读指针;(3);返回直接读取数据长度;}
【正确答案】1.互斥操作用来保证共享数据操作的完整性。通过互斥锁保证任一时刻只能有一个应用访问共享对象。
2.
(1)bReadLock为真或bReadLock==TRUE
(2)bReadLock=TRUE或等效形式
(3)bReadLock=FALSE或等效形式
【答案解析】(1)在编程中引入了对象互斥的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。(2)在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。互斥锁(mutex)是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即上锁(lock)和解锁(unlock)。互斥锁的特点有:原子性,把一个互斥量锁定为一个原子操作,这意味着操作系统保证了如果一个线程锁定了一个互斥量,没有其他线程在同一时间可以成功锁定这个互斥量i唯一性,如果一个线程锁定了一个互斥量,在它解除锁定之前,没有其他线程可以锁定这个互斥量;非繁忙等待,如果一个线程已经锁定了一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程将被挂起(不占用任何CPU资源),直到第一个线程解除对这个互斥量的锁定为止,第二个线程则被唤醒并继续执行,同时锁定这个互斥量。互斥锁的操作流程如下:1.在访问共享资源后临界区域前,对互斥锁进行加锁;2.在访问完成后释放互斥锁导上的锁;3.对互斥锁进行加锁后,任何其他试图再次对互斥锁加锁的线程将会被阻塞,直到锁被释放。