расчет контрольной суммы (требуется помощь)
- HardWareMan
- Мучитель микросхем
- Сообщения: 431
- Зарегистрирован: Ср сен 02, 2015 07:47:20
Re: расчет контрольной суммы (требуется помощь)
[uquote="Nranddek",url="/forum/viewtopic.php?p=4743173#p4743173"]Здесь системы счисления не имеют никакого значения, всего лишь формы записи, удобные для своих случаев. Кто Вам мешает лог в десятичном виде получать? Просто на каждое число три разряда будет, вот и всё. От 000 до 255.[/uquote]
Для тех, у кого в детстве был ZX Spectrum, это вообще не проблема.
Для тех, у кого в детстве был ZX Spectrum, это вообще не проблема.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
- Реклама
Re: расчет контрольной суммы (требуется помощь)
уже программу написали ?
проверяем...
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
...
пойдёт))

проверяем...
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>
<!-----------------------------label------------------------------------------->
<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>
<!-----------------------------label_1----------------------------------------->
<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>
<!-----------------------------Button------------------------------------------>
<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>Re: расчет контрольной суммы (требуется помощь)
[uquote="HardWareMan",url="/forum/viewtopic.php?p=4743178#p4743178"][uquote="Nranddek",url="/forum/viewtopic.php?p=4743173#p4743173"]Здесь системы счисления не имеют никакого значения, всего лишь формы записи, удобные для своих случаев. Кто Вам мешает лог в десятичном виде получать? Просто на каждое число три разряда будет, вот и всё. От 000 до 255.[/uquote]
Для тех, у кого в детстве был ZX Spectrum, это вообще не проблема.[/uquote]
намек то ваш вполне понятный , можно добавить ОРИОН . СКОРПИОН. МК ,
далее перфокарты, ЭВМ с машинным залом укотрых обЬёмобщей памяти был 500Мб.
286,386, 486 пентиум ну и так далее .
а суть то опять ведь не в этом . забалтывание. жаль
Добавлено after 3 minutes 47 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4743182#p4743182"]уже программу написали ?
проверяем...
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
...
пойдёт))
[/uquote]
крутовато будем посмотреть
ну это далеко от мысли
"прямое копирование , встака , поехали , и всё работает , чтот надо ещё"
Для тех, у кого в детстве был ZX Spectrum, это вообще не проблема.[/uquote]
намек то ваш вполне понятный , можно добавить ОРИОН . СКОРПИОН. МК ,
далее перфокарты, ЭВМ с машинным залом укотрых обЬёмобщей памяти был 500Мб.
286,386, 486 пентиум ну и так далее .
а суть то опять ведь не в этом . забалтывание. жаль
Добавлено after 3 minutes 47 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4743182#p4743182"]уже программу написали ?
проверяем...
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>крутовато будем посмотреть
ну это далеко от мысли
"прямое копирование , встака , поехали , и всё работает , чтот надо ещё"
Последний раз редактировалось o90 Вт сен 02, 2025 13:03:14, всего редактировалось 1 раз.
Re: расчет контрольной суммы (требуется помощь)
[uquote="o90",url="/forum/viewtopic.php?p=4743174#p4743174"]там в некоторых случаях требуется операция именно с 16-ричным числом. конкретно.[/uquote]в каких?
Re: расчет контрольной суммы (требуется помощь)
что надо ещё ? )) браузер научился считать КС...
СИ копируется в любую другую программу... в МК... в виртуалку... куда угодно))
тока тип переменных поменять в зависимости от среды... и всё))

СИ копируется в любую другую программу... в МК... в виртуалку... куда угодно))
тока тип переменных поменять в зависимости от среды... и всё))
- Реклама
Re: расчет контрольной суммы (требуется помощь)
[uquote="Nranddek",url="/forum/viewtopic.php?p=4743185#p4743185"][uquote="o90",url="/forum/viewtopic.php?p=4743174#p4743174"]там в некоторых случаях требуется операция именно с 16-ричным числом. конкретно.[/uquote]в каких?[/uquote]
ожидаемый вопрос .
я говорю о том , что приходится по ходу выполнения все время конвертировать туда -сюда
получается большое нагромождение .
если усложнять до макросов , ? то наверно быстрее сделать так .
быстрее но количество операций по ячейкам большое , и оно прогресивнорасте при увеличении числа байт в логе.
таблица становится трудно читаемой.
Добавлено after 1 minute 24 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4743187#p4743187"]что надо ещё ? )) браузер научился считать КС...
СИ копируется в любую другую программу... в МК... в виртуалку... куда угодно))
тока тип переменных поменять в зависимости от среды... и всё))
[/uquote]
не я ничего не говорю .
надо проверить .припервом приближении -работает над короткими посылками.
как длинные надо посмотреть?
ожидаемый вопрос .
я говорю о том , что приходится по ходу выполнения все время конвертировать туда -сюда
получается большое нагромождение .
если усложнять до макросов , ? то наверно быстрее сделать так .
быстрее но количество операций по ячейкам большое , и оно прогресивнорасте при увеличении числа байт в логе.
таблица становится трудно читаемой.
Добавлено after 1 minute 24 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4743187#p4743187"]что надо ещё ? )) браузер научился считать КС...
СИ копируется в любую другую программу... в МК... в виртуалку... куда угодно))
тока тип переменных поменять в зависимости от среды... и всё))
не я ничего не говорю .
надо проверить .припервом приближении -работает над короткими посылками.
как длинные надо посмотреть?
Re: расчет контрольной суммы (требуется помощь)
загрузить в буфер и изменить Size.
Re: расчет контрольной суммы (требуется помощь)
[uquote="roman.com",url="/forum/viewtopic.php?p=4743190#p4743190"]загрузить в буфер и изменить Size.[/uquote]
однако код 2стр .
ранее
HardWareMan писал(а):
как считается контролька?, я выдал прям готовое решение - копипастить в исходник и поехали. О какой программе речь
----------
поэтому его слова и были Взяты за чистую монету.
т.е ---скопировал ---вставилл---всё оно работает.
----------------------------------------------------
....ни хрено девки пляшут...
буду разбираться , с короткими ОК
однако код 2стр .
ранее
HardWareMan писал(а):
как считается контролька?, я выдал прям готовое решение - копипастить в исходник и поехали. О какой программе речь
----------
поэтому его слова и были Взяты за чистую монету.
т.е ---скопировал ---вставилл---всё оно работает.
----------------------------------------------------
....ни хрено девки пляшут...
буду разбираться , с короткими ОК
Re: расчет контрольной суммы (требуется помощь)
[uquote="o90",url="/forum/viewtopic.php?p=4743188#p4743188"]по ходу выполнения все время конвертировать туда -сюда
получается большое нагромождени[/uquote]
Для этого есть ДЕС.В.ШЕСТН
Конечно, на Халяву проще.
Кстати, кто знает что такое Халява изначально?
получается большое нагромождени[/uquote]
Для этого есть ДЕС.В.ШЕСТН
Конечно, на Халяву проще.
Кстати, кто знает что такое Халява изначально?
Re: расчет контрольной суммы (требуется помощь)
muravei_, надо и обратную сказать. Туда-сюда же надо ))
Добавлено after 2 minutes 22 seconds:
[uquote="o90",url="/forum/viewtopic.php?p=4743192#p4743192"]поэтому его слова и были Взяты за чистую монету.
т.е ---скопировал ---вставилл---всё оно работает.
----------
....ни хрено девки пляшут...[/uquote]
Всё верно. монета чище некуда. Его функция была вставлена в WinForms и она заработала. Девки, правда, не плясали, по крайней мере, не рядом со мной, а жаль...
Добавлено after 2 minutes 22 seconds:
[uquote="o90",url="/forum/viewtopic.php?p=4743192#p4743192"]поэтому его слова и были Взяты за чистую монету.
т.е ---скопировал ---вставилл---всё оно работает.
----------
....ни хрено девки пляшут...[/uquote]
Всё верно. монета чище некуда. Его функция была вставлена в WinForms и она заработала. Девки, правда, не плясали, по крайней мере, не рядом со мной, а жаль...
Re: расчет контрольной суммы (требуется помощь)
[uquote="muravei_",url="/forum/viewtopic.php?p=4743193#p4743193"][uquote="o90",url="/forum/viewtopic.php?p=4743188#p4743188"]по ходу выполнения все время конвертировать туда -сюда
получается большое нагромождени[/uquote]
Для этого есть ДЕС.В.ШЕСТН
Конечно, на Халяву проще.
Кстати, кто знает что такое Халява изначально?
[/uquote]
фуйню порите барин , десять раз сказал уже , как еще.
in the table EXCEL works
но когда лениво читать , такие мысля и рождаются
ps
и опять прошу не засорять тему опусами о звездах, в Вашем понимании.
страниц уже много . тема на смотринах у 7000 чел.
получается большое нагромождени[/uquote]
Для этого есть ДЕС.В.ШЕСТН
Конечно, на Халяву проще.
Кстати, кто знает что такое Халява изначально?
фуйню порите барин , десять раз сказал уже , как еще.
in the table EXCEL works
но когда лениво читать , такие мысля и рождаются
ps
и опять прошу не засорять тему опусами о звездах, в Вашем понимании.
страниц уже много . тема на смотринах у 7000 чел.
Re: расчет контрольной суммы (требуется помощь)
[uquote="o90",url="/forum/viewtopic.php?p=4743192#p4743192"]т.е ---скопировал ---вставилл---всё оно работает.[/uquote]
ну так надо же аккуратно вставлять... а не как попало))

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

разные среды по разному "думают" ))
браузер вообще по своему думает)) у него вообще всё автоматом))
и указатели я бы не использовал в СИ... можно и без них.
указатели это вообще ассемблерная фишка)) там без них ничего работать не будет.
в остальном всё правильно.
далее... идёт оптимизация))
ну так надо же аккуратно вставлять... а не как попало))
на типы переменных смотрим...
разные среды по разному "думают" ))
браузер вообще по своему думает)) у него вообще всё автоматом))
и указатели я бы не использовал в СИ... можно и без них.
указатели это вообще ассемблерная фишка)) там без них ничего работать не будет.
в остальном всё правильно.
далее... идёт оптимизация))
Спойлер
Код: Выделить всё
<!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>
<!-----------------------------label------------------------------------------->
<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>
<!-----------------------------label_1----------------------------------------->
<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>
<!-----------------------------Button------------------------------------------>
<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 КБ) 438 скачиваний
-
- Screenshot_2.jpg
- (41.69 КБ) 775 скачиваний
Re: расчет контрольной суммы (требуется помощь)
[uquote="Nranddek",url="/forum/viewtopic.php?p=4743194#p4743194"]muravei_, надо и обратную сказать. Туда-сюда же надо ))
Добавлено after 2 minutes 22 seconds:
[uquote="o90",url="/forum/viewtopic.php?p=4743192#p4743192"]поэтому его слова и были Взяты за чистую монету.
т.е ---скопировал ---вставилл---всё оно работает.
----------
....ни хрено девки пляшут...[/uquote]
Всё верно. монета чище некуда. Его функция была вставлена в WinForms и она заработала. Девки, правда, не плясали, по крайней мере, не рядом со мной, а жаль...[/uquote]
не хочется обсуждать его дело , нехорошо это.
но я обязан вам ответить , вот
а то чтоHardWareMan писал:
"О какой программе речь? как считается контролька?, я выдал ПРЯМО ГОТОВОЕ РЕШЕНИЕ - копипастить в исходник и поехали. О какой программе теперь речь "
и понимается это "поехали" как вот вся программа она готовое решение
а то что исходник нужен еще на 2 страницах обэтом я не предполагал.
то что программисту 6 разряда кажется очевидным ,
не всегда даже и читаемо даже электронщику .
Добавлено after 2 minutes 22 seconds:
[uquote="o90",url="/forum/viewtopic.php?p=4743192#p4743192"]поэтому его слова и были Взяты за чистую монету.
т.е ---скопировал ---вставилл---всё оно работает.
----------
....ни хрено девки пляшут...[/uquote]
Всё верно. монета чище некуда. Его функция была вставлена в WinForms и она заработала. Девки, правда, не плясали, по крайней мере, не рядом со мной, а жаль...[/uquote]
не хочется обсуждать его дело , нехорошо это.
но я обязан вам ответить , вот
а то чтоHardWareMan писал:
"О какой программе речь? как считается контролька?, я выдал ПРЯМО ГОТОВОЕ РЕШЕНИЕ - копипастить в исходник и поехали. О какой программе теперь речь "
и понимается это "поехали" как вот вся программа она готовое решение
а то что исходник нужен еще на 2 страницах обэтом я не предполагал.
то что программисту 6 разряда кажется очевидным ,
не всегда даже и читаемо даже электронщику .
Последний раз редактировалось o90 Вт сен 02, 2025 14:20:53, всего редактировалось 1 раз.
Re: расчет контрольной суммы (требуется помощь)
[uquote="o90",url="/forum/viewtopic.php?p=4743206#p4743206"]обэтом я не предполагал.[/uquote]
"Как много нам открытий чудных, готовит просвещения дух..."
Глупых утверждений "никакая программа не нужна", наверное, теперь больше не будет.
"Как много нам открытий чудных, готовит просвещения дух..."
Глупых утверждений "никакая программа не нужна", наверное, теперь больше не будет.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Re: расчет контрольной суммы (требуется помощь)
[uquote="smacorp",url="/forum/viewtopic.php?p=4743208#p4743208"][uquote="o90",url="/forum/viewtopic.php?p=4743206#p4743206"]обэтом я не предполагал.[/uquote]
"Как много нам открытий чудных, готовит просвещения дух..."
Глупых утверждений "никакая программа не нужна", наверное, теперь больше не будет.[/uquote]
хорошо вот полный текст
HardWareMan писал(а):
О какой программе речь? Изначальная задача была понять как считается контролька, я выдал прям готовое решение - копипастить в исходник и поехали. О какой программе теперь речь в теме про контрольку? Тема должна быть закрыта, ибо она решена.
99 % людей прочитали бы именно так , что " Выдана полная программа."
так я и цитировал
и не в суе упомянутый HardWareMan не заслуживает эти посты обсуждения. я извиняюсь ( шляпы кончились, новых не сшили)
"Как много нам открытий чудных, готовит просвещения дух..."
Глупых утверждений "никакая программа не нужна", наверное, теперь больше не будет.[/uquote]
хорошо вот полный текст
HardWareMan писал(а):
О какой программе речь? Изначальная задача была понять как считается контролька, я выдал прям готовое решение - копипастить в исходник и поехали. О какой программе теперь речь в теме про контрольку? Тема должна быть закрыта, ибо она решена.
99 % людей прочитали бы именно так , что " Выдана полная программа."
так я и цитировал
и не в суе упомянутый HardWareMan не заслуживает эти посты обсуждения. я извиняюсь ( шляпы кончились, новых не сшили)
Последний раз редактировалось o90 Вт сен 02, 2025 14:34:17, всего редактировалось 1 раз.
- HardWareMan
- Мучитель микросхем
- Сообщения: 431
- Зарегистрирован: Ср сен 02, 2015 07:47:20
Re: расчет контрольной суммы (требуется помощь)
[uquote="muravei_",url="/forum/viewtopic.php?p=4743193#p4743193"]Кстати, кто знает что такое Халява изначально?
[/uquote]
А разве такую обувь ещё носят в миру?
А разве такую обувь ещё носят в миру?
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Re: расчет контрольной суммы (требуется помощь)
[uquote="roman.com",url="/forum/viewtopic.php?p=4743204#p4743204"][uquote="o90",url="/forum/viewtopic.php?p=4743192#p4743192"]т.е ---скопировал ---вставилл---всё оно работает.[/uquote]
ну так надо же аккуратно вставлять... а не как попало))

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

разные среды по разному "думают" ))
браузер вообще по своему думает)) у него вообще всё автоматом))
и указатели я бы не использовал в СИ... можно и без них.
указатели это вообще ассемблерная фишка)) там без них ничего работать не будет.
в остальном всё правильно.
далее... идёт оптимизация))
[/uquote]
И ОТГРЕМЕЛИ ГРОМКИЕ РАСКАТЫ И СОЛНЦЕ ВЫШЛО ИЗ ЗА ТУЧ,
А ИСТИНА ХОТЬ НА 13 СТРАНИЦЕ НО ЧУДОМ ПОКАЗАЛА ВЕРНЫЙ ПУТЬ
.. тестирование коротких кодов ОК.
с длинными пока разбираюсь.
вы убрали SIZE из оптимизированного варианта.
ну так надо же аккуратно вставлять... а не как попало))
на типы переменных смотрим...
разные среды по разному "думают" ))
браузер вообще по своему думает)) у него вообще всё автоматом))
и указатели я бы не использовал в СИ... можно и без них.
указатели это вообще ассемблерная фишка)) там без них ничего работать не будет.
в остальном всё правильно.
далее... идёт оптимизация))
Спойлер
Код: Выделить всё
<!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: расчет контрольной суммы (требуется помощь)
Вроде, 6 суток уже?
У меня детишки за это время уже как раз писали похожую функцию, то есть, знали массивы и циклы.
У меня детишки за это время уже как раз писали похожую функцию, то есть, знали массивы и циклы.
Re: расчет контрольной суммы (требуется помощь)
[uquote="Nranddek",url="/forum/viewtopic.php?p=4743222#p4743222"]Вроде, 6 суток уже?
У меня детишки за это время уже как раз писали похожую функцию, то есть, знали массивы и циклы.[/uquote]
Заголовок сообщения: расчет контрольной суммы (требуется помощь)СообщениеДобавлено: Сб авг 09, 2025 23:09:02
букварь программирования в изучении.
но нет такой цели изучить программирование как отче наш.
другая стезя.
а обучение детей дело тонкое , а в современных условиях нет культа сэнсэя., еще сложней.
и недопонимание вопрошающих, Вами, это беда скорее сенсея а не их.
У меня детишки за это время уже как раз писали похожую функцию, то есть, знали массивы и циклы.[/uquote]
Заголовок сообщения: расчет контрольной суммы (требуется помощь)СообщениеДобавлено: Сб авг 09, 2025 23:09:02
букварь программирования в изучении.
но нет такой цели изучить программирование как отче наш.
другая стезя.
а обучение детей дело тонкое , а в современных условиях нет культа сэнсэя., еще сложней.
и недопонимание вопрошающих, Вами, это беда скорее сенсея а не их.
Последний раз редактировалось o90 Вт сен 02, 2025 16:19:16, всего редактировалось 2 раза.
Re: расчет контрольной суммы (требуется помощь)
[uquote="Nranddek",url="/forum/viewtopic.php?p=4743194#p4743194"]muravei_, надо и обратную сказать. Туда-сюда же надо ))[/uquote]
туда была выше:
https://radiokot.ru/forum/download/file.php?id=420720
В экселе ему не нравится , а программировать он не умеет, эксель тоже не знает .
Всем "помагателям" хамоватому халявщику - славу супер программиста вам стяжать не удастся (так себе задачка) , а проучить его стоит.
Но могу ошибаться.
туда была выше:
https://radiokot.ru/forum/download/file.php?id=420720
В экселе ему не нравится , а программировать он не умеет, эксель тоже не знает .
Всем "помагателям" хамоватому халявщику - славу супер программиста вам стяжать не удастся (так себе задачка) , а проучить его стоит.
По моему это к обуви не имеет отношения, а имеет к шабаду , к бидонам с молоком и пятнице .HardWareMan писал(а):А разве такую обувь ещё носят в миру?
Но могу ошибаться.


