S'il vous plaît supporter avec moi, je suis nouveau à C et je suis en train de programmer un Arduino. Je veux écrire un programme qui crache une trame de données de longueur spécifique avec des valeurs d'octets allant de 0 à 255. Le code minimum pour reproduire l'erreur est dans le bloc de code ci-dessous. Lors de la compilation que je reçois l'erreur suivante:erreur: conversion invalide de 'char *' en 'char'
sketch_apr09b.cpp: In function ‘char assembleFrame()’: sketch_apr09b.cpp:9:10: error: invalid conversion from ‘char*’ to ‘char’
Maintenant, mon impression est que je maltraite le « cadre de retour », mais je ne peux pas comprendre ce qui ne va pas.
char assembleFrame() {
char frame[] = {
0x61 , 0x62 , 0x63
};
return frame;
}
void setup() {
Serial.begin(115200);
};
void loop() {
char frame = assembleFrame();
Serial.print(frame);
}
Quand je lance un hexdump sur l'ordinateur de réception, je veux voir
00000000 61 62 63 |abc|
00000003
J'ai trouvé beaucoup de questions semblables, n'a pas été en mesure de comprendre ce que je suis mal faire.
EDIT: C'est ce que j'ai trouvé jusqu'à présent, mais en recevant des données erronées. Je pense que j'envoie le pointeur aux données réelles avec ceci.
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 ]);
}
Ce code compile, et je vois ce que je faisais mal, thnx. Je tapais 'char * assembleFrame()' au lieu de 'char * assembleFrame()'. Mais j'ai maintenant un nouveau problème: je ne peux pas utiliser de chaînes à zéro terminal, car la charge utile peut contenir des octets nuls. La taille fixe n'est pas un problème. Est-ce facile à résoudre? (en commentant votre réponse je n'ai pas eu la chance de DuckDuckGo ceci, mais je vais le faire maintenant). – jippie
Vous pouvez envoyer des octets à 'Serial.write()' un à la fois, ce qui devrait autoriser les valeurs nulles. Peut-être que 'assembleFrame' écrit le cadre dans un tampon (pointeur sur une chaîne), et renvoie une longueur - alors vous pouvez parcourir le tampon et' Serial.write() 'chaque' char'. – lunixbochs
oui, je l'ai trouvé il y a juste 1 seconde moi-même :) en fait, vous pouvez passer un paramètre de longueur avec Serial.write (buf, len 0) – jippie