阅读以下关于某嵌入式系统设计方案的叙述。 [说明] 某公司承接了开发周期为6个月的某机载嵌入式系统软件的研制任务。该机载嵌入式系统硬件由数据处理模块、大容量模块、信号处理模块、FC网络交换模块和电源模块组成,如图1-1所示。数据处理模块和大容量

admin2011-03-25  62

问题 阅读以下关于某嵌入式系统设计方案的叙述。
   [说明]
   某公司承接了开发周期为6个月的某机载嵌入式系统软件的研制任务。该机载嵌入式系统硬件由数据处理模块、大容量模块、信号处理模块、FC网络交换模块和电源模块组成,如图1-1所示。数据处理模块和大容量模块的处理器为PowerPC7447,数据处理模块主要对机载数据进行处理,完成数据融合;大容量模块主要存储系统数据,同时也有数据处理的能力;信号处理模块的处理器为专用的数字信号处理器DSP,完成雷达数据处理,并将处理后的数据发送给数据处理模块;FC网络交换模块为已开发的模块,本次不需要开发软件,主要负责系统的数据交换;电源模块主要负责给其他模块供电,电源模块上没有软件。
   PowerPC7447和DSP是32位处理器,内存按字节编址。PowerPC7447以大端方式( big_endian)存储数据,DSP以小端方式(little endian)存储数据。

田工负责编写信号处理模块与数据处理模块的通信程序,约定好的数据组织方式如表1-1所示。

以下是信号处理模块端的一段程序:
   unsigned int msgid=Ox01;//表示从信号处理模块发送到数据处理模块2的消息ID
   typedef  struct  FCSND—Data_struct  {
   unsigned char A;
   unsigned int B;
   unsigned short C;
   unsigned char D[16];
   }  FCSND DATA;
   FCSND_DATA sendData;
   …·
   …·
   FillfcData( &sendData); //将待发送数据赋值到sendData数据结构中
   sendfc((msgid,  &sendData,  sizeof (FCSND_DATA)); //发送数据以下是数据处理模块2端的一段程序:
   unsigned int msgid=Ox00; //接收到的消息ID
   typedef   struct   FCRCV_Data _struct  {
   unsigned char A;
   unsigned int B;
   unsigned short C;
   unsigned char D[16];
   }  FCRCV_DATA;
   FCRCV_DATA  recvData;
   …·
   …·
   recvfc( (msgid,&recvData,sizeof (FCRCV_DATA));    //接收数据
   请问以上程序是否存在问题?如果存在问题,请分析原因。

选项

答案有问题。 (1)数据结构定义有边界对齐问题; (2)接收和发送端的处理程序没有对大小端转换进行处理。

解析 本题中,田工在发送和接收消息时采用的数据类型为FCSND- DATA和FCRCV_DATA,数据类型中有字符型、整型、短整型、字符数组;而发送端为信号处理模块,其处理器为专用的数字信号处理器DSP。接收端为数据处理模块,其处理器为PowerPC7447。在嵌入式系统中,C语言的编译器在专用的信号处理器DSP和PowerPC7447很可能不同,不同的编译器对数据有边界的对齐处理会有不同的方式,不一定采用表1-1规定的组织方式。可能的情况是:
   (1)两者都不是表1-1规定的内存组织方式;
   (2)信号处理模块数据可能与数据处理模块的内存组织方式不同。
   解决办法为在数据结构设计中只用字符型和字符数组,不同其他类型数据。
   另外,题干中已经明确:PowerPC7447和DSP是32位处理器,内存按字节编址。PowerPC7447以大端方式(big_endian)存储数据,DSP以小端方式(little_endian)存储数据。因此,需要对大小端转换进行处理,在发送端或接收端都可以,而本题明显没进行大小端转换处理。
转载请注明原文地址:https://kaotiyun.com/show/3hWZ777K
0

相关试题推荐
最新回复(0)