Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CRC
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Alexander2013
Добрый день.
Есть некое устройство, которое общается с внешним миром посредством RS232. Производитель, в качестве примера строки приема/передачи, приводит следующее (прикрепление).
Как я понимаю, контрольная сумма здесь символ '%'. Пытаюсь проверить свои догадки, складываю все числа арифметически (за исключением символа '%') , беру 8 бит от суммы: не сходится с догадками sm.gif. Произвожу операцию XOR: то же самое.
Подскажите пожалуйста, тема CRC для меня новая.
megajohn
суммируйте все числа, и получите ноль
либо суммируйте все числа за исключением CRC и должны получить -CRC ( минус CRC )

вот файл Нажмите для просмотра прикрепленного файла

P.S.: на будующее: хотя бы цифры сами написали, чтобы людям время не тратить на перебивание из PDF В текст
Alexander2013
Цитата(megajohn @ Apr 30 2014, 13:32) *

Спасибо, не догадался напечатать...

Цитата(megajohn @ Apr 30 2014, 13:32) *
суммируйте все числа, и получите ноль
либо суммируйте все числа за исключением CRC и должны получить -CRC ( минус CRC )

Вот мне и непонятно как получить 37 (это все таки CRC?)
megajohn
Цитата(Alexander2013 @ Apr 30 2014, 12:51) *
Вот мне и непонятно как получить 37 (это все таки CRC?)


идите простым путем, всё суммируйте и получите 0

если хотите по своему, то так:
суммируете чиста кроме CRC - получаете 1499
а так как это байт то будет 219 ( 219беззнаковое это -37 знаковое )

из нуля вычитаете это число 219 и получаете искомый CRC = 37
Alexander2013
Спасибо
Цитата(megajohn @ Apr 30 2014, 14:14) *
если хотите по своему....

А по-другому ИМХО и не получится: мне нужно слать команды этому устройству, оно проверяет CRC,
следовательно, я должен его где-то взять... так?

Цитата(megajohn @ Apr 30 2014, 14:14) *
суммируете чиста кроме CRC - получаете 1499
а так как это байт то будет 219 ( 219беззнаковое это -37 знаковое )
из нуля вычитаете это число 219 и получаете искомый CRC = 37

Как будет выглядеть целиком алгоритм? На пальцах, если можно....
megajohn
Цитата(Alexander2013 @ Apr 30 2014, 13:27) *
Как будет выглядеть целиком алгоритм? На пальцах, если можно....


эх, молодежь-молодежь

сформировали свой пакет, где в значении CRC = 0
потом заводите переменную unsigned char summ = 0;
и начинаете:
summ = summ - 36;
summ = summ - 67;
...
summ = summ - 13;
summ = summ - 10;

и потом получившийся summ запишите в поле CRC
Alexander2013
Цитата(megajohn @ Apr 30 2014, 14:44) *
сформировали свой пакет, где в значении CRC = 0....


С вычитанием понятно, спасибо. Сразу возникает вопрос, откуда тогда берется "сложение", в верхней строчке производитель так и пишет:"added up"?
megajohn
Цитата(Alexander2013 @ Apr 30 2014, 13:57) *
Сразу возникает вопрос, откуда тогда берется "сложение", в верхней строчке производитель так и пишет:"added up"?


есть два идентичных пути:
arr[ CRC_index ] = (0 - arr[0] - arr[1] ... - arr[N-1] - arr[N] );
или
arr[ CRC_index ] = -(arr[0] + arr[1] ... + arr[N-1] + arr[N] );

если и это не понятно, то back to school
Alexander2013
Цитата(megajohn @ Apr 30 2014, 15:05) *
есть два идентичных пути:
....


т.е. это два СТАНДАРТНЫХ, ОБЩЕПРИНЯТЫХ алгоритма?
если так, то все понятно, какие могут быть вопросы касательно этого....
или "сложение" - это вещь условная?
adnega
Цитата(Alexander2013 @ Apr 30 2014, 18:50) *
т.е. это два СТАНДАРТНЫХ, ОБЩЕПРИНЯТЫХ алгоритма?
если так, то все понятно, какие могут быть вопросы касательно этого....
или "сложение" - это вещь условная?

Ага. Только называется это не CRC, а CS (контрольная сумма). У CRC совершенно определенные свойства.
Сергей Борщ
Цитата(Alexander2013 @ Apr 30 2014, 17:50) *
т.е. это два СТАНДАРТНЫХ, ОБЩЕПРИНЯТЫХ алгоритма?
Вообще-то это арифметика, первый класс. Тема "Сложение и вычитание". И четвертый класс, тема "отрицательные числа". a+b = a - ( -b )
Alexander2013
Цитата(Сергей Борщ @ May 1 2014, 02:17) *
Вообще-то это арифметика, первый класс...

Я не спрашивал как сделать 2+2, я спрашивал касательно алгоритма, и математика здесь не при чем.
Считать умею, благодарю.

megajohn еще раз спасибо
Alexander2013
Цитата(toweroff @ May 1 2014, 10:19) *
так же, как и писать по-русски?

Да уж не менее грамотно, чем большинство пользователей данного (да и большей части) форумов.

По существу вопроса я ответ получил, спасибо людям. Приятно когда человек может просто ответить на вопрос, а не начинать разговор в ключе "вы не так делаете, и не так говорите".
Не нужно ко мне придираться, лично Вам я ничего плохого не сделал. Флудить больше не хочу.

Еще раз спасибо.
thodnev
Можете воспользоваться одним из онлайновых CRC-калькуляторов.
Если хотите сами написать функцию расчета CRC, то лучше использовать готовую.
Кстати, контрольная сумма зависит также от выбранного полинома
Alexander2013
Это был не CRC... biggrin.gif
Читать-то букварь я начал по CRC, спутал эту тему со своей задачей, у меня ведь действительно ПРОСТО сумма...
Поэтому и начал спрашивать про "алгоритмы". Теперь дошло, затупил, пардоньте.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.