Радио-86РК/Радио 05-87/Что такое контрольная сумма?
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: Журнал Радио Источник: http://retro.h1.ru/RK86/Naladka/crc.html |
Некоторые читатели отмечают, что им не всегда удается запустить опубликованные в журнале программы для компьютера «Радио-86РК». Опыт показывает, что причиной тому обычно является невнимательность радиолюбителей, а порой и невысокое качество оттиска в конкретных экземплярах журнала. Чаще всего ошибки возникают при ручном вводе программы в компьютер. В самом деле, очень трудно набрать на клавиатуре несколько тысяч, на первый взгляд, бессмысленных букв и цифр и ни разу не ошибиться. Проверить правильность ввода программ в машинных кодах помогают контрольные суммы всей программы и ее частей (блоков).
Контрольную сумму вычисляют, складывая все информационные слова (байты) данного блока, как числа без знака, и передают в месте с информационным блоком. Если контрольная сумма принятого блока совпадает с переданной, то с достаточно большой вероятностью можно считать, что информация принята правильно. В противном случае блок принят или воспроизведен с ошибкой. К сожалению, этот метод только фиксирует наличие ошибки, не позволяя судить о ее месте и характере. Поэтому при несовпадении контрольных сумм процесс приема или воспроизведения блока, если это возможно, повторяют.
Для упрощения вычислений чаще всего подсчитывают и передают только несколько младших разрядов суммы, обычно столько, сколько содержится в информационном слове. Чтобы не снижать при этом вероятность обнаружения ошибки, иногда вместо простой суммы вычисляют так называемую циклическую сумму, добавляя возникающие при суммировании единицы переноса в старший разряд к младшему разряду результата. Например, обычная сумма двоичных чисел 11111111 и 00000001 равна 100000000, а их же восьмиразрядная циклическая сумма равна 00000001. В некоторых случаях вместо вычисленного значения контрольной суммы передают ее инверсию. Это несколько упрощает проверку на приемном конце, так как в этом случае при правильном воспроизведении контрольная сумма блока вместе с байтом контрольной суммы равна нулю.
В «Радио-86РК» автоматическое вычисление и сравнение контрольных сумм происходит при записи на магнитофон и воспроизведении блоков информации. В составе стандартных подпрограмм МОНИТОРА имеется подпрограмма вычисления контрольной суммы блока. Это двухбайтовое число, причем его младший байт равен младшему байту обычной суммы всех байтов блока, а старший байт —восьмиразрядная циклическая сумма того же блока.
Публикуемые в журнале контрольные суммы программ и их частей служат для своеобразной проверки канала связи «автор — редакция — читатель». Так что после ручного ввода программы в компьютер, прежде всего, необходимо проверить ее контрольную сумму. Для этого достаточно выполнить директиву О МОНИТОРА. в качестве параметров которой указать начальный и конечный адреса программы или ее части (блока). Включать магнитофон на запись при этом не обязательно.
Если полученная контрольная сумма не совпадает с указанной в журнале, ищите и исправляйте ошибку, допущенную Вами при наборе кодов программы. Особенно часто бывают перепутаны буква В и цифра 8.
Не имеет смысла пытаться запустить программу при несовпадающих контрольных суммах, так как последствия ошибки ввода непредсказуемы и найти ее по характеру реакции компьютера на неправильную программу практически невозможно. Чаще всего это приводит к полному уничтожению содержимого памяти.
А как быть, если контрольные суммы совпадают, а программа все-таки не работает. Совпадение контрольных сумм является необходимым, но не достаточным признаком правильности приема или воспроизведения информации. Контрольная сумма не изменяется при изменении порядка следования байт в блоке, а также, например, при пропуске нулевого байта. Другая не фиксируемая ошибка —увеличение значения одного из байт на некоторую величину и точно такое же уменьшение значения другого байта. Последняя ошибка при ручном вводе маловероятна, но первые две вполне возможны.
Нельзя исключать из числа возможных причин неработоспособности программы и неисправность компьютера. Могут быть, например, неисправны ячейки ОЗУ, используемые программой для запоминания промежуточных результатов вычислений. Одна из характерных неисправностей динамического ОЗУ — «забывание» спустя некоторое время записанной в него информации, причем это время может быть от нескольких миллисекунд до десятков минут. Для контроля надежности ОЗУ полезно проверить контрольную сумму программы спустя 5…10мин после ее ввода, причем в течение этого времени желательно не нажимать ни одной клавиши компьютера.
И, наконец, причиной неработоспособности программы может быть различие мониторов Вашего компьютера и того, на котором разрабатывалась и испытывалась программа. Например, подпрограммы вывода строки символов на экран дисплея, имеющиеся в МОНИТОРах «Микро-80» и «Радио-86РК», используют в своей работе и изменяют разные регистры микропроцессора. Это может быть причиной неработоспособности на одном из компьютеров программы, прекрасно работающей на другом. Программы, публикуемые в журнале, проверяются в редакции на компьютере «Радио-86РК» с монитором, коды которого опубликованы в статье "Персональный радиолюбительский компьютер «Радио-86РК».