реклама на сайте
подробности

 
 
> CRC16(ModBus) на С для ATmega128, помогите разобраться
sf9
сообщение Sep 17 2008, 07:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 30-10-07
Из: Москва
Пользователь №: 31 896



Всем доброе время суток!
Прошу помочь мне разобраться в С коде.Сам только недавно начал осваивать.
нужно реализовать CRC16 для ModBus.
Я знаю,что есть куча готовых реализаций.Простым(последовательным) и табличным способом.
Но хочу реализовать сам.
У меня проблема в том,что для вычисления CRC нужно смотреть на состояние младшого бита. Если "1" - то выполнять XOR,если нет,то крутить дальше.

Вот мой код:

int crc16 (unsigned char a) // a - 8-bit data for calculation CRC
{
unsigned int reg, tmp;
int i;

reg = 0xFFFF; // step1: initial loading of 16-bit register
reg ^= (unsigned int)a; // step2: a XOR reg

for(i = 0;i<8;i++) //step3: 8-iteration to calculate CRC
{
reg >>= 1;
tmp = reg;
tmp <<= 15;
if(tmp == 0x8000) reg ^= 0xA001; // checking: if LSB = "1" reg=reg^0xA001
}
return reg;
}

проверку я выолняю поразрядным сдвигом 16-битного reg влево, и, если там "1",то xor.

ниже преведена другая реализация CRC16 и она работет корректно!!!!

int crc16 (unsigned char a)
{
unsigned int reg;
unsigned char i, tmp;

reg = 0xFFFF;
reg ^= (unsigned int)a;
for(i = 0;i<8;i++)
{
tmp = (unsigned char)(reg&0x0001);
reg >>= 1;
if(tmp) reg ^= 0xA001;
}
return reg;
}

Поясните,что не так в первой реализачии. smile3046.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sf9   CRC16(ModBus) на С для ATmega128   Sep 17 2008, 07:38
- - Sat360   В первой реализации регистр сдвигается ДО анализа ...   Sep 17 2008, 07:46
- - Сергей Борщ   В работающей программе сначала запоминается младши...   Sep 17 2008, 07:55
- - sf9   СПАСИБО ОГРОМНОЕ!!! Я понял,просто ...   Sep 17 2008, 08:30
- - Rst7   А меня вот последнее время поперло по-другому CRC1...   Sep 17 2008, 08:52
|- - ReAl   Цитата(Rst7 @ Sep 17 2008, 11:52) А меня ...   Sep 17 2008, 10:29
|- - singlskv   Цитата(ReAl @ Sep 17 2008, 14:29) У avr-g...   Sep 17 2008, 17:43
- - sf9   Кстати,в компиляторах и САПРах для МСs как можно п...   Sep 17 2008, 09:15
- - Rst7   Никак. Только ручками. Ну или в симуляторе выполни...   Sep 17 2008, 09:29
|- - sf9   Цитата(Rst7 @ Sep 17 2008, 13:29) Никак. ...   Sep 17 2008, 09:43
- - Rst7   ЦитатаЕсть ли настройки в компиляторах или САПРах ...   Sep 17 2008, 09:50
|- - sf9   Спасибо большое! Побрёл я наращивать головные ...   Sep 17 2008, 10:04
- - sf9   По поводу crc16.h абсолютно согласен,вчера проверя...   Sep 18 2008, 09:52
- - Rst7   Цитата+1 Оптимальнее чем в avr-gcc для crc16 и не ...   Sep 18 2008, 11:42
|- - singlskv   Цитата(Rst7 @ Sep 18 2008, 15:42) Не кажи...   Sep 18 2008, 20:25
|- - =GM=   А что если сделать две таблицы на биты <7-4...   Sep 19 2008, 11:20
|- - Сергей Борщ   Цитата(=GM= @ Sep 19 2008, 14:20) А что е...   Sep 19 2008, 11:47
|- - =GM=   Идея простая, как веник. Ну вот как-то так, таблиц...   Sep 19 2008, 12:07
|- - ReAl   Цитата(=GM= @ Sep 19 2008, 15:07) Идея пр...   Sep 19 2008, 15:16
- - Rst7   ЦитатаИдея простая, как веник. Только таблички в ...   Sep 19 2008, 16:06
|- - ReAl   Цитата(Rst7 @ Sep 19 2008, 19:06) Ну и па...   Sep 19 2008, 20:27
|- - =GM=   Цитата(ReAl @ Sep 19 2008, 19:27) в перев...   Sep 19 2008, 23:17
||- - ReAl   Цитата(=GM= @ Sep 20 2008, 02:17) Я бы ещ...   Sep 20 2008, 07:16
||- - =GM=   Цитата(ReAl @ Sep 20 2008, 06:16) Кажется...   Sep 20 2008, 17:36
||- - ReAl   Цитата(=GM= @ Sep 20 2008, 20:36) Речь я ...   Sep 20 2008, 20:51
|- - =GM=   Цитата(ReAl @ Sep 19 2008, 19:27) Что-то ...   Sep 21 2008, 22:30
|- - ReAl   Вы так упорствуете в своих заблуждениях... Цитата(...   Sep 22 2008, 11:09
|- - =GM=   Ну, я не упорствую, но вот это ваше "return c...   Sep 23 2008, 11:51
|- - singlskv   Цитата(=GM= @ Sep 23 2008, 15:51) (Замечу...   Sep 23 2008, 18:48
|- - ReAl   Цитата(=GM= @ Sep 23 2008, 14:51) Ну, я н...   Sep 23 2008, 21:33
||- - =GM=   Цитата(ReAl @ Sep 23 2008, 20:33) Вы сами...   Sep 23 2008, 23:18
|- - defunct   Цитата(=GM= @ Sep 23 2008, 14:51) Для ваш...   Sep 29 2008, 19:50
|- - =GM=   Цитата(defunct @ Sep 29 2008, 18:50) У ва...   Sep 30 2008, 09:26
||- - defunct   Цитата(=GM= @ Sep 30 2008, 12:26) А вы эт...   Sep 30 2008, 13:13
||- - =GM=   Цитата(defunct @ Sep 30 2008, 12:13) Я не...   Sep 30 2008, 15:35
||- - Сергей Борщ   Цитата(=GM= @ Sep 30 2008, 18:35) Я ж вам...   Sep 30 2008, 16:04
|||- - =GM=   Цитата(Сергей Борщ @ Sep 30 2008, 15:04) ...   Sep 30 2008, 21:49
|||- - Сергей Борщ   Цитата(=GM= @ Oct 1 2008, 00:49) Во, Серг...   Oct 3 2008, 09:23
|||- - =GM=   Вот укороченная таблица для модбаса Код;a short cr...   Oct 3 2008, 12:43
|||- - defunct   Цитата(=GM= @ Oct 3 2008, 14:43) Вот тест...   Jan 9 2009, 00:07
|||- - =GM=   Цитата(defunct @ Jan 9 2009, 00:07) =GM=,...   Jan 9 2009, 11:38
||- - defunct   Цитата(=GM= @ Sep 30 2008, 18:35) Я ж вам...   Sep 30 2008, 16:46
|- - =GM=   Цитата(defunct @ Sep 29 2008, 18:50) Mодб...   Oct 2 2008, 15:27
||- - defunct   Цитата(=GM= @ Oct 2 2008, 18:27) defuct, ...   Oct 2 2008, 16:37
||- - =GM=   Цитата(defunct @ Oct 2 2008, 15:37) Если ...   Oct 2 2008, 20:41
|- - =GM=   Проверил ещё раз, получаются другие результаты, но...   Oct 3 2008, 08:30
- - dred73   Держи рабочие функции по расчету CRC8 и CRC16 Код...   Jan 11 2009, 07:04
- - Kovrov   Ребят, может кто нибудь оканчательный исходник выл...   Aug 12 2009, 09:59
|- - =GM=   Код в посте #28, таблица для модбаса и тестовые ве...   Aug 12 2009, 22:03
- - Kovrov   В этом примере таблица находится в рам пусть и 64 ...   Aug 13 2009, 13:38


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 01:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016