Чтение файла поблочно и оправка в 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;
}