Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

crc32 na crc16

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Teorie
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
DRAKE



Založen: Sep 05, 2005
Příspěvky: 276

PříspěvekZaslal: po prosinec 17 2012, 19:36    Předmět: crc32 na crc16 Citovat

Ahoj
Mám mikroprocesor od STMka, který umí hardwarově počítat 32 bitové CRC. Já potřebuji do své aplikace pouze 16 bitové. Je možné vzít z těch 32 bitů jenom prvních šestnáct a použít to a poté při ověřování zkontrolovat nulovost opět jenom těch prvních šestnácti bitů? Bude to fungovat jako spávné 16 bitové CRC?.

Děkuji za odpověď

_________________
Ježíš na kříži zaplatil za naše hříchy a tím nás osvobodil od věčné smrti. Platí i pro bastliře Smile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Panda38



Založen: Nov 21, 2012
Příspěvky: 717
Bydliště: Most, Praha, Lanžhot

PříspěvekZaslal: po prosinec 17 2012, 19:53    Předmět: Citovat

Rozhodně. Správné CRC má charakter náhodného čísla a tak každá jeho část je náhodným číslem a lze tedy použít k ověření. Jen bude větší šance na chybu a nebude to zřejmě normalizované.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: po prosinec 17 2012, 19:57    Předmět: Citovat

CRC má charakter náhodného čísla? Od kdy? Shocked
CRC je zbytek po dělení konkrétního polynomu konkrétním polynomem a tudíž na něm není nic náhodného.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Panda38



Založen: Nov 21, 2012
Příspěvky: 717
Bydliště: Most, Praha, Lanžhot

PříspěvekZaslal: po prosinec 17 2012, 20:02    Předmět: Citovat

Sice je to trochu off topic, tak se omlouvám DRAKE za vsuvku, ale zrovna jsem teď dělal CRC-CCITT XModem. Je to málo známý výpočet a je to škoda, má krátký kód a rychlost srovnatelnou s tabulkou (správnost výpočtu jsem ověřil srovnáním s tabulkovým výpočtem). Asm je sice pro AVR, ale třeba se to může někomu hodit.
kód:
/*-----------------------------------------------------------------------------
                        Calculate CRC-CCITT, 1 byte
-----------------------------------------------------------------------------*/

u16 Crc1(u16 crc, u8 data)
{

#ifdef USE_ASM

   asm (

   /* crc = (crc >> 8) | (crc << 8); */
   "mov   __tmp_reg__,%B0"   "\n\t"
   "mov   %B0,%A0"      "\n\t"

   /* crc ^= data; */
   "eor   __tmp_reg__,%1"      "\n\t"

   /* crc ^= (crc & 0xff) >> 4; */
   "mov   %A0,__tmp_reg__"   "\n\t"
   "swap   %A0"         "\n\t"
   "andi   %A0,0x0f"      "\n\t"
   "eor   __tmp_reg__,%A0"   "\n\t"

   /* crc ^= crc << 12; */
   "mov   %A0,__tmp_reg__"   "\n\t"
   "swap   %A0"         "\n\t"
   "andi   %A0,0xf0"      "\n\t"
   "eor   %B0,%A0"      "\n\t"

   /* crc ^= (crc & 0xff) << 5; */
   "mov   %A0,__tmp_reg__"   "\n\t"
   "swap   %A0"         "\n\t"
   "lsl   %A0"         "\n\t"
   "andi   %A0,0xe0"      "\n\t"
   "eor   %A0,__tmp_reg__"   "\n\t"
   "lsr   __tmp_reg__"      "\n\t"
   "lsr   __tmp_reg__"      "\n\t"
   "lsr   __tmp_reg__"      "\n\t"
   "eor   %B0,__tmp_reg__"   "\n\t"

   : "+r" (crc)
   : "r" (data)
   );

   return crc;

#else /* USE_ASM */

   crc = (crc >> 8) | (crc << 8);
   crc ^= data;
   crc ^= (crc & 0xff) >> 4;
   crc ^= crc << 12;
   crc ^= (crc & 0xff) << 5;
   return crc;

#endif /* USE_ASM */
}

/*-----------------------------------------------------------------------------
                      Calculate CRC-CCITT (XModem)
-----------------------------------------------------------------------------*/
/* Sample: 0xFC 0x05 0x4A -> 0x8048 */
#define CRC_INIT 0

u16 Crc(const void* buf, int len)
{
   u16 crc = CRC_INIT;
   const u8* s = (const u8*)buf;

   for (; len > 0; len--)
   {
      crc = Crc1(crc, *s++);
   }
   return crc;
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Panda38



Založen: Nov 21, 2012
Příspěvky: 717
Bydliště: Most, Praha, Lanžhot

PříspěvekZaslal: po prosinec 17 2012, 20:04    Předmět: Citovat

Andrea napsal(a):
CRC má charakter náhodného čísla? Od kdy? Shocked
CRC je zbytek po dělení konkrétního polynomu konkrétním polynomem a tudíž na něm není nic náhodného.
Samozřejmě to není náhodné číslo! Smile

Má vzhled náhodného čísla. Správné CRC vypadá při změně kontrolovaného obsahu tak, že se změní docela podstatně a na pohled jakoby náhodně. Jistě není moc dokonalé CRC, když při změně bitu 0 v datech se změní jen bit 0 v CRC.

Oříznutí 32 na 16 bitů by asi nebylo dobré např. u metody XOR + rotace (nebo u prostého součtu), protože tam se změna v datech projeví jen na 1 bitu, ale CRC-32 je dostatečně náhodný (pro Andreu proměnlivý Smile ) aby se to dalo oříznout.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: po prosinec 17 2012, 20:57    Předmět: Citovat

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
DRAKE



Založen: Sep 05, 2005
Příspěvky: 276

PříspěvekZaslal: út leden 29 2013, 17:58    Předmět: Citovat

Jaká je vlastně detekční schopnost 16 bitového CRC s obecným polynomem.
_________________
Ježíš na kříži zaplatil za naše hříchy a tím nás osvobodil od věčné smrti. Platí i pro bastliře Smile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Teorie Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.15 sekund