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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.556 из 5