Vad ska man ha CRC på?
Re: Vad ska man ha CRC på?
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.
Re: Vad ska man ha CRC på?
@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
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

Re: Vad ska man ha CRC på?
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.
Re: Vad ska man ha CRC på?
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.
"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.
Re: Vad ska man ha CRC på?
@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?
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
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".
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?

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

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".
Re: Vad ska man ha CRC på?
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.
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.
Re: Vad ska man ha CRC på?
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).
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).