Skip to content

Commit 7db7eef

Browse files
committed
Faster now: stm32 100bytes message, now encode 124us and decode 112us
1 parent d58a2ac commit 7db7eef

1 file changed

Lines changed: 17 additions & 0 deletions

File tree

lib/c/bitproto.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,13 @@ void BpCopyBufferBits(int n, unsigned char *dst, unsigned char *src, int di,
227227
if (n >= 32) {
228228
((uint32_t *)dst)[0] = ((uint32_t *)(src))[0] >> si;
229229
if (si) dst[3] |= ((src[4] << d) & ~(0xff << d << si));
230+
230231
c = 32;
232+
233+
dst += 4;
234+
src += 4;
235+
n -= c;
236+
continue;
231237
} else if (b >= 32) {
232238
// Copy as an uint32 integer.
233239
// This way, performance faster x2 than bits copy approach.
@@ -238,6 +244,11 @@ void BpCopyBufferBits(int n, unsigned char *dst, unsigned char *src, int di,
238244
if (si) dst[1] |= ((src[2] << d) & ~(0xff << d << si));
239245

240246
c = 16;
247+
248+
dst += 2;
249+
src += 2;
250+
n -= c;
251+
continue;
241252
} else if (b >= 16) {
242253
// Copy as an uint16 integer.
243254
((uint16_t *)dst)[0] = ((uint16_t *)(src))[0] >> si;
@@ -246,7 +257,13 @@ void BpCopyBufferBits(int n, unsigned char *dst, unsigned char *src, int di,
246257
// Copy as an unsigned char.
247258
dst[0] = (src[0] >> si) & 0xff;
248259
if (si) dst[0] |= ((src[1] << d) & ~(0xff << d << si));
260+
249261
c = 8;
262+
263+
dst += 1;
264+
src += 1;
265+
n -= c;
266+
continue;
250267
} else if (b >= 8) {
251268
// Copy as an unsigned char.
252269
dst[0] = (src[0] >> si) & 0xff;

0 commit comments

Comments
 (0)