Это расширение от Процесс ввода и тип для статического массива uint8_t относительно проблем, возникших в результате предлагаемого решения.
В настоящее время я пытаюсь создать переменную int
и переменную string
, которые вводятся в static uint8_t array
и затем печатаются с использованием Serial.println
.
Я использую:
#include <U8x8lib.h>
Код переменной Int (имеет ошибку):
int world = 1;
static uint8_t hello[sizeof(world)];
memcpy(hello, &world, sizeof(hello));
Если я скопирую это напрямую и вставлю в IDE вне обоих loop()
или setup()
, я получу следующую ошибку:
memcpy(hello, &world, sizeof(hello));
^
exit status 1
expected constructor, destructor, or type conversion before '(' token
Прочитав немного об этой проблеме, я обнаружил, что это должно быть введено в loop()
, что я и сделал. В результате при компиляции и загрузке проблем не возникало, однако при добавлении строки печаталось значение 1073488876:
Serial.println(int((uint8_t*)hello));
Я тоже сделал:
Serial.println(sizeof(hello));
И он напечатал 4, что означает, что код определяет переменную "hello" как int (так как int 4 байта).
Интересно, что если я закомментирую строку memcpy, то получу тот же результат - 1073488876, поэтому код каким-то образом «игнорирует» строку при помещении в функцию loop()
.
Код строковой переменной
String world = "Hello"; // 6 chars including \0
static uint8_t hello[6];
world.toCharArray((char *)hello, sizeof(hello));
Если я скопирую это напрямую и вставлю в IDE вне обоих loop()
или setup()
, я получу следующую ошибку:
world.toCharArray((char *)hello, sizeof(hello));
^
exit status 1
'world' does not name a type
Если я поставлю строку world.toCharArray((char *)hello, sizeof(hello));
в loop()
, она будет работать.
Серийная печать также работает со строкой:
Serial.println(String((char *)hello));
Я не знаю, имеет ли это какое-либо отношение к моей проблеме с кодом Int Variable, но подумал, что я мог бы также показать это.