试题一(共15分)阅读下列说明和图、表,回答问题1至问题3,将解答填入答题纸的对应栏内。[说明]某车载导航系统的结构如图1-l所示,由导航处理系统和显示系统两部分组成。导航处理系统安装在某型车的设备区,显示系统安装在某型车的前方,便于驾驶员观看和操作。
导航处理系统由主处理机模块、电子盘模块、信号处理模块和电源模块组成,主处理机模块执行电子地图功能、导航控制功能等,生成的导航显示画面通过信号线在LCD液晶彩色显示屏显示给驾驶员;信号处理模块处理外部采集数据,将处理后的数据通过内部总线传输给主处理机模块;电子盘模块存储电子地图数据及导航数据。显示系统由LCD液晶彩色显示屏、面板键盘(自定义键盘)和电源模块组成,主要是显示导航画面,也可通过面板键盘进行导航控制。
[问题2](6分)主处理机模块与信号处理模块间通过双端口存储器进行数据交换。李工设计时,将双端口存储器空间划分为两个缓冲区,两个缓冲区分别交替地接收信号处理机传输来的最新数据,然后按数据块方式提供给用户程序使用。假设每个缓冲区的大小为512KB,将512KB数据写入当前空闲缓冲区接口服务为Write_Buffer,将当前有效的512KB数据读出缓冲区的接口服务为Read_Buffer,假设双端口存储器中不提供硬件信号量,两个缓冲区间的互斥操作由软件标记实现,软件对双端口存储器的单次操作(读写一个字的操作)为原子操作。下面是用C语言设计的一组对双缓冲区的管理程序代码,请填补该程序代码中的空缺,将答案填写在答题纸上。
参考答案:(1) !(*Mutex[0])或者*Mutex[0]==0x00或者*Mutex[0]=0 (2) *Mutex[0]=0x00或者*Mutex[0]=0 (3) len=Read_Buffer(1,Data)
解析:本题考查嵌入式系统中的C程序设计,要求考生正确使用软件锁。 在本题中主处理机模块与信号处理模块问通过双端口存储器进行数据交换。由信号处理模块发送数据,主处理机模块接收数据。 在本题中给出了很多假设条件,如将双端口存储器空间划分为两个缓冲区,两个缓冲区分别交替地接收信号处理机传输来的最新数据;再如假设双端口存储器中不提供硬件信号量,两个缓冲区间的互斥操作由软件标记实现,软件对双端口存储器的单次操作(读写一个字的操作)为原子操作。同时本题也给出了软件程序的架构,BufferFlag为缓冲区有无新数据的标志,Mutex为软件锁。 在数据处理模块端的初始化程序INIT_PPC()中,BufferFlag和Mutex被分配在缓冲区的前端,并被初始化为无数据和末锁定。 信号处理模块写数据程序DSP_Write_Data()中,初始化与数据处理模块端类似,同样以BufferFlag表示与数据处理模块端的对应的标志,即两端操作的是相同的地址空间;同样Mutex也表示与数据处理模块端的对应的软件锁,即两端操作的是相同的地址空间。信号处理模块写数据程序DSP_Write_Data)是一个无限循环程序,在等待信号处理模块产生新的数据,之后就将数据写入双缓冲Data中。具体过程如下: 1)循环等待新数据; 2)如果缓冲区0末被锁定,则: (1)缓冲区0加锁; (2)写数据到缓冲区0; (3)标记缓冲区0未有数据; (4)缓冲区0解锁。 3)如果缓冲区0已被锁定,则对缓冲区1重复上述步骤。 在数据处理模块端读数据程序PPC_Read_Data()首先判断双缓冲有无数据,如果缓冲区0有数据,再判断缓冲区0是否加锁,如果末加锁,则先加锁,再读数据,再解锁。对缓冲区1同样如此处理。