CRC25 - kuidas ?
#21
(04-02-2015, 09:08 PM)admin Kirjutas:
(04-02-2015, 08:50 PM)A.R. Kirjutas: Aga kust tuli see 0x32 see on veel (eel)viimane probleem.

sõnumi ID järgi valid MAVLINK_MESSAGE_CRCS massiivist.
Käesoleva sõnumi ID on 0, seega massiivist võtad index 0 pealt väärtuse 50 (0x32 hexis). MAVLINK_MESSAGE_CRCS väärtust kasutad ainult crc kalkuleerimisel ja saadetavas (vastuvõetavas) sõnumisse seda ei panda.
Kood:
MAVLINK_MESSAGE_CRCS=[ 50,124,137,0,237,217,104,119,0,0,0,89,0,0,0,0,0,0,0,0,214,159,220,168, 24,23,170,144,67,115,39,246,185,104,237,244,222,212,9,254,230,28,28, 132,221,232,11,153,41,39,214,223,141,33,15,3,100,24,239,238,30,240,183, 130,130,0,148,21,0,243,124,0,0,0,20,0,152,143,0,0,127,106,0,0,0,0,0,0, 0,231,183,63,54,0,0,0,0,0,0,0,175,102,158,208,56,93,0,0,0,0,235,93,124, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, 241,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,49, 170,44,83,46,0]
https://github.com/marhar/eastbay-mavlin...eam.py#L46
Tänud, seda ma tean. Kirjutasin ka aga vast jäi abistajatel 2 silma vahele (tervelt 65mm ju! Smile )
Sain tuttava profielektrooniku abiga töötava C-keelse kalkulaatori. Tõesti töötab ! Selgub, et C teeb mingit automaagilist ja talle sobivat muutujate lõdva randmega muundamist 16-bitisest formaadist 8-bitisesse ja vastupidi. Selguse mõttes kirjutas Eiko koodi nati ringi, et kõik oleks 16-bitine. Tõlgin selle kohe, kui aega saan asmi ja riputan siia üles. Ehk on siis ka itestele "dinosaurustele" abiks Smile Muide, asmi tundmine võib vaid jama kaela tuua, kuskilt lugesin,et sääraseid friike peetakse potensiaalselt kahjulikeks (teavad liiga palju). Ehk siiski KaPo nii ei arva...
Vist mainisn, et koodi mõte on lugeda taeva heleduse analüsaatori näitu (Unihedron, tulemus= magnituudi kaaresekundi kohta), GPSi koordinaate ja võimalusel ka lennukõrgust ning kiirust kopterile pandud meerikult et registreerida valgusreostuse taset Tallinna kesklinna tänavatel öisel ajal.
Vslmid koodi riputan ka siia üles. Hetkel oskan juba Unihedroniga ja tavalise GPS-vastuvõtjaga sotid sirgeks rääkida ja SD-kaardile kirja panna.
Ärge siis UFOsid kahtlustage, kui kesklinna taevas mingil ööl imelikke tulesid näha - see võin olla mina (kui lennuamet loa annab)...
Vasta
#22
Ääremärkusena:

C - l on kõik viiruse tunnused, võiks öelda et parim viirus üldse kuna levib nii mööda arvuteid kui inimesi !

Sest miks kasutada iganenud definitsioone nagu
byte, word, dword...

selle asemel ikka
int (16 või 32 bitti)
unsigned int (seesama aga..mis aga ?)
short int (8 bitti või 16 bitti)
char (hetkel vist 8 bitti aga noh nt unicode põhjal võiks olla ju 16 bitti ? mida char tähendaski.. ? )

jne, sest siis saab ju teha asja PLATVORMIST SÕLTUVAKS mis küll minu teada läheb C mõttega vastuollu aga noh kokkuvõttes äkki mõte ei olnud see mida me eeldame vaid hoopis midagi õelamat Smile
Vasta
#23
(05-02-2015, 12:56 AM)madis Kirjutas: Sest miks kasutada iganenud definitsioone nagu
byte, word, dword...

teha asja PLATVORMIST SÕLTUVAKS

Eks ta nii ole. Ostad PICi programmaatori koos translaatoriga ja
see ei tunnista byte, word, dword
tahab hoopis short ja long

On nõus ka tekstiga
unsigned long long tmp
Seda tingimusel et
// tmp^= (tmp<<4);
tmp = (tmp ^ (tmp << 4)) &0xFF; //1. ok Annab 7F1C
unsigned char, mis võiks sobida, annab vale koodi.
Seda MPLAB IDE translaatoriga.

Kui sama asja teha lcc-32 all siis unsigned char on sobiv.
ja seal sobib ka tmp^= (tmp<<4);

Jälle on siis tulnud aeg vaadata DisASMiga mis seal TEGELIKULT toimub.

Niipalju siis PLATVORMIST ja SÕLTUVUSEST

Aga see-eest annab MPLAB võimaluse saada see programm ka ASMina.
Olen kuulnud et mõned mehed kirjutavad selles keeles.
Õnneks vist mitte masinkäskudes perfolinti nagu 1968. a. tuli teha.
Vasta
#24
Lõppsõnaks ütleks:

main(a,b)char**b;{int c=1,d=c,e=a-d;for(;e;e--)_(e)<_( c)?c=e:_(e)>_(d)?d=e:7;
while(++e<a)printf("\xe2\x96%c",129+(**b=8*(_(e)-_( c))/(_(d)-_( c))));}


HELL YEAH !
Vasta
#25
(05-02-2015, 02:32 PM)madis Kirjutas: Lõppsõnaks ütleks:

main(a,b)char**b;{int c=1,d=c,e=a-d;for(;e;e--)_(e)<_( c)?c=e:_(e)>_(d)?d=e:7;
while(++e<a)printf("\xe2\x96%c",129+(**b=8*(_(e)-_( c))/(_(d)-_( c))));}


HELL YEAH !

Maybe...
Ma sain vahepeal asmi rutiini tööle. Tänud ideede eest !

Kood:
;=============================================================================== ; CRC 1 baidi arvutamise algo ;#define X25_INIT_CRC 0xffff ; tmp=data ^ (*crcAccum &0xff); ; tmp^= (tmp<<4); ; tmp &= (0x00ff); ; *crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4); ; result= (*crcAccum); ; näidis testjada: ; http://www.privatprojekte.de/multicopter/telemetriedecoder.html ;FE 09 4E 01 01 00 00 00 00 00 02 03 51 04 03 1C 7F + 32 ; ülalolev testjada laadida aadressile 0x20 ja edaspidi ; 0xFE jätta välja ; CRC=0x7F1C ; enne viimast tehet lasta CRC-st läbi bait 0x32 (magic byte ehk seed) ; funkab küll !!! #define crcH TBLPTRHt #define crcL TBLPTRLt #define tmpH tempor0_h #define tmpL tempor0_l #define tmpHa t1_count #define tmpLa t2_count test: movlw 0xFF ; crc_init(&crcTmp) movwf TBLPTRLt movwf TBLPTRHt clrf tmpH clrf tmpL movlw .15 movwf t_count LFSR .0,0x20 tst1: movf POSTINC0,W ; loe databait puhvrist -> W xorwf crcL,W ; databait XOR CRC LOW -> tmp=data ^ (*crcAccum &0xff); movwf tmpL movff tmpH,tmpHa ; säilita algne tmp movff tmpL,tmpLa bcf CARRY ; (tmp<<4) rlcf tmpL,F rlcf tmpH,F bcf CARRY rlcf tmpL,F rlcf tmpH,F bcf CARRY rlcf tmpL,F rlcf tmpH,F bcf CARRY rlcf tmpL,F rlcf tmpH,F movf tmpHa,W ; XOR xorwf tmpH,F movf tmpLa,W xorwf tmpL,F clrf tmpH ; tmp &= (0x00ff) ; *crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4); movff tmpH,tmpHa ; tee tmp-st koopia movff tmpL,tmpLa bcf CARRY ; crcAccum>>8 rrcf crcH,F rrcf crcL,F bcf CARRY rrcf crcH,F rrcf crcL,F bcf CARRY rrcf crcH,F rrcf crcL,F bcf CARRY rrcf crcH,F rrcf crcL,F bcf CARRY rrcf crcH,F rrcf crcL,F bcf CARRY rrcf crcH,F rrcf crcL,F bcf CARRY rrcf crcH,F rrcf crcL,F bcf CARRY rrcf crcH,F rrcf crcL,F bcf CARRY ; tmp= (tmp<<8) rlcf tmpLa,F rlcf tmpHa,F bcf CARRY rlcf tmpLa,F rlcf tmpHa,F bcf CARRY rlcf tmpLa,F rlcf tmpHa,F bcf CARRY rlcf tmpLa,F rlcf tmpHa,F bcf CARRY rlcf tmpLa,F rlcf tmpHa,F bcf CARRY rlcf tmpLa,F rlcf tmpHa,F bcf CARRY rlcf tmpLa,F rlcf tmpHa,F bcf CARRY rlcf tmpLa,F rlcf tmpHa,F movf tmpHa,W ; XOR xorwf crcH movf tmpLa,W xorwf crcL movff tmpH,tmpHa ; loe algne tmp movff tmpL,tmpLa bcf CARRY ; tmp= (tmp<<3) rlcf tmpLa,F rlcf tmpHa,F bcf CARRY rlcf tmpLa,F rlcf tmpHa,F bcf CARRY rlcf tmpLa,F rlcf tmpHa,F movf tmpHa,W ; XOR xorwf crcH movf tmpLa,W xorwf crcL movff tmpH,tmpHa ; loe algne tmp movff tmpL,tmpLa bcf CARRY ; tmp= (tmp>>4) rrcf tmpHa,F rrcf tmpLa,F bcf CARRY rrcf tmpHa,F rrcf tmpLa,F bcf CARRY rrcf tmpHa,F rrcf tmpLa,F bcf CARRY rrcf tmpHa,F rrcf tmpLa,F movf tmpHa,W ; XOR xorwf crcH movf tmpLa,W xorwf crcL decfsz t_count goto tst1 ; loop until "iso siiperi" return
Vasta


Alamfoorumi hüpe:


Kasutaja, kes vaatavad seda teemat: 1 külali(st)ne