04-02-2015, 06:50 PM
(04-02-2015, 05:28 PM)A.R. Kirjutas: Näidisjadamy bad... index 15 oli vale, õige on 14.
http://eastbay-rc.blogspot.com/2013/04/m...oding.html
oli selline
_0__1__2__3__4__5__6__7__8__9__a__b__c__d__e__f_10
FE_09_4E_01_01_00_00_00_00_00_02_03_51_04_03_1C_7F 1. näidis
____0__1__2__3__4__5__6__7__8__9_10_11_12_13 jada elemendid 0 kuni ...
FE_09_9E_01_01_00_00_00_00_00_02_03_51_04_03_7A_6C 2.näidis
___09_4E_01_01_00_00_00_00_00_02_03_51_04_03_32 3. Mina, ei tea kust võetud 32.
Küsimused:
1. Kust tulid 14. ja 15. element?
2. Mis programmiga see asi lahendatud on?
LabView anndvat ok tulemused.
Aga C-s transleeritud programm ei lange kokku isegi peale esimest ringi.
MIDAGI ON KUSKIL MÄDA.
_______________________________
Mudisin natuke neid nelja rida ja sain esimese rea tulemuse samaks.
Muutujate kirjeldused, & käsud.
Aga juba teine rida ikka ei klapi.
14 ehk viimane bait on siit:
https://github.com/marhar/eastbay-mavlin...eam.py#L46
Kogu programmi käik
Kood:
buffer [09 4e 01 01 00 00 00 00 00 02 03 51 04 03 32], length=15
idx, data -> crc
[ 0] [09] -> [9246]
[ 1] [4e] -> [8cda]
[ 2] [01] -> [68d2]
[ 3] [01] -> [e47e]
[ 4] [00] -> [9a1d]
[ 5] [00] -> [cbfe]
[ 6] [00] -> [1e3a]
[ 7] [00] -> [9ec7]
[ 8] [00] -> [b22d]
[ 9] [02] -> [d947]
[10] [03] -> [04f9]
[11] [51] -> [2946]
[12] [04] -> [613f]
[13] [03] -> [fb8e]
[14] [32] -> [7f1c]
Kui sa teed bittide nihutamist, siis pead kandma hoolt, et väärtusel oleks kasutuses õige arv bitte (tmp puhul 8 ja crc puhul 16)
Kuna php's ei ole Xbitiseid muutujaid, siis kahes kohas toimub ületäitumine ja ülemised bitid peab nullima.
Kood:
$tmp = $data ^ ($crc & 0xff);
$tmp = ($tmp ^ ($tmp << 4)) & 0xFF; <-- jäta alles 8bitti
$crc = ($crc >> 8) ^ ($tmp << 8) ^ ($tmp << 3) ^ ($tmp >> 4);
$crc = $crc & 0xFFFF; <-- jäta alles 16 bitti