-
Notifications
You must be signed in to change notification settings - Fork 0
/
Pro_biti.txt
20 lines (19 loc) · 1.31 KB
/
Pro_biti.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
в 10 байтах у нас два 32-ух битных числа (два канала)
значит делим каждую 10 на пять (первые пять и вторые пять)
в каждой пятерке у нас последние 4 байта-это как раз само число (32 бита). Но так как у UART есть проблема с передачей нулевого байта (ну такая классическая бага, про него надо помнить), АЕ решил сделать так:у каждого байта старший (седьмой) бит заменить на единицу (тогда у нас никогда не будет передаваться ноль).
окей, тут понятно, идем дальше
байтов у нас пять, самый старший содержит в себе код канала (просто какой-то идентификатор канала, первые 4 бита), а последние 4 бита содержат в себе старшие биты тех четырех байтов, в которых мы все заменили на единичку
тогда процедура парсинга будет такая:
1. Берешь старший байт из пятерки, из него вырезаешь нулевой, первый, второй и третий биты (именно они являются старшими битами в оставшихся байтах)
2. Берешь оставшиеся 4 байта и им в старший бит записываешь то, что ты вырезала из старшего байта
3. Склеиваешь 4 байта в одно число
пример верезания битов из старшего байта:
допустим, старший байт byteH=120
чтобы вырезать нулевой бит этого байта надо
null_bit = byteH & 1
чтобы вырезать первый бит, надо
first_bit = (byteH & 1<<1)>>1
второй
second = ((byteH & 1<<2)>>2)
чтобы записать null_bit старшим в нужный байт (byte_one), надо:
byte_one = byte_one | null_bit<<7