void IO ( char* str,int lenght) // функция обработки протокола обмена { static char InOut[RX_BUFFER_SIZE0]; static char Word [buf_Word]; //массив командного слова static char DATA_Word [buf_DATA_Word]; //массив слова - данных static char DATA_Word2[buf_DATA_Word]; //массив слова - данных char n[1]; u8 y; static unsigned int index1=0; unsigned char crc_ok=0; unsigned char packet_ok=0; static unsigned char packet_flag=0; unsigned int index=0; static unsigned int index_word=0; static unsigned int index_data_word=0; static unsigned int index_data_word2=0; static unsigned int lenght_data=0;//длинна данных static unsigned char data_flag=0; static unsigned char data_flag2=0; static unsigned char FLAG_lenght=0;//флаг служебного байта - длинный данных static unsigned int sch_lenght_data=0; static unsigned char FLAG_DATA=0; unsigned char FLAG_CW=0; unsigned int crc_input=0; unsigned int crc_comp=0; unsigned int i=0; unsigned int j=0; unsigned int l=0; i = lenght;//длинна принятой пачки if (lenght==0) i = leng(str); lenght = 0; j=i; if (((str[0]==0x7e)&&(packet_flag==0))||((time_uart>TIMEOUT_UART)&&(packet_flag==1))) // обнаружено начало пакета { //------------------- packet_flag=1; //------------------- time_uart=0u; //обнуление счётчика тайм аута index1=0u; index =0u; crc_ok=0; packet_ok=0; index_word=0u; index_data_word =1u; index_data_word2=1u; data_flag =0; data_flag2=0; FLAG_lenght=0u; lenght_data=0u; sch_lenght_data=0u; DATA_Word [0]=' '; DATA_Word2[0]=' '; FLAG_CW = 0u; //флаг управляющего байта, снимается сразу после исполнения FLAG_DATA = 0u; } if (packet_flag==1) { while (i>0u) //перегрузка принятого пакета в массив обработки { InOut[index1]=str[index]; if (( InOut[index1]==';')&&(FLAG_DATA==0u)) {packet_ok=1u;FLAG_CW=1u;} if (((InOut[index1]=='=')||(InOut[index1]==':'))&&(data_flag==0)) {data_flag=1u;FLAG_CW=1u;} if (( InOut[index1]=='.')&&(data_flag2==0)) {data_flag2=1u; FLAG_CW=1u;} if (( InOut[index1]=='$')&&(FLAG_lenght==0u)) {FLAG_lenght=2u;FLAG_CW=1u;} if ((index1>2u)&&(InOut[2]==' ')&&(FLAG_CW==0u)&&(FLAG_lenght<2u)) { if (data_flag!=1u) {Word[index_word]=InOut[index1];} // заполняем командное слово if ((data_flag==1u)&&(data_flag2==0u)) DATA_Word[index_data_word]=InOut[index1];// заполняем слово данных1 if ((data_flag==1u)&&(data_flag2==1u)) DATA_Word2[index_data_word2]=InOut[index1]; // заполняем слово данных2 if (data_flag!=1u) {if (index_word