网关的数据处理是指协议的转换和数据在缓冲区的存储与转发。每当接收到一组数据时,首先进行协议转换,然后再将其存入到相应的缓存区。高低速CAN的协议相同,并不需要转换,因此主要是进行CAN协议和LIN协议之间的转换。
CAN协议和LIN协议都是以帧(frame)为数据单位进行通信的。在进行LIN协议到CAN协议的转换时,首先是将LIN帧分解,从标识符场 (identfield)提取出其中的ID标识符,从数据场(data field)提取出有效数据,然后根据这些信息封装成符合要求的CAN帧格式。CAN协议到LIN协议的转换过程亦是如此。先将CAN帧分解,从仲裁域 (arbitration field)和数据域(data field)中提取出有用信息,然后封装成符合要求的LIN帧格式。
数据的4个缓冲区BUF1~BUF4为FIFO(First InFirst Out)缓冲区,本文采用循环队列(circular queue)来实现数据的先进先出。两个指针Read和Write分别指示队头元素和队尾元素在缓冲区空间中的位置,它们的初值在队列初始化时均应置为 0,每读取或写入一次数据,都要对缓冲区的参数进行调整。写数据时,将新元素插入Write所指的位置,然后将Write加1;读数据时,删去Read所指的元素,然后将Read加1并返回被删元素。