Vad ska man ha CRC på?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Vad ska man ha CRC på?

Inlägg av Andax »

Löser ju inte grundproblemet. Syftet med CRC är att checka att data är ok, så att man inte gör något tokigt. Dvs man måste hålla all den data som crc beräknas på och som man ska ta ställning till om den är ok eller inte i minnet till dess att faktiskt crc är beräknat. På sändsidan är det skillnad. Där kan man uppdatera crc för varje byte man skickar och sedan bara skicka ut crc på slutet.
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: Vad ska man ha CRC på?

Inlägg av Pajn »

@blueint
Jag får se om det blir en tyngre CRC eller extra CRCer senare när jag fått grepp om dem. Just nu tycker jag de bara är hemskt jobbiga och längtar efter ett färdigt TCP library ;)

>Fast måste du ändå inte kunna hålla allt i minnet. Huruvida du ska använda data eller inte på mottagarsidan beror ju på om CRC stämmer eller inte?!? Och CRC kommer sist!
Det jag måste spara (om meddelandet är till den här enheten) är sändar id't (max 4 Byte) samt datan.
Men eftersom jag gör protokollet själv (och därför alla noder) kan jag ju se till att enheter med lite minne aldrig behöver ta emot meddelanden med mycket data.

Från början är det mest tänkt till att skicka korta kommandon och där bör jag kunna hålla mig med ett fåtal Bytes. Längre fram kommer jag kanske ansluta nån display eller nått som har en anledning att ta emot mycket data. Men de meddelandena skickar jag ju bara till den enheten och inte till någon stackare som knappt klarar av att hantera sin egen uppgift :)
labmaster
Inlägg: 2919
Blev medlem: 5 april 2011, 01:10:25

Re: Vad ska man ha CRC på?

Inlägg av labmaster »

Om du skall skicka data till flera mottagare samtidigt kan det vara bättre att lägga till en gruppadress i meddelandet och dela in mottagarna i dessa grupper. Det blir då en så kallad hostaddress och en networkaddress. När du skall skicka till flera sätter du hostaddress till ett förutbestämt bitmönster som kallar broadcast address.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Vad ska man ha CRC på?

Inlägg av sodjan »

Du kan också göra som en del IR-fjärrkontroller, man sänder om samma
"kommando" ett par tre gånger, och mottagaren reagerar om den får
minst två likadana "paket" i följd. Det tar bort många störningar.

Sen så är det ju inte helt klart vilken typ av problem som din CRC
ska skydda mot. Och vad konsekvensen blir om ett paket skulle bli
felaktigt. En hjärt/lungmaskin som stannar eller trädgårdsbelysningen
som inte släcks ner... :-)

Jag menar att man inte ska överarbeta en lösning i onödan.
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: Vad ska man ha CRC på?

Inlägg av Pajn »

@labmaster
Jo jag hade med det först, men då det flesta noder är rätt dumma så skippade jag det.
Då det ska finnas minst en PC på nätet ska den få vara lite "master" och ha sånna uppgifter
i en databas så att jag snabbt och enkelt kan ställa om saker från ett webbinterface.

@Sodjan
Det är ju ett alternativ, men nu tror jag dock jag har fått ihop något som funkar.
Skulle dock behöva leta rätt på en labbplatta och en hög komponenter för att verifiera.
Varför kan aldrig sånna saker ligga tillsammans, eller åtminstone på samma plats varje
gång? :roll:

Det är i magnituden "trädgårdsbelysningen som inte släcks ner" så det är ju inte världens
viktigaste kommunikation, men jag vill ju å andra sidan inte behöva trycka två gånger :lol:

Tanker är att jag ska kunna dra det runt huset och sen bara haka på vad jag känner för, och
det ska "bara funka".
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: Vad ska man ha CRC på?

Inlägg av persika »

Ett alternativ till CRC kan vara Fletcher-checksum. I Fletcher-checksum skickas det två checksummor, dels en vanlig där alla byte summeras ihop och en summa som är summa av summorna.

se länkarna:

http://en.wikipedia.org/wiki/Fletcher's_checksum

http://www.drdobbs.com/database/184408761

In summary, Fletcher's checksum technique provides excellent error detection using a simple algorithm that can be implemented in only a few lines of code. Compared to CRC error detection, Fletcher's algorithm provides a comparable level of data integrity with a fraction of the computational effort. It's an excellent choice where high-link speeds must be achieved while using moderate- or low-performance computer hardware.


Men detta hjälper nog inte ditt minnesproblem.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Vad ska man ha CRC på?

Inlägg av v-g »

Jag kör lite CRC i mitt RS485 nätverk och det är mycket enkelt jag har en byte som först nollas sen kör man varje byte som sänds genom denna med XOR och till sist sänder man bara denna byte. För att den inte ska vara noll så XOR:ar jag den med ett fast värde.

Med en byte har datat en chans på 256 att bli fel med två byte 1 på 65536 och så vidare.

Jag tycker man ska kontrollera antalet fel snarare än att bygga ett avancerat felprotokoll. Med detta menar jag att det är bättre att det kommer fram korrekt data över nätet än att man har ett superprotokoll som "tar allt" (även om det senare också såklart är bra).
Skriv svar