Pruzkum: "analogove" TCO, FBO

Schémata, zapojení, návody, dotazy a postupy k využití v železničním modelářství.

Moderátoři: Michal Dalecký, Jarda H., Rudolf, 123.marek

Re: Pruzkum: "analogove" TCO, FBO

Příspěvekod jurazbabic » stř 08 srp, 2018 7:44 am

belgarat píše:(start byte; escaping; pocitani checksumu)

Tak to můžeš porovnat s crc, díky knihovně je to takto jednoduché:
Kód: Vybrat vše
#include <util/crc16.h>
#define CRC_INIT_VAL 0xFFFF
static unsigned short crc;

před příjmem / vysíláním:
Kód: Vybrat vše
crc = CRC_INIT_VAL;

během :
Kód: Vybrat vše
crc = _crc_xmodem_update (crc, *data++);

kontrola při příjmu pokud se započítává i vlastní crc v paketu:
Kód: Vybrat vše
if (crc != 0)

při vysílání je třeba přehodit endian, teda asi, máme to tak, už nevím proč
zde splácané s ESC, dnes bych tyto 2 věci a úrovně protokolu striktně oddělil, crc se počíta z dat ještě před ESC:
Kód: Vybrat vše
p_crc = (unsigned char *)&crc + 1;
for (i = 0; i < sizeof (crc); i++) {
   if ((*p_crc == STARTFLAG) || (*p_crc == STOPFLAG) || (*p_crc == ESCFLAG)) {
      *p_buf++ = ESCFLAG;
      *p_buf++ = *p_crc-- ^ ESCFLAG;
   } else
      *p_buf++ = *p_crc--;
}

Schválně by mě to zajímalo, o kolik je to větší než checksuma, která má velmi omezenou schopnost detekce.

Jen tak mimochodem, mám opravdu 2 velké programy a jeden má těsně pod a druhý těsně nad 8kB.
jurazbabic
 
Příspěvky: 38
Registrován: čtv 20 lis, 2014 8:57 am

Předchozí

Zpět na Elektrika a elektronika

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků