Компилятор arduino IDE довольно прост и позволяет определять переменные как "byte", который представляет собой uint8_t или unsigned char, и, похоже, он работает. Но он не подключается напрямую с этим тестовым кодом. Я использую Arduino IDE и PlatformIO для сравнения результатов. Для отладки я вставляю этот код в симулятор OnlineGBD C ++. Мне нужно предоставить байты в шестнадцатеричном формате, представляющие двоичные значения, как если бы я подключил его следующим образом:
const char s [] = {0x37, 0x74, 0x37, 0}; // 00110111,01110100,00110111,0 writeTextPacket (s)
Мне нужно изменить "byte b [6]" в симуляторе на "char b [6]", чтобы запустить его, но printf выглядит как будто он дает мне указатели, а не то, что находится в местах памяти. Мой второй Printf пытается отформатировать переменную "b" как% p, а также% x для тестирования, и перед значением ставится 0x7ffe, поэтому (void **) b равно 0x7ffexxxxxxxx, а значение b равно xxxxxxxx.
И, наконец, возвращаемое значение для nBytes всегда равно "7". Очевидно, он должен дать мне количество найденных байтов. Я думаю, что я путаюсь между указателями и символами. Спасибо.
void RegisterList::writeTextPacket(const char *s) volatile{
int nReg;
byte b[6];
int nBytes;
nBytes=sscanf(s,"%x %x %x %x %x %x",&nReg, b, b+1, b+2, b+3, b+4)-1; // return number of bytes
printf("%d\n",nBytes);
printf("%d, %p, %x, %x, %x, %x, %x", nReg, (void**) b, b, b+1, b+2, b+3, b+4);
loadPacket(nReg,b,nBytes,0,1); // loadPacket(int nReg, byte *b, int nBytes, int rep, int flag)
}