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

Участник

Группа: Участник
Сообщений: 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; } Поясните,что не так в первой реализачии.
|
|
|
|
|
 |
Ответов
|
Sep 17 2008, 09:50
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Есть ли настройки в компиляторах или САПРах для МК,которые позволяют оптимизировать проект Ну обычно говорят не САПР, а среда разработки. Но то не суть. У всех вменяемых компиляторов есть возможность настройки уровня и типа оптимизации. Как для всего проекта, так и для отдельных функций (например в моем примере #pragma optimize=no_inline - это для того, чтобы функция никогда не включалась во внутрь другой). Кроме того, зная особенности поведения компилятора, можно помочь ему руками - написав соответствующий код, но тут только опыт поможет
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
Сообщений в этой теме
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 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|