Например TDA7294

Форум РадиоКот • Просмотр темы - расчет контрольной суммы (требуется помощь)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср окт 29, 2025 05:36:20

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 318 ]     ... , , , 13, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 12:46:53 
Мучитель микросхем
Аватар пользователя

Карма: 8
Рейтинг сообщений: 102
Зарегистрирован: Ср сен 02, 2015 07:47:20
Сообщений: 407
Рейтинг сообщения: 1
Здесь системы счисления не имеют никакого значения, всего лишь формы записи, удобные для своих случаев. Кто Вам мешает лог в десятичном виде получать? Просто на каждое число три разряда будет, вот и всё. От 000 до 255.

Для тех, у кого в детстве был ZX Spectrum, это вообще не проблема.

_________________
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 1 сентября 2025 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 12:56:19 
Друг Кота

Карма: -1
Рейтинг сообщений: 68
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8736
Откуда: .ru
Рейтинг сообщения: 0
уже программу написали ?

проверяем...
1B 02 04 DE FD 00 00 C0 B8 88
1B 02 04 DE FE 00 00 C0 BC 83
1B 02 04 DE FF 00 00 C0 C0 7E
1B 02 04 DE 00 00 00 C0 C0 7E
1B 02 04 DE 01 00 00 C0 C4 79
1B 02 04 DE 02 00 00 C0 C8 74
1B 02 04 DE 03 00 00 C0 CC 6F
1B 02 04 DE 04 00 00 C0 D0 6A
1B 02 04 DE 05 00 00 C0 D4 65
...

Спойлер
Код:
<!DOCTYPE html>
<html>
<head>
<title>crc и КС</title>
<h2>Расчёт crc и КС:</h2>
</head>
<body>


<script>
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////Buf: 
var Buf = [ 
0x00,0x00,0x00,0xC0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
];
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////TX_int: 
var TX_int = [ 
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
];
var xTX = 0;              // счёт xTX
var TX_len = 12;          // TX_len
//var TX_len = 12;        // TX_len
var String;           
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////crcTX:
var crcTX = 0; var bcrcTX = 0; var aTX = 0;  var bTX = 0;   
function fcrcTX(){
crcTX = 0xFFFFFFFF;
for (bTX=0; bTX<(TX_len-4); bTX=bTX+4) {                                 
bcrcTX=TX_int[bTX];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+1];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+2];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+3];
crcTX ^= bcrcTX;   
for( aTX = 0; aTX < 32; aTX++ ){         
if ((crcTX & 0x80000000) != 0){crcTX = (crcTX << 1) ^ 0x04C11DB7;}//Eth.
else                          {crcTX = (crcTX << 1);};
};
};
TX_int[TX_len-4] = ((crcTX>>24) & 0xFF);// crc       
TX_int[TX_len-3] = ((crcTX>>16) & 0xFF);// crc     
TX_int[TX_len-2] = ((crcTX>>8) & 0xFF); // crc       
TX_int[TX_len-1] = ((crcTX) & 0xFF);    // crc
};
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////CheckSum:
var Size = 4; var Cnt = 0; var Sum = 0; var Tmp1 = 0;  var Tmp2 = 0;
function DoCheckSum(){// uint8_t *Buf, uint16_t Size
// Локальные переменные
//uint16_t Cnt,Sum,Tmp1,Tmp2;
// Инит
Sum = 0; Tmp1 = 0; Tmp2 = 0;

// Если размер больше 0
if (Size > 0)
{ // Цикл расчёта

Cnt = 0;
while (Cnt < Size)
{
// Tmp1
Tmp1 += Buf[Cnt]; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }; //*(Buf)
Tmp1 = Tmp1 & 0xFFFF;
// Sum
Sum += Tmp1; if (Sum > 0x00FE) { Sum += 0xFF01; }; 
Sum = Sum & 0xFFFF;
// Следующий байт
Cnt++;//Buf++;
};

// Финализация
Tmp2 = Tmp1 + Sum; if (Tmp2 > 0x00FE) { Tmp2 += 0xFF01; };
Tmp2 ^= 0x00FF;
Tmp1 += Tmp2; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; };
Tmp1 ^= 0x00FF;
Sum = (Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00);
};

// Результат
//return Sum;
Buf[Size+1] = ((Sum>>8) & 0xFF);           
Buf[Size] = ((Sum) & 0xFF);       

};
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////CheckSum:
/*
function DoCheckSum( uint8_t *Buf, uint16_t Size ){
// Локальные переменные
uint16_t Cnt,Sum,Tmp1,Tmp2;
// Инит
Sum = 0; Tmp1 = 0; Tmp2 = 0;
// Если размер больше 0
if (Size > 0)
{ // Цикл расчёта
Cnt = 0;
while (Cnt < Size)
{ // Tmp1
Tmp1 += *(Buf); if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }
// Sum
Sum += Tmp1; if (Sum > 0x00FE) { Sum += 0xFF01; }
// Следующий байт
Buf++; Cnt++;
}
// Финализация
Tmp2 = Tmp1 + Sum; if (Tmp2 > 0x00FE) { Tmp2 += 0xFF01; }
Tmp2 ^= 0x00FF;
Tmp1 += Tmp2; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }
Tmp1 ^= 0x00FF;
Sum = (Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00);
}
// Результат
return Sum;
};
*/
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////наверное, можно немного упростить:
/*
public static ushort DoCheckSum(byte[] Buf, ushort Size)
{
    ushort Cnt = 0, Tmp1 = 0, Tmp2 = 0;
   
    if (Size == 0) { return 0; }

    while (Cnt < Size)
    {
        // Tmp1
        Tmp1 += Buf[Cnt++];
        if (Tmp1 > 0x00FE) {
            Tmp1 += 0xFF01;
        }
        // Sum
        Tmp2 += Tmp1;
        if (Tmp2 > 0x00FE) {
            Tmp2 += 0xFF01;
        }
    }

    // Финализация
    Tmp2 += Tmp1;
    if (Tmp2 > 0x00FE) {
        Tmp2 += 0xFF01;
    }
    Tmp2 ^= 0x00FF;

    Tmp1 += Tmp2;
    if (Tmp1 > 0x00FE) {
        Tmp1 += 0xFF01;
    }
    Tmp1 ^= 0x00FF;

    return (ushort)((Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00));
}
*/
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////HEX(int)> LCD(String):
var bi = 0;
function LCD_HEX(bi) {
///////////////////
bi &= 0xFF;
var z = 0;
var HEX = ""; 
///////////////////
z=0; while (bi>15) {z++; bi=bi-16;};     
if (z==0)  {HEX = "0";} if (z==1)  {HEX = "1";} if (z==2)  {HEX = "2";} if (z==3)  {HEX = "3";}
if (z==4)  {HEX = "4";} if (z==5)  {HEX = "5";} if (z==6)  {HEX = "6";} if (z==7)  {HEX = "7";}
if (z==8)  {HEX = "8";} if (z==9)  {HEX = "9";} if (z==10) {HEX = "A";} if (z==11) {HEX = "B";}
if (z==12) {HEX = "C";} if (z==13) {HEX = "D";} if (z==14) {HEX = "E";} if (z==15) {HEX = "F";}
///////////////////
z=0; while (bi>0)  {z++; bi=bi-1;};   
if (z==0)  {HEX += "0";} if (z==1)  {HEX += "1";} if (z==2)  {HEX += "2";} if (z==3)  {HEX += "3";}
if (z==4)  {HEX += "4";} if (z==5)  {HEX += "5";} if (z==6)  {HEX += "6";} if (z==7)  {HEX += "7";}
if (z==8)  {HEX += "8";} if (z==9)  {HEX += "9";} if (z==10) {HEX += "A";} if (z==11) {HEX += "B";}
if (z==12) {HEX += "C";} if (z==13) {HEX += "D";} if (z==14) {HEX += "E";} if (z==15) {HEX += "F";}
///////////////////
HEX += " ";
return HEX; //String
}
////////////////////////////////////////////////////////////////////////////////
</script>


<!---------->
<div id='label'
style='position: absolute; left: 10px; top: 100px; width: 970px; height: 0px;
font-size: 30px; color: #000000; background: #1CD3A2;'>crc:</div>
<script>var label = document.getElementById('label');</script>
<!---------->
<div id='label_1'
style='position: absolute; left: 10px; top: 200px; width: 970px; height: 0px;
font-size: 30px; color: #000000; background: #1CD3A2;'>КС:</div>
<script>var label_1 = document.getElementById('label_1');</script>
<!---------->
<input id='button' type='button' value='нажми меня ))' onClick='Button();'
style='position: absolute; left: 10px; top: 300px; width: 500px; height: 80px;
font-size: 50px; border: 4px solid maroon; background: #00FF00;'>


<script>
function Button() {
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////DoCheckSum:
DoCheckSum(); 
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////crc:
fcrcTX();
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////LCD:
String = "crc: ";
for (xTX=0; xTX<TX_len; xTX++) {   
String += LCD_HEX(TX_int[xTX]); 
};
label.innerHTML = String;
TX_int[0]++;
if (TX_int[0] > 255){TX_int[0] = 0;};
///////////////////
String = "КС: ";
for (xTX=0; xTX<TX_len; xTX++) {   
String += LCD_HEX(Buf[xTX]); 
};
label_1.innerHTML = String;
Buf[0]++;
if (Buf[0] > 255){Buf[0] = 0;};
};
////////////////////////////////////////////////////////////////////////////////
</script>


</body>
</html>

пойдёт))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 13:00:42 
Встал на лапы

Зарегистрирован: Сб авг 09, 2025 22:19:34
Сообщений: 114
Рейтинг сообщения: 0
Здесь системы счисления не имеют никакого значения, всего лишь формы записи, удобные для своих случаев. Кто Вам мешает лог в десятичном виде получать? Просто на каждое число три разряда будет, вот и всё. От 000 до 255.

Для тех, у кого в детстве был ZX Spectrum, это вообще не проблема.

намек то ваш вполне понятный , можно добавить ОРИОН . СКОРПИОН. МК ,
далее перфокарты, ЭВМ с машинным залом укотрых обЬёмобщей памяти был 500Мб.
286,386, 486 пентиум ну и так далее .
а суть то опять ведь не в этом . забалтывание. жаль

Добавлено after 3 minutes 47 seconds:
уже программу написали ?

проверяем...
1B 02 04 DE FD 00 00 C0 B8 88
1B 02 04 DE FE 00 00 C0 BC 83
1B 02 04 DE FF 00 00 C0 C0 7E
1B 02 04 DE 00 00 00 C0 C0 7E
1B 02 04 DE 01 00 00 C0 C4 79
1B 02 04 DE 02 00 00 C0 C8 74
1B 02 04 DE 03 00 00 C0 CC 6F
1B 02 04 DE 04 00 00 C0 D0 6A
1B 02 04 DE 05 00 00 C0 D4 65
...

Спойлер
Код:
<!DOCTYPE html>




крутовато. будем посмотреь.
<html>
<head>
<title>crc и КС</title>
<h2>Расчёт crc и КС:</h2>
</head>
<body>


<script>
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////Buf: 
var Buf = [ 
0x00,0x00,0x00,0xC0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
];
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////TX_int: 
var TX_int = [ 
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
];
var xTX = 0;              // счёт xTX
var TX_len = 12;          // TX_len
//var TX_len = 12;        // TX_len
var String;           
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////crcTX:
var crcTX = 0; var bcrcTX = 0; var aTX = 0;  var bTX = 0;   
function fcrcTX(){
crcTX = 0xFFFFFFFF;
for (bTX=0; bTX<(TX_len-4); bTX=bTX+4) {                                 
bcrcTX=TX_int[bTX];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+1];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+2];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+3];
crcTX ^= bcrcTX;   
for( aTX = 0; aTX < 32; aTX++ ){         
if ((crcTX & 0x80000000) != 0){crcTX = (crcTX << 1) ^ 0x04C11DB7;}//Eth.
else                          {crcTX = (crcTX << 1);};
};
};
TX_int[TX_len-4] = ((crcTX>>24) & 0xFF);// crc       
TX_int[TX_len-3] = ((crcTX>>16) & 0xFF);// crc     
TX_int[TX_len-2] = ((crcTX>>8) & 0xFF); // crc       
TX_int[TX_len-1] = ((crcTX) & 0xFF);    // crc
};
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////CheckSum:
var Size = 4; var Cnt = 0; var Sum = 0; var Tmp1 = 0;  var Tmp2 = 0;
function DoCheckSum(){// uint8_t *Buf, uint16_t Size
// Локальные переменные
//uint16_t Cnt,Sum,Tmp1,Tmp2;
// Инит
Sum = 0; Tmp1 = 0; Tmp2 = 0;

// Если размер больше 0
if (Size > 0)
{ // Цикл расчёта

Cnt = 0;
while (Cnt < Size)
{
// Tmp1
Tmp1 += Buf[Cnt]; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }; //*(Buf)
Tmp1 = Tmp1 & 0xFFFF;
// Sum
Sum += Tmp1; if (Sum > 0x00FE) { Sum += 0xFF01; }; 
Sum = Sum & 0xFFFF;
// Следующий байт
Cnt++;//Buf++;
};

// Финализация
Tmp2 = Tmp1 + Sum; if (Tmp2 > 0x00FE) { Tmp2 += 0xFF01; };
Tmp2 ^= 0x00FF;
Tmp1 += Tmp2; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; };
Tmp1 ^= 0x00FF;
Sum = (Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00);
};

// Результат
//return Sum;
Buf[Size+1] = ((Sum>>8) & 0xFF);           
Buf[Size] = ((Sum) & 0xFF);       

};
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////CheckSum:
/*
function DoCheckSum( uint8_t *Buf, uint16_t Size ){
// Локальные переменные
uint16_t Cnt,Sum,Tmp1,Tmp2;
// Инит
Sum = 0; Tmp1 = 0; Tmp2 = 0;
// Если размер больше 0
if (Size > 0)
{ // Цикл расчёта
Cnt = 0;
while (Cnt < Size)
{ // Tmp1
Tmp1 += *(Buf); if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }
// Sum
Sum += Tmp1; if (Sum > 0x00FE) { Sum += 0xFF01; }
// Следующий байт
Buf++; Cnt++;
}
// Финализация
Tmp2 = Tmp1 + Sum; if (Tmp2 > 0x00FE) { Tmp2 += 0xFF01; }
Tmp2 ^= 0x00FF;
Tmp1 += Tmp2; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }
Tmp1 ^= 0x00FF;
Sum = (Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00);
}
// Результат
return Sum;
};
*/
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////наверное, можно немного упростить:
/*
public static ushort DoCheckSum(byte[] Buf, ushort Size)
{
    ushort Cnt = 0, Tmp1 = 0, Tmp2 = 0;
   
    if (Size == 0) { return 0; }

    while (Cnt < Size)
    {
        // Tmp1
        Tmp1 += Buf[Cnt++];
        if (Tmp1 > 0x00FE) {
            Tmp1 += 0xFF01;
        }
        // Sum
        Tmp2 += Tmp1;
        if (Tmp2 > 0x00FE) {
            Tmp2 += 0xFF01;
        }
    }

    // Финализация
    Tmp2 += Tmp1;
    if (Tmp2 > 0x00FE) {
        Tmp2 += 0xFF01;
    }
    Tmp2 ^= 0x00FF;

    Tmp1 += Tmp2;
    if (Tmp1 > 0x00FE) {
        Tmp1 += 0xFF01;
    }
    Tmp1 ^= 0x00FF;

    return (ushort)((Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00));
}
*/
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////HEX(int)> LCD(String):
var bi = 0;
function LCD_HEX(bi) {
///////////////////
bi &= 0xFF;
var z = 0;
var HEX = ""; 
///////////////////
z=0; while (bi>15) {z++; bi=bi-16;};     
if (z==0)  {HEX = "0";} if (z==1)  {HEX = "1";} if (z==2)  {HEX = "2";} if (z==3)  {HEX = "3";}
if (z==4)  {HEX = "4";} if (z==5)  {HEX = "5";} if (z==6)  {HEX = "6";} if (z==7)  {HEX = "7";}
if (z==8)  {HEX = "8";} if (z==9)  {HEX = "9";} if (z==10) {HEX = "A";} if (z==11) {HEX = "B";}
if (z==12) {HEX = "C";} if (z==13) {HEX = "D";} if (z==14) {HEX = "E";} if (z==15) {HEX = "F";}
///////////////////
z=0; while (bi>0)  {z++; bi=bi-1;};   
if (z==0)  {HEX += "0";} if (z==1)  {HEX += "1";} if (z==2)  {HEX += "2";} if (z==3)  {HEX += "3";}
if (z==4)  {HEX += "4";} if (z==5)  {HEX += "5";} if (z==6)  {HEX += "6";} if (z==7)  {HEX += "7";}
if (z==8)  {HEX += "8";} if (z==9)  {HEX += "9";} if (z==10) {HEX += "A";} if (z==11) {HEX += "B";}
if (z==12) {HEX += "C";} if (z==13) {HEX += "D";} if (z==14) {HEX += "E";} if (z==15) {HEX += "F";}
///////////////////
HEX += " ";
return HEX; //String
}
////////////////////////////////////////////////////////////////////////////////
</script>


<!---------->
<div id='label'
style='position: absolute; left: 10px; top: 100px; width: 970px; height: 0px;
font-size: 30px; color: #000000; background: #1CD3A2;'>crc:</div>
<script>var label = document.getElementById('label');</script>
<!---------->
<div id='label_1'
style='position: absolute; left: 10px; top: 200px; width: 970px; height: 0px;
font-size: 30px; color: #000000; background: #1CD3A2;'>КС:</div>
<script>var label_1 = document.getElementById('label_1');</script>
<!---------->
<input id='button' type='button' value='нажми меня ))' onClick='Button();'
style='position: absolute; left: 10px; top: 300px; width: 500px; height: 80px;
font-size: 50px; border: 4px solid maroon; background: #00FF00;'>


<script>
function Button() {
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////DoCheckSum:
DoCheckSum(); 
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////crc:
fcrcTX();
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////LCD:
String = "crc: ";
for (xTX=0; xTX<TX_len; xTX++) {   
String += LCD_HEX(TX_int[xTX]); 
};
label.innerHTML = String;
TX_int[0]++;
if (TX_int[0] > 255){TX_int[0] = 0;};
///////////////////
String = "КС: ";
for (xTX=0; xTX<TX_len; xTX++) {   
String += LCD_HEX(Buf[xTX]); 
};
label_1.innerHTML = String;
Buf[0]++;
if (Buf[0] > 255){Buf[0] = 0;};
};
////////////////////////////////////////////////////////////////////////////////
</script>


</body>
</html>

пойдёт))
:tea:


крутовато будем посмотреть
ну это далеко от мысли
"прямое копирование , встака , поехали , и всё работает , чтот надо ещё"


Последний раз редактировалось o90 Вт сен 02, 2025 13:03:14, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 13:02:39 
Потрогал лапой паяльник

Карма: 2
Рейтинг сообщений: -9
Зарегистрирован: Сб авг 09, 2025 22:08:28
Сообщений: 373
Рейтинг сообщения: 0
там в некоторых случаях требуется операция именно с 16-ричным числом. конкретно.
в каких?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 13:10:39 
Друг Кота

Карма: -1
Рейтинг сообщений: 68
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8736
Откуда: .ru
Рейтинг сообщения: 0
что надо ещё ? )) браузер научился считать КС...
СИ копируется в любую другую программу... в МК... в виртуалку... куда угодно))
тока тип переменных поменять в зависимости от среды... и всё))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 13:15:00 
Встал на лапы

Зарегистрирован: Сб авг 09, 2025 22:19:34
Сообщений: 114
Рейтинг сообщения: 0
там в некоторых случаях требуется операция именно с 16-ричным числом. конкретно.
в каких?

ожидаемый вопрос .
я говорю о том , что приходится по ходу выполнения все время конвертировать туда -сюда
получается большое нагромождение .
если усложнять до макросов , ? то наверно быстрее сделать так .
быстрее но количество операций по ячейкам большое , и оно прогресивнорасте при увеличении числа байт в логе.
таблица становится трудно читаемой.

Добавлено after 1 minute 24 seconds:
что надо ещё ? )) браузер научился считать КС...
СИ копируется в любую другую программу... в МК... в виртуалку... куда угодно))
тока тип переменных поменять в зависимости от среды... и всё))
:tea:

не я ничего не говорю .
надо проверить .припервом приближении -работает над короткими посылками.
как длинные надо посмотреть?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 13:28:24 
Друг Кота

Карма: -1
Рейтинг сообщений: 68
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8736
Откуда: .ru
Рейтинг сообщения: 0
загрузить в буфер и изменить Size.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 13:37:38 
Встал на лапы

Зарегистрирован: Сб авг 09, 2025 22:19:34
Сообщений: 114
Рейтинг сообщения: 0
загрузить в буфер и изменить Size.

однако код 2стр .
ранее
HardWareMan писал(а):
как считается контролька?, я выдал прям готовое решение - копипастить в исходник и поехали. О какой программе речь
----------
поэтому его слова и были Взяты за чистую монету.
т.е ---скопировал ---вставилл---всё оно работает.
----------
....ни хрено девки пляшут...

буду разбираться , с короткими ОК


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 13:43:05 
Потрогал лапой паяльник
Аватар пользователя

Карма: -8
Рейтинг сообщений: -8
Зарегистрирован: Чт май 20, 2021 13:33:05
Сообщений: 329
Рейтинг сообщения: 1
по ходу выполнения все время конвертировать туда -сюда
получается большое нагромождени

Для этого есть ДЕС.В.ШЕСТН

Конечно, на Халяву проще.

Кстати, кто знает что такое Халява изначально? :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 13:51:25 
Потрогал лапой паяльник

Карма: 2
Рейтинг сообщений: -9
Зарегистрирован: Сб авг 09, 2025 22:08:28
Сообщений: 373
Рейтинг сообщения: 0
muravei_, надо и обратную сказать. Туда-сюда же надо ))

Добавлено after 2 minutes 22 seconds:
поэтому его слова и были Взяты за чистую монету.
т.е ---скопировал ---вставилл---всё оно работает.
----------
....ни хрено девки пляшут...

Всё верно. монета чище некуда. Его функция была вставлена в WinForms и она заработала. Девки, правда, не плясали, по крайней мере, не рядом со мной, а жаль...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 13:53:25 
Встал на лапы

Зарегистрирован: Сб авг 09, 2025 22:19:34
Сообщений: 114
Рейтинг сообщения: 0
по ходу выполнения все время конвертировать туда -сюда
получается большое нагромождени

Для этого есть ДЕС.В.ШЕСТН

Конечно, на Халяву проще.

Кстати, кто знает что такое Халява изначально? :)

фуйню порите барин , десять раз сказал уже , как еще.
in the table EXCEL works
но когда лениво читать , такие мысля и рождаются
ps
и опять прошу не засорять тему опусами о звездах, в Вашем понимании.
страниц уже много . тема на смотринах у 7000 чел.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 14:09:25 
Друг Кота

Карма: -1
Рейтинг сообщений: 68
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8736
Откуда: .ru
Рейтинг сообщения: 0
т.е ---скопировал ---вставилл---всё оно работает.

ну так надо же аккуратно вставлять... а не как попало))

Изображение

:)
на типы переменных смотрим...

Изображение

разные среды по разному "думают" ))
браузер вообще по своему думает)) у него вообще всё автоматом))
:tea:
и указатели я бы не использовал в СИ... можно и без них.
указатели это вообще ассемблерная фишка)) там без них ничего работать не будет.

в остальном всё правильно.

далее... идёт оптимизация))

Спойлер
Код:
<!DOCTYPE html>
<html>
<head>
<title>crc и КС</title>
<h2>Расчёт crc и КС:</h2>
</head>
<body>


<script>
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////Buf: 
var Buf = [ 
0x00,0x00,0x00,0xC0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
];
var KS_len = 4;           // KS_len
var String;           
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////TX_int: 
var TX_int = [ 
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
];
var xTX = 0;              // счёт xTX
var TX_len = 12;          // TX_len
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////crcTX:
var crcTX = 0; var bcrcTX = 0; var aTX = 0;  var bTX = 0;   
function fcrcTX(){
crcTX = 0xFFFFFFFF;
for (bTX=0; bTX<(TX_len-4); bTX=bTX+4) {                                 
bcrcTX=TX_int[bTX];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+1];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+2];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+3];
crcTX ^= bcrcTX;   
for( aTX = 0; aTX < 32; aTX++ ){         
if ((crcTX & 0x80000000) != 0){crcTX = (crcTX << 1) ^ 0x04C11DB7;}//Eth.
else                          {crcTX = (crcTX << 1);};
};
};
TX_int[TX_len-4] = ((crcTX>>24) & 0xFF);// crc       
TX_int[TX_len-3] = ((crcTX>>16) & 0xFF);// crc     
TX_int[TX_len-2] = ((crcTX>>8) & 0xFF); // crc       
TX_int[TX_len-1] = ((crcTX) & 0xFF);    // crc
};
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////KS:
var Cnt = 0; var Sum = 0; var Tmp1 = 0;  var Tmp2 = 0;
function KS(){
// Сброс
Cnt = 0; Sum = 0; Tmp1 = 0; Tmp2 = 0;

// Цикл расчёта
while (Cnt < KS_len)
{
// Tmp1
Tmp1 += Buf[Cnt]; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }; 
Tmp1 = Tmp1 & 0xFFFF;
// Sum
Sum += Tmp1; if (Sum > 0x00FE) { Sum += 0xFF01; }; 
Sum = Sum & 0xFFFF;
// Следующий байт
Cnt++;
};

// Финализация
Tmp2 = Tmp1 + Sum; if (Tmp2 > 0x00FE) { Tmp2 += 0xFF01; };
Tmp2 ^= 0x00FF;
Tmp1 += Tmp2; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; };
Tmp1 ^= 0x00FF;
Sum = (Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00);

// Результат
Buf[KS_len+1] = ((Sum>>8) & 0xFF);           
Buf[KS_len] = ((Sum) & 0xFF);       

};
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////CheckSum:
/*
function DoCheckSum( uint8_t *Buf, uint16_t Size ){
// Локальные переменные
uint16_t Cnt,Sum,Tmp1,Tmp2;
// Инит
Sum = 0; Tmp1 = 0; Tmp2 = 0;
// Если размер больше 0
if (Size > 0)
{ // Цикл расчёта
Cnt = 0;
while (Cnt < Size)
{ // Tmp1
Tmp1 += *(Buf); if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }
// Sum
Sum += Tmp1; if (Sum > 0x00FE) { Sum += 0xFF01; }
// Следующий байт
Buf++; Cnt++;
}
// Финализация
Tmp2 = Tmp1 + Sum; if (Tmp2 > 0x00FE) { Tmp2 += 0xFF01; }
Tmp2 ^= 0x00FF;
Tmp1 += Tmp2; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }
Tmp1 ^= 0x00FF;
Sum = (Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00);
}
// Результат
return Sum;
};
*/
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////наверное, можно немного упростить:
/*
public static ushort DoCheckSum(byte[] Buf, ushort Size)
{
    ushort Cnt = 0, Tmp1 = 0, Tmp2 = 0;
   
    if (Size == 0) { return 0; }

    while (Cnt < Size)
    {
        // Tmp1
        Tmp1 += Buf[Cnt++];
        if (Tmp1 > 0x00FE) {
            Tmp1 += 0xFF01;
        }
        // Sum
        Tmp2 += Tmp1;
        if (Tmp2 > 0x00FE) {
            Tmp2 += 0xFF01;
        }
    }

    // Финализация
    Tmp2 += Tmp1;
    if (Tmp2 > 0x00FE) {
        Tmp2 += 0xFF01;
    }
    Tmp2 ^= 0x00FF;

    Tmp1 += Tmp2;
    if (Tmp1 > 0x00FE) {
        Tmp1 += 0xFF01;
    }
    Tmp1 ^= 0x00FF;

    return (ushort)((Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00));
}
*/
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////HEX(int)> LCD(String):
var bi = 0;
function LCD_HEX(bi) {
///////////////////
bi &= 0xFF;
var z = 0;
var HEX = ""; 
///////////////////
z=0; while (bi>15) {z++; bi=bi-16;};     
if (z==0)  {HEX = "0";} if (z==1)  {HEX = "1";} if (z==2)  {HEX = "2";} if (z==3)  {HEX = "3";}
if (z==4)  {HEX = "4";} if (z==5)  {HEX = "5";} if (z==6)  {HEX = "6";} if (z==7)  {HEX = "7";}
if (z==8)  {HEX = "8";} if (z==9)  {HEX = "9";} if (z==10) {HEX = "A";} if (z==11) {HEX = "B";}
if (z==12) {HEX = "C";} if (z==13) {HEX = "D";} if (z==14) {HEX = "E";} if (z==15) {HEX = "F";}
///////////////////
z=0; while (bi>0)  {z++; bi=bi-1;};   
if (z==0)  {HEX += "0";} if (z==1)  {HEX += "1";} if (z==2)  {HEX += "2";} if (z==3)  {HEX += "3";}
if (z==4)  {HEX += "4";} if (z==5)  {HEX += "5";} if (z==6)  {HEX += "6";} if (z==7)  {HEX += "7";}
if (z==8)  {HEX += "8";} if (z==9)  {HEX += "9";} if (z==10) {HEX += "A";} if (z==11) {HEX += "B";}
if (z==12) {HEX += "C";} if (z==13) {HEX += "D";} if (z==14) {HEX += "E";} if (z==15) {HEX += "F";}
///////////////////
HEX += " ";
return HEX; //String
}
////////////////////////////////////////////////////////////////////////////////
</script>


<!---------->
<div id='label'
style='position: absolute; left: 10px; top: 100px; width: 970px; height: 0px;
font-size: 30px; color: #000000; background: #1CD3A2;'>crc:</div>
<script>var label = document.getElementById('label');</script>
<!---------->
<div id='label_1'
style='position: absolute; left: 10px; top: 200px; width: 970px; height: 0px;
font-size: 30px; color: #000000; background: #1CD3A2;'>КС:</div>
<script>var label_1 = document.getElementById('label_1');</script>
<!---------->
<input id='button' type='button' value='нажми меня ))' onClick='Button();'
style='position: absolute; left: 10px; top: 300px; width: 500px; height: 80px;
font-size: 50px; border: 4px solid maroon; background: #00FF00;'>


<script>
function Button() {
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////KS:
KS(); 
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////crc:
fcrcTX();
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////LCD:
String = "crc: ";
for (xTX=0; xTX<TX_len; xTX++) {   
String += LCD_HEX(TX_int[xTX]); 
};
label.innerHTML = String;
TX_int[0]++;
if (TX_int[0] > 255){TX_int[0] = 0;};
///////////////////
String = "КС: ";
for (xTX=0; xTX<KS_len+2; xTX++) {   
String += LCD_HEX(Buf[xTX]); 
};
label_1.innerHTML = String;
Buf[0]++;
if (Buf[0] > 255){Buf[0] = 0;};
};
////////////////////////////////////////////////////////////////////////////////
</script>


</body>
</html>


Вложения:
Screenshot_1.jpg [32.75 KiB]
Скачиваний: 137
Screenshot_2.jpg [41.69 KiB]
Скачиваний: 138
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 14:15:17 
Встал на лапы

Зарегистрирован: Сб авг 09, 2025 22:19:34
Сообщений: 114
Рейтинг сообщения: 0
muravei_, надо и обратную сказать. Туда-сюда же надо ))

Добавлено after 2 minutes 22 seconds:
поэтому его слова и были Взяты за чистую монету.
т.е ---скопировал ---вставилл---всё оно работает.
----------
....ни хрено девки пляшут...

Всё верно. монета чище некуда. Его функция была вставлена в WinForms и она заработала. Девки, правда, не плясали, по крайней мере, не рядом со мной, а жаль...

не хочется обсуждать его дело , нехорошо это.
но я обязан вам ответить , вот
а то чтоHardWareMan писал:
"О какой программе речь? как считается контролька?, я выдал ПРЯМО ГОТОВОЕ РЕШЕНИЕ - копипастить в исходник и поехали. О какой программе теперь речь "
и понимается это "поехали" как вот вся программа она готовое решение
а то что исходник нужен еще на 2 страницах обэтом я не предполагал.
то что программисту 6 разряда кажется очевидным ,
не всегда даже и читаемо даже электронщику .


Последний раз редактировалось o90 Вт сен 02, 2025 14:20:53, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 14:19:25 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 1566
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3400
Откуда: Казань
Рейтинг сообщения: 0
обэтом я не предполагал.

"Как много нам открытий чудных, готовит просвещения дух..."

Глупых утверждений "никакая программа не нужна", наверное, теперь больше не будет.

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 14:29:24 
Встал на лапы

Зарегистрирован: Сб авг 09, 2025 22:19:34
Сообщений: 114
Рейтинг сообщения: 0
обэтом я не предполагал.

"Как много нам открытий чудных, готовит просвещения дух..."

Глупых утверждений "никакая программа не нужна", наверное, теперь больше не будет.

хорошо вот полный текст
HardWareMan писал(а):
О какой программе речь? Изначальная задача была понять как считается контролька, я выдал прям готовое решение - копипастить в исходник и поехали. О какой программе теперь речь в теме про контрольку? Тема должна быть закрыта, ибо она решена.
99 % людей прочитали бы именно так , что " Выдана полная программа."
так я и цитировал
и не в суе упомянутый HardWareMan не заслуживает эти посты обсуждения. я извиняюсь ( шляпы кончились, новых не сшили)


Последний раз редактировалось o90 Вт сен 02, 2025 14:34:17, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 14:31:03 
Мучитель микросхем
Аватар пользователя

Карма: 8
Рейтинг сообщений: 102
Зарегистрирован: Ср сен 02, 2015 07:47:20
Сообщений: 407
Рейтинг сообщения: 0
Кстати, кто знает что такое Халява изначально? :)

А разве такую обувь ещё носят в миру?

_________________
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 1 сентября 2025 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 15:08:35 
Встал на лапы

Зарегистрирован: Сб авг 09, 2025 22:19:34
Сообщений: 114
Рейтинг сообщения: 0
т.е ---скопировал ---вставилл---всё оно работает.

ну так надо же аккуратно вставлять... а не как попало))

Изображение

:)
на типы переменных смотрим...

Изображение

разные среды по разному "думают" ))
браузер вообще по своему думает)) у него вообще всё автоматом))
:tea:
и указатели я бы не использовал в СИ... можно и без них.
указатели это вообще ассемблерная фишка)) там без них ничего работать не будет.

в остальном всё правильно.

далее... идёт оптимизация))

Спойлер
Код:
<!DOCTYPE html>
<html>
<head>
<title>crc и КС</title>
<h2>Расчёт crc и КС:</h2>
</head>
<body>


<script>
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////Buf: 
var Buf = [ 
0x00,0x00,0x00,0xC0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
];
var KS_len = 4;           // KS_len
var String;           
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////TX_int: 
var TX_int = [ 
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
];
var xTX = 0;              // счёт xTX
var TX_len = 12;          // TX_len
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////crcTX:
var crcTX = 0; var bcrcTX = 0; var aTX = 0;  var bTX = 0;   
function fcrcTX(){
crcTX = 0xFFFFFFFF;
for (bTX=0; bTX<(TX_len-4); bTX=bTX+4) {                                 
bcrcTX=TX_int[bTX];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+1];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+2];
bcrcTX=(bcrcTX<<8)|TX_int[bTX+3];
crcTX ^= bcrcTX;   
for( aTX = 0; aTX < 32; aTX++ ){         
if ((crcTX & 0x80000000) != 0){crcTX = (crcTX << 1) ^ 0x04C11DB7;}//Eth.
else                          {crcTX = (crcTX << 1);};
};
};
TX_int[TX_len-4] = ((crcTX>>24) & 0xFF);// crc       
TX_int[TX_len-3] = ((crcTX>>16) & 0xFF);// crc     
TX_int[TX_len-2] = ((crcTX>>8) & 0xFF); // crc       
TX_int[TX_len-1] = ((crcTX) & 0xFF);    // crc
};
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////KS:
var Cnt = 0; var Sum = 0; var Tmp1 = 0;  var Tmp2 = 0;
function KS(){
// Сброс
Cnt = 0; Sum = 0; Tmp1 = 0; Tmp2 = 0;

// Цикл расчёта
while (Cnt < KS_len)
{
// Tmp1
Tmp1 += Buf[Cnt]; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }; 
Tmp1 = Tmp1 & 0xFFFF;
// Sum
Sum += Tmp1; if (Sum > 0x00FE) { Sum += 0xFF01; }; 
Sum = Sum & 0xFFFF;
// Следующий байт
Cnt++;
};

// Финализация
Tmp2 = Tmp1 + Sum; if (Tmp2 > 0x00FE) { Tmp2 += 0xFF01; };
Tmp2 ^= 0x00FF;
Tmp1 += Tmp2; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; };
Tmp1 ^= 0x00FF;
Sum = (Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00);

// Результат
Buf[KS_len+1] = ((Sum>>8) & 0xFF);           
Buf[KS_len] = ((Sum) & 0xFF);       

};
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////CheckSum:
/*
function DoCheckSum( uint8_t *Buf, uint16_t Size ){
// Локальные переменные
uint16_t Cnt,Sum,Tmp1,Tmp2;
// Инит
Sum = 0; Tmp1 = 0; Tmp2 = 0;
// Если размер больше 0
if (Size > 0)
{ // Цикл расчёта
Cnt = 0;
while (Cnt < Size)
{ // Tmp1
Tmp1 += *(Buf); if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }
// Sum
Sum += Tmp1; if (Sum > 0x00FE) { Sum += 0xFF01; }
// Следующий байт
Buf++; Cnt++;
}
// Финализация
Tmp2 = Tmp1 + Sum; if (Tmp2 > 0x00FE) { Tmp2 += 0xFF01; }
Tmp2 ^= 0x00FF;
Tmp1 += Tmp2; if (Tmp1 > 0x00FE) { Tmp1 += 0xFF01; }
Tmp1 ^= 0x00FF;
Sum = (Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00);
}
// Результат
return Sum;
};
*/
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////наверное, можно немного упростить:
/*
public static ushort DoCheckSum(byte[] Buf, ushort Size)
{
    ushort Cnt = 0, Tmp1 = 0, Tmp2 = 0;
   
    if (Size == 0) { return 0; }

    while (Cnt < Size)
    {
        // Tmp1
        Tmp1 += Buf[Cnt++];
        if (Tmp1 > 0x00FE) {
            Tmp1 += 0xFF01;
        }
        // Sum
        Tmp2 += Tmp1;
        if (Tmp2 > 0x00FE) {
            Tmp2 += 0xFF01;
        }
    }

    // Финализация
    Tmp2 += Tmp1;
    if (Tmp2 > 0x00FE) {
        Tmp2 += 0xFF01;
    }
    Tmp2 ^= 0x00FF;

    Tmp1 += Tmp2;
    if (Tmp1 > 0x00FE) {
        Tmp1 += 0xFF01;
    }
    Tmp1 ^= 0x00FF;

    return (ushort)((Tmp1 & 0x00FF) | ((Tmp2 << 8) & 0xFF00));
}
*/
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////HEX(int)> LCD(String):
var bi = 0;
function LCD_HEX(bi) {
///////////////////
bi &= 0xFF;
var z = 0;
var HEX = ""; 
///////////////////
z=0; while (bi>15) {z++; bi=bi-16;};     
if (z==0)  {HEX = "0";} if (z==1)  {HEX = "1";} if (z==2)  {HEX = "2";} if (z==3)  {HEX = "3";}
if (z==4)  {HEX = "4";} if (z==5)  {HEX = "5";} if (z==6)  {HEX = "6";} if (z==7)  {HEX = "7";}
if (z==8)  {HEX = "8";} if (z==9)  {HEX = "9";} if (z==10) {HEX = "A";} if (z==11) {HEX = "B";}
if (z==12) {HEX = "C";} if (z==13) {HEX = "D";} if (z==14) {HEX = "E";} if (z==15) {HEX = "F";}
///////////////////
z=0; while (bi>0)  {z++; bi=bi-1;};   
if (z==0)  {HEX += "0";} if (z==1)  {HEX += "1";} if (z==2)  {HEX += "2";} if (z==3)  {HEX += "3";}
if (z==4)  {HEX += "4";} if (z==5)  {HEX += "5";} if (z==6)  {HEX += "6";} if (z==7)  {HEX += "7";}
if (z==8)  {HEX += "8";} if (z==9)  {HEX += "9";} if (z==10) {HEX += "A";} if (z==11) {HEX += "B";}
if (z==12) {HEX += "C";} if (z==13) {HEX += "D";} if (z==14) {HEX += "E";} if (z==15) {HEX += "F";}
///////////////////
HEX += " ";
return HEX; //String
}
////////////////////////////////////////////////////////////////////////////////
</script>


<!---------->
<div id='label'
style='position: absolute; left: 10px; top: 100px; width: 970px; height: 0px;
font-size: 30px; color: #000000; background: #1CD3A2;'>crc:</div>
<script>var label = document.getElementById('label');</script>
<!---------->
<div id='label_1'
style='position: absolute; left: 10px; top: 200px; width: 970px; height: 0px;
font-size: 30px; color: #000000; background: #1CD3A2;'>КС:</div>
<script>var label_1 = document.getElementById('label_1');</script>
<!---------->
<input id='button' type='button' value='нажми меня ))' onClick='Button();'
style='position: absolute; left: 10px; top: 300px; width: 500px; height: 80px;
font-size: 50px; border: 4px solid maroon; background: #00FF00;'>


<script>
function Button() {
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////KS:
KS(); 
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////crc:
fcrcTX();
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////LCD:
String = "crc: ";
for (xTX=0; xTX<TX_len; xTX++) {   
String += LCD_HEX(TX_int[xTX]); 
};
label.innerHTML = String;
TX_int[0]++;
if (TX_int[0] > 255){TX_int[0] = 0;};
///////////////////
String = "КС: ";
for (xTX=0; xTX<KS_len+2; xTX++) {   
String += LCD_HEX(Buf[xTX]); 
};
label_1.innerHTML = String;
Buf[0]++;
if (Buf[0] > 255){Buf[0] = 0;};
};
////////////////////////////////////////////////////////////////////////////////
</script>


</body>
</html>


И ОТГРЕМЕЛИ ГРОМКИЕ РАСКАТЫ И СОЛНЦЕ ВЫШЛО ИЗ ЗА ТУЧ,
А ИСТИНА ХОТЬ НА 13 СТРАНИЦЕ НО ЧУДОМ ПОКАЗАЛА ВЕРНЫЙ ПУТЬ
.. тестирование коротких кодов ОК.
с длинными пока разбираюсь.
вы убрали SIZE из оптимизированного варианта.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 15:11:32 
Потрогал лапой паяльник

Карма: 2
Рейтинг сообщений: -9
Зарегистрирован: Сб авг 09, 2025 22:08:28
Сообщений: 373
Рейтинг сообщения: 0
Вроде, 6 суток уже?
У меня детишки за это время уже как раз писали похожую функцию, то есть, знали массивы и циклы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 15:37:09 
Встал на лапы

Зарегистрирован: Сб авг 09, 2025 22:19:34
Сообщений: 114
Рейтинг сообщения: 0
Вроде, 6 суток уже?
У меня детишки за это время уже как раз писали похожую функцию, то есть, знали массивы и циклы.

Заголовок сообщения: расчет контрольной суммы (требуется помощь)СообщениеДобавлено: Сб авг 09, 2025 23:09:02
букварь программирования в изучении.
но нет такой цели изучить программирование как отче наш.
другая стезя.
а обучение детей дело тонкое , а в современных условиях нет культа сэнсэя., еще сложней.
и недопонимание вопрошающих, Вами, это беда скорее сенсея а не их.


Последний раз редактировалось o90 Вт сен 02, 2025 16:19:16, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: расчет контрольной суммы (требуется помощь)
СообщениеДобавлено: Вт сен 02, 2025 15:39:18 
Потрогал лапой паяльник
Аватар пользователя

Карма: -8
Рейтинг сообщений: -8
Зарегистрирован: Чт май 20, 2021 13:33:05
Сообщений: 329
Рейтинг сообщения: 0
muravei_, надо и обратную сказать. Туда-сюда же надо ))

туда была выше:
download/file.php?id=420720

В экселе ему не нравится , а программировать он не умеет, эксель тоже не знает .
Всем "помагателям" хамоватому халявщику - славу супер программиста вам стяжать не удастся (так себе задачка) , а проучить его стоит.


HardWareMan писал(а):
А разве такую обувь ещё носят в миру?

По моему это к обуви не имеет отношения, а имеет к шабаду , к бидонам с молоком и пятнице . :)
Но могу ошибаться.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 318 ]     ... , , , 13, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y