Ну, вот и всё. Задача решена. Был не прав: контрольки всего 2: первая на заголовке, как описано выше, вторая на данные, считается от 0000. Вот результаты расчёта, алгоритм, внезапно, простой, но со своей изюминкой. Ниже исходные данные и рассчитанная сумма после ??. Видно, что в посылке она идёт "вперёд ногами", т.е. little endian. Было интересно размять мозги, всем спасибо, все свободны.
ВЫ говорите , что шахматная задача - решена. алгоритм, внезапно, простой, но со своей изюминкой. прекрасно... могу я чисто практически применить Ваш алгоритм
HardWareMan, спорим теперь Вам придётся ещё написать и программку, чтобы она нужные команды ТС по найденному алгоритму паковала и в хитрый аппарат отправляла?
_________________ Платы для HLDI - установки лазерной засветки фоторезиста. ФоторезистыOrdyl Alpha 350 и AM 140. Жидкое олово для лужения плат (видео) - самое лучшее и только у меня. Паяльная маска XV501T-4 и KSM-S6189 (5 цветов). Заказ печатных плат - pcbsmac@gmail.com
Алгоритм расчёта контрольной суммы заголовка прост: берём FF и вычитаем побайтно SOF, EP и SIZE. Расчёт контрольной суммы блока данных производится по такому алгоритму (писал на память, не компилировал, могут быть синтаксические ошибки):
Код:
uint16_t 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; }
Ну и немного пошаговых примеров под спойлером, в том числе и коллизионные, для интересующихся почему так происходит. СпойлерКоллизионные пакеты:
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 6 декабря 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
HardWareMan, спорим теперь Вам придётся ещё написать и программку, чтобы она нужные команды ТС по найденному алгоритму паковала и в хитрый аппарат отправляла?
скажите , а вот обязательно . что " доброе" вставлять , из своей головы. вам кажется без этой умной мысли, задача ну никак не решиться. мелковата наверно провакация для HardWareMan. он оказался ВЫШЕ вашего понимания действительности. ... существуют конечно и " джон неуловимый " и " бесценные мысли"
Алгоритм расчёта контрольной суммы заголовка прост: берём FF и вычитаем побайтно SOF, EP и SIZE. Расчёт контрольной суммы блока данных производится по такому алгоритму (писал на память, не компилировал, могут быть синтаксические ошибки):
Код:
uint16_t 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; }
Ну и немного пошаговых примеров под спойлером, в том числе и коллизионные, для интересующихся почему так происходит. СпойлерКоллизионные пакеты:
ОК. спасибо. буду пробовать и тренироваться. "тернист путь создателя к звездам , Через усилие к победе, Через трудности к триумфу, особенно мешает грязь завистников и мелкие покусывания , от недостатка имеющихся знаний в багаже.
особенно мешает грязь завистников и мелкие покусывания , от недостатка имеющихся знаний в багаже.
Вы не смогли решить задачу, зато способны оценивать чужой багаж знаний? Вы считаете, что кто-то Вам завидует? Вам лечиться надо. И учиться.
А мне то чего завидовать, и изначально сказано , не могу решить задачу. прошу помощи ( а не обсуждения , почему ты плохо знаешь програмирование . больной ?) В чем криминал то. смотрите кому идет обращение. и адвокатов Здеся тоже нет но наглость второе счастье . не надо переходить на личности и бросаться просто так . учитесь нормальному диалогу.
:shock: кто в здравом уме такое мог придумать ? )) пипец...
Индусы на аутсорсе у крупной компании, производящей медицинское оборудование? Кто знает... Обычный CRC конечно был бы проще в реализации, я же писал и CRC8 и CRC16 для MCS51 25 лет назад (делал XYMODEM, на ZMODEM и CRC32 уже запала не хватило).
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 6 декабря 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
:shock: кто в здравом уме такое мог придумать ? )) пипец...
Индусы на аутсорсе у крупной компании, производящей медицинское оборудование? Кто знает... Обычный CRC конечно был бы проще в реализации, я же писал и CRC8 и CRC16 для MCS51 25 лет назад (делал XYMODEM, на ZMODEM и CRC32 уже запала не хватило).
вот так , совсем издалека становится понятна причина списания нового оборудования, стоящего больших денег. правда поставка для россии. это не только отсутствие расходников и сервис обслуж. в современных условиях. но ничего хоть и с кривыми кодами , главное что бы шевелилось
причина списания нового оборудования, стоящего больших денег
Такие вещи к технической стороне дела отношения не имеют. Только в редких исключениях. Но настолько редких, что обычному человеку из этой системы надо, наверное, 100 000 лет прожить, что б хоть одно застать. Попробуйте объяснить бухгалтеру, у которого аммортизация, срок службы и основные средства про контрольную сумму. Оно вообще в разных вселенных.
o90 писал(а):
главное что бы шевелилось
Надеюсь не по прямому назначению? Речь вроде о мед. оборудовании шла?
По крайней мере она тут действительно сумма, а не цикличный сокращённый код.
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 6 декабря 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
причина списания нового оборудования, стоящего больших денег
Такие вещи к технической стороне дела отношения не имеют. Только в редких исключениях. Но настолько редких, что обычному человеку из этой системы надо, наверное, 100 000 лет прожить, что б хоть одно застать. Попробуйте объяснить бухгалтеру, у которого аммортизация, срок службы и основные средства про контрольную сумму. Оно вообще в разных вселенных.
o90 писал(а):
главное что бы шевелилось
Надеюсь не по прямому назначению? Речь вроде о мед. оборудовании шла?
у нас сейчас не бухгалтера принимаю решение, импортозамещение не работает расходников нет, сервис .обслуживание ушло, комплектующих нет. да вот ещё и кривовато в программах . со слезами на глазах - но в утиль. а что делать . где лицензионная обслуга. что умельцам удаётся спасти для себя . вот и этому портальчику повезло. должен ....должен поработать на благо. правда поменяет свою профессию на работу в домашней мастерской.
По крайней мере она тут действительно сумма, а не цикличный сокращённый код.
чудо алгоритм нашли. в ручном режиме высчитывать возможно. как довести до ума , автоматизировать процесс. т.е. беру длинный код ,, с излишними командами возвращения в исходную позицию. отрезаю лишнее. вставляю и получаю заветную КС . понятно что требуется длинный ряд проб. экспериментального подтверждения работы алгоритма. пока девайс будет четко понимать и отвечать. visual studio code - будет достаточно для применения данного алгоритма.
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 6 декабря 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
инженегр не инженегр а алгоритм нашли , и он не реверс , прямо так и работает. думалось, по опубликованным " экранам ", что это плод програмный, автоматически сформированный при известных формулах. и без проблем должен работать в visual studio code. при полном формирование программы. понимаю , что решение шахматной задачи не имеет цели протоколировать решение, и печатать его. алгоритм и формулы понятны. ( можно хоть в EXEL запихать макросами ) удобней просто уже готовый алгоритм в visual studio code заставить работать, раз он уже и создан . ок спасибочки . буду далее думать . большой шаг уже сделан. с Вашей и божьей помощью. да и мир, не без добрых людей . и то что я буду делать месяц ( ну а что делать тем более 3\4пути и даже более - пройдено) , норм. программист думаю за полчаса обернет этот алоритм в програмный код. надо понимать , что у каждого своя стезя, один прекрассный реверс инженегр, другой физик, третий может быть чудо токарем -кулибиным ( даже знаю такого). и все они прекрасно работают , хорошие и умные ребята, и могут даже иметь общую страсть решения шахматных задач в свободное время. но.... - "КАЖДОМУ СВОЁ. " что и было ловко подмечено и написано на известных вратах..... снимаю шляпу...
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 6 декабря 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
в каждой шутке есть -доля шутки. по мне так понимаю, конечно электронщику ЧПУ мелковато возится с ремонтом розеток и выключателей. и это правильно. есть дела и по важнее. но для него однако это " пыль для моряков" и обратный инжиниринг это программист 6 разряда. программист - полковник ,,,ИМХО. не я не прошу ( постараюсь сам ) просто мне казалось что решение данного алгоритма в проге V.S. оно как бы автоматом сформировалось. судя по машинным экранам,,, опубликованным. я же не знаю инструмент Вашего созидания . ...а кол-во снятых шляп в уважение к труду, оно безгранично, так же как и благодарность. . но я не волшебник , а только учусь поэтому и интересуюсь , какой путь ( хоть и во мраке) будет покороче к победе. победе , которую приблизили Вы но нужна мне практически.
int16_t DoCheckSum — функция, которая рассчитывает контрольную сумму блока данных. Описание: Принимает указатель на блок данных (uint8_t *Buf) и размер блока (uint16_t Size). Вычисляет контрольную сумму по алгоритму, который включает суммирование байтов и вычисление результата по модулю (например, 255). Суммы — 16-битные переменные, чтобы сложения не переполнялись. Вычисление по модулю выполняется после каждого добавления, чтобы в конце цикла суммы всегда сводились к 8 битам. В конце входных данных две суммы объединяются в 16-битное значение контрольной суммы и возвращаются функцией. Инициализация переменных. Создаются локальные переменные: Cnt, Sum, Tmp1, Tmp2. Проверка размера. Если размер больше 0, то выполняется цикл расчёта. Расчёт суммы. В цикле Cnt (количество) добавляется к сумме Tmp1, если значение Tmp1 больше 0x00FE, то к нему прибавляется 0xFF01. Переход к следующему байту. Буфер увеличивается на 1, а Cnt увеличивается на 1. Финализация. Выполняются некоторые операции с переменными, в том числе Tmp2 (Tmp1 + Sum) и Tmp1 (Tmp1 + Tmp2). Возвращение результата. Функция возвращает значение Sum. Пример: в алгоритме расчёта контрольной суммы для блока данных из байтов (FF, 03, 00, C0) функция возвращает значение C9 72. ps теоретическое описание алгоритма. (всё понимаю , вот только сказать не могу ) надо придумывать програмный код для него.
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 6 декабря 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
Сначала ТС где-то урвал дорогой (по его словам) прибор. Прибор вынужденно списанный, а значит, скорее всего, ТС урвал его на халяву.
Потом ТС каким-то чудом нашёл грамотного человека, с которым сначала разорался в хлам на несколько страниц форума, но который, тем не менее, размотал для ТС искомый алгоритм.
Теперь ТС ищет очередного волонтёра, которому "полчаса всего" и нужно, чтобы слепить нужную ТС программу, усиленно задвигая за "все должны помогать друг-другу" и "сами мы не местные, в этом не шарим, зато наверняка крутые специалисты в других каких-то областях".
У меня одного эта неистребимая любовь к тотальной халяве вызывает гадостные чувства?
_________________ Платы для HLDI - установки лазерной засветки фоторезиста. ФоторезистыOrdyl Alpha 350 и AM 140. Жидкое олово для лужения плат (видео) - самое лучшее и только у меня. Паяльная маска XV501T-4 и KSM-S6189 (5 цветов). Заказ печатных плат - pcbsmac@gmail.com
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения