Jag har i ett projekt använt ett protokoll där 64 tecken valdes ut för data av de 256 möjliga, så att 6 bitar källdata skickas per tecken. Det ger då 4 skickade tecken per 3 byte källdata. Det skulle ju också gå att göra med 7 bitar per tecken så kommer man upp i 8 tecken per 7 byte källdata. I vårt fall, där det faktiskt också var telemetridata, blev det väldigt enkelt med 6 bitar per tecken då vår AD-omvandlare hade 12 bitar. Så det går ju komma undan betydligt bättre än 4 bitar per tecken (hex). Starttecken och andra saker kan ju då använda de tecken som inte används för data. Jag körde med ASCII '0' till 'o' (64 st) för data, '#' för start och linefeed för slut. Det blir något i stilen:
Kod: Markera allt
#?04PG000f`00000P700XH00M6005?00080000005d00Om0000000000Wl00G>00Ok0006000000Oe00]
#101YS18X0000000Oj01NXWfHdOoZbQ1MDOfKBB?\i`@V8M>M207BW01XPOkLn83CnM:O]0;MHNCFJM7E
#201[]a0X0000000OZ01N=XGLhPW[2HkLhP0K9B9]9`CA_M7Li00K302C5PSLm83LdM_OT0:M=NIK8M:i
#?04PYP00f`00000P500XH00M6005>00080000005e00Om0000000000Wl00G=00Ok0006000000Oe00b
#101YeQ8X0000000Oj01NWWfHdOoZdQ4MBOfKBB?\j`?V8M=M206BV00XPOkLn82DCM:O]0;MGNCFcM7j
#201\1a0X0000000OY01N>XGLiPWZoHkLeP1K8B9]9`DA^M7Lj00K202C5PSLo83LcM_OT0:M;NIK7M:Z
En annan möjlighet som någon väl nämnde här tidigare är att använda någon form av "escaping", där du väljer ut ett eller flera styrtecken och sedan ser till att det finns styrteckensekvenser som motsvarar att styrtecknet hade varit med i källdatan. Ett exempel på det är hur backslash i stränglitteraler i C fungerar. Exempelvis
"C:\\FOO\\BAR.TXT" som det blir om styrtecknet i sig finns med i källdatan eller "12\tkakor\t34 kr\n" där styrtecknet används för att ge andra kommandon. Ett exempel på ett enkelt protokoll skulle ju då kunna vara att
\ i källdata översätts till
\\ i sändningen och att t.ex.
\$ används som startsekvens för meddelande.
Man får väl bara se upp så att styrtecknet man väljer inte förekommer för ofta i källdatan, för då kommer man ju upp i 50% utnyttjande i värsta fall om källdatan bara består av styrtecknet. Att välja 0x00 eller 0xFF kan vara dåliga idéer t.ex. om man skall skicka binärdata.
