n'abend zusammen ...
ich bin auf euren monströsen intellekt und eure astronomische erfahrung
angewiesen:
ein dummes kleines problem, zu dem ich aber bisher keine lösung gefunden
hab (forum, internet.de ...)
folgende umgebung:
µC: dspic30f4013
RFID-Reader: ID ISC.MR101 (FeigElektronik)
compiler: C30
testcompiler für teilprogramme(PC): mingw gcc
für die kommunikation von RFID-Reader zu µC wird ein CRC-16 algorithmus
verwendet (vom RFID-Hersteller vorgegeben):
1 | unsigned int crc16 (unsigned char cnt, unsigned char DATA[]){
|
2 | unsigned int output = 0xffff;
|
3 | unsigned char i,j;
|
4 | for(i=0;i<cnt;i++){
|
5 | output ^= DATA[i];
|
6 | for(j=0;j<8;j++){
|
7 | if(output & 0x0001)
|
8 | output = (output >> 1) ^ 0x8408; //CRC-Polynom
|
9 | else
|
10 | output = (output >> 1);
|
11 | }
|
12 | }
|
13 | return output;
|
14 | }
|
(ist bestimmt nicht effizient, is mir aber im moment wurscht)
problem:
die berechnete prüfsumme stimmt nicht mit der tatsächlichen prüfsumme
überein (die sieht man im übertragungsprotokoll der beiliegenden
rfid-software)
beispiel:
nachricht ist:
14 FF 81 81 00 00 08 01 00 00 00 1E 00 00 00 00 01 01 E6 EC
(die letzten beiden bytes sind CRC)
der algorithmus berechnet aber folgendes:
ece6
also genau die beiden bytes vertauscht ...
wie fummel ich die wieder auseinander und dreh sie so hin wie ich sie
brauch? bzw, wie nehm ich aus dem unsigned int 'ece6' das 'ec' und das
'e6' raus?
ich glaube hier schonmal was ähnliches auf der seite gesehen zu haben,
finds aber ums verrecken nicht mehr ...
danke leute, ihr seid großes tennis!