Работаю над реализацией протокола(проперитарного) ,одна функция в качестве “заглушки” печатает полученые данные.
Интересно ,может подскажет кто то способ рапечатать массив данных более элегантным спсособом ,чем показан ниже, а конкретней , избавиться от строк 26-31
функция LogInfo печатает с переносом строки (‘\n’)
длина массива received.payload не всегда кратна длине массива tmpArray. поэтому вопрос как распечатать остаток только строками 16-24 , остается открытым .
очищение массива перед каждой итерацией , что бы небыло “мусора” с предидущих итераций
идея в целом такова : я знаю длину приходящего массива ,допустим при конкретном пакете 37 байт, вся функция это “заглушка” что бы проверить как отработал протокол до какого-то моментса , как приходят данные (это просто набор числовых значений , потом будет уже парситься дальше)
я хочу пришеший массив распечатать построчно ,допустим по 16 чисел в строке.
функция sprintf(&tmpArray[i],“%x”,received.payload[(wholePartsLen * j) + i]); форматирует числа в строку которую потом можо передать в LogInfo. (сейчас заметил косяк - числа будут 2ух значные(т.е. 2 байта на печать) , и по 16 чисел на строку могут что то сломать так как печатаю сейчас)
штука в том что естественным образом длина принимаемого пакета будет не кратна размера буффера печати tmpArray , как печатать так что бы leftovers последних чисел тоже напечатать в цикле 16-24 ?
в конечно виде на экране увидеть
Received 0х06 1/3 : 000102030405060708090A0B0C0D0E0F
Received 0х06 2/3 : 101112131415161718191A1B1C1D1E1F
Received 0х06 3/3 : 202122232425
/*
Using printf on the Arduino.
by Michael McElligott
Usage:
Set a buffer size with _PRINTF_BUFFER_LENGTH_, default is 64 bytes, or about a single line
Set output stream with _Stream_Obj_. eg; SerialUSB
printf(format string, argument(s) list).
printfn(): As above but appends a new line on each print; aka serial.println()
eg; printf("%.2f, 0x%X", 1234.5678f, 32768);
For a detailed list on printf specifiers:
http://www.cplusplus.com/reference/cstdio/printf/
and
http://man7.org/linux/man-pages/man3/printf.3.html
Tested with the Arduino Due 1.6.6
Jan 2016
*/
#ifndef _printf_h_
#define _printf_h_
#define _PRINTF_BUFFER_LENGTH_ 64
#define _Stream_Obj_ Serial
#if 1
static char _pf_buffer_[_PRINTF_BUFFER_LENGTH_];
#else
extern char _pf_buffer_[_PRINTF_BUFFER_LENGTH_];
#endif
#define printf(a,...) \
do{ \
snprintf(_pf_buffer_, sizeof(_pf_buffer_), a, ##__VA_ARGS__); \
_Stream_Obj_.print(_pf_buffer_); \
}while(0)
#define printfn(a,...) \
do{ \
snprintf(_pf_buffer_, sizeof(_pf_buffer_), a"\r\n", ##__VA_ARGS__); \
_Stream_Obj_.print(_pf_buffer_); \
}while(0)
#endif