Чтение файла поблочно и оправка в COM порт - C (СИ)
Формулировка задачи:
Задача - чтение файла поблочно и оправка в ком порт. перед отправкой нужно посчитать контрольную сумму и добывить в коней паекта. и завершить пакет кодом 7Е. так же перед отправкой пакета нужно проверить буффер на наличие 7Е и 7D если они встречаются - подменить их на другие 7Е на 7D 5E, 7D на 7D 5D. Задачу я решил. код привожу. но вопрос такой - как подсчет суммы и проверку буффера оформить в виде подпрограммы потому как получается ну очень громоздко вставлять каждый раз такой кусок. Я еще начинающий программист и пока что не могу сообразить. Эта подпрограмма получает Buff и sizeof(Buff). И должна выдать 4 значения - Buff2 - буффер для отправки в порт с подмененными символамиб его длину, контрольную сумму так же с подмененными символами и ее длину.
fs->Read(ErBuff, sizeof(ErBuff); // подсчет контрольной суммы crc16 crc=0xffff; lenth=sizeof(ErBuff); for (int i=0; i<lenth; i++) { *data=ErBuff[i]; crc=((crc>>8)&0xFF)^crctable[(crc^*data)&0xff]; } crc=~crc; for (unsigned int i=0; i<2; i++) {crc16[i]=(crc>>(8*i))&0xFF;} // проверка суммы на наличие символов 7D 7E //---------------chech crc for 7e 7d------------------------------------ int k=0; for (int i=0; i<2; i++) { if (crc16[i]!=exch[0]) { crc16_2[i+k]=crc16[i]; } else { crc16_2[i+k]=exch[0]; crc16_2[i+k+1]=exch[1]; k=k+1; } } int lenth2=2+k; int m=0; for (int i=0; i<lenth2; i++) { if (crc16_2[i]!=endl[0]) { crc16_3[i+m]=crc16_2[i]; } else { crc16_3[i+m]=A[0]; crc16_3[i+m+1]=A[1]; m=m+1; } } int size2=lenth2+m; // проверка буффера на наличие символов для подмены //-----------------------Checking writing Buffer----- int a=0; int d=0; for (int i=0; i<sizeof(ErBuff); i++) { if (ErBuff[i]!=exch[0]) { ErBuff1[i+a]=ErBuff[i]; } else { ErBuff1[i+a]=exch[0]; ErBuff1[i+a+1]=exch[1]; a=a+1; d=d+1; } } int lenth1=sizeof(ErBuff)+d; //--------------------------add 7e------------------------- int g=0; int e=0; for (int i=0; i<lenth1; i++) { if (ErBuff1[i]!=endl[0]) { ErBuff2[i+g]=ErBuff1[i]; } else { ErBuff2[i+g]=A[0]; ErBuff2[i+g+1]=A[1]; g=g+1; e=e+1; } } int size=lenth1+e; WriteFile(hComm, ErBuff2, size, &BytesWrite, NULL); WriteFile(hComm, crc16_3, size2, &BytesWrite, NULL); WriteFile(hComm, endl, 1, &BytesWrite, NULL); ReadFile(hComm, InBuff, 256, &BytesRead, NULL);
Решение задачи: «Чтение файла поблочно и оправка в COM порт»
textual
Листинг программы
int подпрограмма1(/*нужные параметры*/) { //код подпрограммы1 return 0; } int подпрограмма2(/*нужные параметры*/) { //код подпрограммы2 return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д