Пожалуйста, несите меня, я новичок в C, и я пытаюсь запрограммировать Arduino. Я хочу написать программу, которая выплескивает кадр данных определенной длины с байтовыми значениями от 0 до 255. Минимальный код для воспроизведения ошибки приведен ниже. При компиляции я получаю следующее сообщение об ошибке:ошибка: неверное преобразование из 'char *' в 'char'
sketch_apr09b.cpp: In function ‘char assembleFrame()’: sketch_apr09b.cpp:9:10: error: invalid conversion from ‘char*’ to ‘char’
Теперь у меня сложилось впечатление, что я плохо обращается в «обратный кадр», но я просто не могу понять, что случилось.
char assembleFrame() {
char frame[] = {
0x61 , 0x62 , 0x63
};
return frame;
}
void setup() {
Serial.begin(115200);
};
void loop() {
char frame = assembleFrame();
Serial.print(frame);
}
Когда я бегу шестнадцатеричного на принимающем компьютере, я хочу видеть:
00000000 61 62 63 |abc|
00000003
Я нашел много подобных вопросов, не в состоянии понять, что я делать неправильно.
EDIT: Это то, к чему я придумал, но получаю неверные данные. Я думаю, что я посылаю указатель на фактические данные с этим.
byte *assembleFrame() {
byte frame[] = { 4 , 'a' , 'b' , 'c' };
return frame;
}
void setup() {
Serial.begin(115200);
};
void loop() {
byte *frame = assembleFrame();
Serial.write(frame , frame[ 0 ]);
}
Этот код компилируется, и я вижу, что я делал неправильно, thnx. Я набирал 'char * assembleFrame()' вместо 'char * assembleFrame()'. Но теперь у меня есть новая проблема: я не могу использовать строки с нулевым завершением, потому что полезная нагрузка может содержать нулевые байты. Фиксированный размер не является проблемой. Это легко решить? (комментируя ваш ответ, у меня не было шанса на DuckDuckGo, но я сделаю это прямо сейчас). – jippie
Вы можете отправлять байты в 'Serial.write()' по одному за раз, что должно допускать null. Может быть, 'assembleFrame' записывает кадр в буфер (указатель на строку) и возвращает длину - тогда вы можете выполнять итерацию через буфер и' Serial.write() 'each' char'. – lunixbochs
да, нашел его всего 1 секунду назад сам :) на самом деле вы можете передать параметр длины с помощью Serial.write (buf, len 0) – jippie