程序的寫法:方便之後的查看和維護。

  寫程序主要是爲了之後本身讀起來不費勁,方便查看和維護。ide

//返回錯誤的約定:若是該命令與本站有關則根據設定來決定是否返回錯誤信息,
//若是該命令與本站無關則沒必要返回錯誤信息,接收的所有是16進制的數字
bool Inspect=true;
uint8_t ErrorCode=0; 測試

//CRC檢查
......
//分析文件頭
if (rx_buffer1[0] != 0x59 || rx_buffer1[1] != 0x51 || rx_buffer1[2]!=0x43 || rx_buffer1[3]!=0x59 ){
  Inspect=false;
  ErrorCode=0x011;//錯誤代碼11:標識文件頭的錯誤
} ui

//分析文件尾
if ( rx_buffer1[66]!=0x59 || rx_buffer1[67]!=0x42 || rx_buffer1[68]!=0x44 || rx_buffer1[69]!=0x57 ){
  Inspect=false;
  ErrorCode=0x022;//錯誤代碼22:標識文件尾的錯誤
}code

//是不是屬於本線和本站的接收命令
if( rx_buffer1[4]!=0x01 || rx_buffer1[6]!=0x00 ){
  Inspect=false;
  ErrorCode=0x33;//錯誤代碼33:不是本次的測試命令
}ip

//是不是屬於本線和本站的接收命令
if( rx_buffer1[5]!=YBDWPipeline || rx_buffer1[7]!=YBDWPile ){
  Inspect=false;
  ErrorCode=0x44;//錯誤代碼44:不是本線或者本站的接收命令
}it

......io

if(Inspect==true){
  //準備返回的數據class

  //根據具體的命令來進行實際操做
  switch(rx_buffer1[9]){
    case Set_SystemDatetime: //設置系統日期和時間配置

      break;
    case Set_EngineeringOffset: //設置工程偏移量程序

      break;
    case Set_LineAndPile://設置線號和站號、本線的起始和結束站號

break;

    case Set_Version://設置版本信息

      break;
    case Get_LineAndPile://獲取線號和站號、本線的起始和結束站號

      break;
    case Get_CurrentYBDW://獲取當前的數據

      break;

    default: //不支持的命令

      break;  }  ......}else{  if(rx_buffer1[17]==0x99 && rx_buffer1[5]!=YBDWPipeline && rx_buffer1[7]!=YBDWPile ){  //根據配置決定是否將錯誤返回,只與本站的信號纔回饋信息  ......  HAL_UART_Transmit(&hlpuart1,Send_Buffer,70,10); //串口1向LORA發送整個緩衝區 }

相關文章
相關標籤/搜索