網關的數據處理是指協議的轉換和數據在緩沖區的存儲與轉發。每當接收到一組數據時,首先進行協議轉換,然后再將其存入到相應的緩存區。高低速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并返回被刪元素。