Опять за помощью. Помогите понять, где считается СRC

Тема в разделе "WASM.ELECTRONICS", создана пользователем Stenton, 21 янв 2005.

  1. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
  2. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    SteelRat

    прочел, и если честно, то не въехал...

    Рабочего примера на асме не нашел, потому буду кропать потихоньку и методом проб и ошибок сделаю то, что задумал.





    Вчера (временно) посылал девайсу пакеты с заранее посчитаным crc, все работает на ура. Осталось правильно написать процедуру и будет мне счастье.
     
  3. Sonic

    Sonic New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2004
    Сообщения:
    77
    Адрес:
    Днепропетровск
    Вот вполне вразумительный и работающий пример на асме:



    initTable proc uses eax ebx ecx edx lp_1024b,Polynomial

    mov ebx,0FFh

    std

    mov edi,lp_1024b

    lea edi,[edi+ebx*4]

    Bytes:

    xor eax,eax

    mov al,bl

    mov ecx,8

    Bits:

    shr eax, 1

    jnc no_topbit

    xor eax,Polynomial

    no_topbit:

    dec ecx

    jnz Bits

    stosd

    dec ebx

    jns Bytes

    cld

    ret

    initTable endp



    CRC32 proc uses ebx ecx edx esi lpTable,Init,\

    XORout,INFO,lenINF

    mov esi,lpINFO

    mov ecx,lenINF

    mov eax,Init

    mov edx,lpTable

    xor ebx,ebx

    CRC:

    xor al,byte ptr [esi]

    mov bl,al

    shr eax,8

    xor eax,dword ptr[edx+4*ebx]

    lea esi,[esi+1]

    dec ecx

    jnz CRC

    xor eax,XORout

    ret

    CRC32 endp



    Первая процедура заполняет таблицу, вторая считает
     
  4. Sonic

    Sonic New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2004
    Сообщения:
    77
    Адрес:
    Днепропетровск
    Sorry за форматирование :)
     
  5. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    Sonic

    Спасибо большое, но мне нужно реализовать crc8 или на худой конец 16.

    А тут:
    Код (Text):
    1. CRC32 proc uses ebx ecx edx esi lpTable,Init,\
    2. XORout,INFO,lenINF


    не INFO, а lpINFO
     
  6. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    Люди добрые, направьте на путь истинный!!!

    Перепробовал кучу реализаций crc - не получаю требуемый результат... а может все потому что и не crc мне вовсе нужно...?



    Объясню "на пальцах":

    Есть строка 1(для передачи в порт): "AT*SKT*PING" (её представление в hex (как показывает некая программка, portmon): "41 54 2A 53 4B 54 2A 50 49 4E 47"

    плюс добавляем преславутый crc "09 03" и пихаем в порт.



    Еще есть строка 2(для передачи в порт): "1234567890" (её представление в hex (как показывает некая программка, portmon): "31 32 33 34 35 36 37 38 39 30" плюс еще один crc "0D 02" и тоже все в порт...

    В ответ девайс кинет в порт следующее: "..*SKT*PONG: 0, 20050128150004....OK..".



    Так вот может кто поправит, что я делаю не так и контрольная сумма у меня какая угодно, но не та, что нужно,собственно почему я Вам и надоедаю... :о(



    п.с. у меня работают два варианта подсчета CRC:

    1ый
    Код (Text):
    1. crc16small proc CharBuf:DWORD, CharBufLen:DWORD
    2. mov edx, CharBuf
    3. mov ecx, CharBufLen
    4. sub eax,eax
    5. jecxz p@4
    6. not eax
    7. p@1: xor al,[edx]
    8. inc edx
    9. mov bl,8
    10. p@2: shr eax,1
    11. jnc p@3
    12. ;полиномы:
    13. ;LHA_POLY_16(dos_crc16) -0A001h
    14. ;CCITT_POLY_16  -1021h
    15. ;POLY_32    -0EDB88320h
    16. ;bit-at-a-time(crc16)   -08408h
    17. xor eax,1021h   ; <- тек.полином
    18. p@3: dec bl
    19. jnz p@2
    20. loop p@1
    21. not eax
    22. p@4:
    23. mov CRC,eax
    24. ret
    25. crc16small endp


    ;----------------



    2ой (из Си переделан)
    Код (Text):
    1. CRC16Proc proc msg:DWORD,len:DWORD
    2. ; CRC (char *msg, int len)
    3. ;crc_poly           equ 1021h
    4. ;CrcIn              equ 0FFFFh
    5.     mov esi,[msg]
    6. l_char:
    7.     lodsb
    8.     mov dl,al
    9.     mov ax,[CrcIn]
    10.     mov ecx,8
    11. l_crc:
    12.     rcl dl,1
    13.     rcl ax,1
    14.     jnc no_xor
    15.     xor ax,[crc_poly];[poly]
    16. no_xor:
    17.     loop l_crc
    18.     mov [crc],ax
    19.     mov eax,[len]
    20.     dec eax
    21.     mov [len],eax
    22.     jnz l_char
    23.     mov ecx,16
    24.     mov ax,[CrcIn]
    25. l_argument:
    26.     shl ax,1
    27.     jnc no_xor1
    28.     xor ax,[crc_poly];[poly]
    29. no_xor1:
    30.     loop l_argument
    31.     mov [crc],ax
    32.  
    33.     ret
    34. ;----------------
    35. CRC16Proc endp




    п.с. Не ругайтесь только пожалуйста. Я сам на себя в обиде...
     
  7. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    Stenton

    что-то я читаю топик и не догоняю.

    1. тебе надо посчитать некую CRC

    2. у тебя есть прога, в которой УЖЕ ЕСТЬ код, который ее считает.

    В чем собственно говоря проблема ? Постить огромные куски кода сюда ? все равно никто читать не будет, IMO...
     
  8. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    infern0

    Все бы ничего, если бы не "бы" - CRC у меня не тот на выходе. Вот и постарался до людей довести более полную инфу...

    Вдруг у кого есть прога с подсчетом crc, они возьмут строку, пульнут ее в свой код и глянут, такой crc или нет.



    все равно никто читать не будет, IMO... - Вы тоже не читали?
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Stenton



    Имелось ввиду "никто по сер'езному читать не будет",

    т.е. прочтет и все... Твоя проблема в том, что

    ты так и не задал вопрос. Я должен тебе разочаровать :

    только стандартных видов CRC8 и CRC16, наверное

    с десяток. Поэтому "гадание на кофейной гуще"

    ни к чему не привело и не приведет.

    Либо ты сам все-таки найдешь, как в твоей программе

    считается CRC, либо дашь программу и может быть

    найдется кто-то добрый и поможет тебе.

    Все другие варианты - бессмысленная трата времени.

    Я уже кстати предупреждал, а ты не поверил...

    Ну-ну...
     
  10. Sergey_R

    Sergey_R Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    138
    Stenton

    Добавлю к valterg:

    Если прочесть статьи по CRC по указанной выше ссылке, можно увидеть, что многие "стандартные виды CRC8 и CRC16" различаются даже не алгоритмом подсчета контрольной суммы, а параметрами, которые используются в конкретной реализации.

    Поэтому надежда на то, что
    , в общем-то достаточно призрачна...
     
  11. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    и по причине, отличной от описанной выше :)
     
  12. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    В статье по CRC (c WASM) говориться про способы расчета... В них используются прямой и отраженный полиномы попробуй с полиномом 8408h - это отраженный от 1021h
     
  13. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    valterg

    Sergey_R

    Infern0

    Ваш оптимизьм меня радует до коликов... :о)

    А ведь я решу проблему, так или иначе.



    SteelRat

    Знаю, уже пробовал, не тот...
     
  14. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    еще раз: если у тебя есть работающая программа, то ПРОСТО ВОЗЬМИ ОТТУДА КОД РАСЧЕТА ТВОЕЙ КОНКРЕТНОЙ CRC.
     
  15. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    infern0

    Вы такой умный, Вам череп не жмет? (с) не помню ... :о))



    вот при желании можете потренироваться с "взятием оттуда" расчета crc
    Код (Text):
    1. h**p://www.compt.ru/ru/download.php
     
  16. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    там три макроса и большая exe, которую я качать не буду. Как всегда, вопрос не сформулирован, поэтому можешь дальше играться с подбором.

    ps: а вот хамить не стОит....
     
  17. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    infern0

    Не обижайтесь, это шуточное выражение... ,ни в коем разе обидеть не хотел!
     
  18. Sonic

    Sonic New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2004
    Сообщения:
    77
    Адрес:
    Днепропетровск
    Есть ещё вроде зеркальные алгоритмы, ты пробовал ?

    Посмотри аттач может поможет.

    [​IMG] 853598831__CRC.rar
     
  19. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Stenton

    По линку, который был дан лежит для скачивания сама прога и плагины к ней, разве эти плагины не делают то, что тебе надо?
     
  20. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    Sonic

    Ross N. Williams - это у меня на рабочем столе вместо "обоины" висит :о)) (но все равно спасибо, за Ваше время и внимание!!!)



    Stub

    Все знаю, видел конечно...

    Вот я вопрос и задавал... crc8 (по 256му мод.) это что, просто суммирование Нех-значений всех знаков строки? Если да, то как правильнее сложить, в bin и потом вернуть значение hex или как?

    А 16ый у меня и в примерах и в теории есть, но не работает правиьно. Я выкладывал процедуры. Само значение неверное, не совпадает с заранее изввестным.