dans le cadre d'un projet il nous est demandé de créé un mode de configuration d'un système embarqué.
Problème étant que pour modifier certains modes, il nous ai demandé de rentré directement une commande depuis l'invite de commande et non dans le programme lui même.
Par exemple,
Dans mon programme :
int *LUMIN = 0
int *PRESSURE = 3
printf("si vous voulez changer une valeur, entrez la commande"\n)
scanf(" Commande : %d", Je ne sais pas)
Je voudrais que depuis ce scanf je puisse rentrer par exemple "PRESSURE = 8"
Sans avoir des if dans tout les sens, car l'objectif est d'optimiser la mémoire.
Je précise bien que LUMIN et PRESSURE sont des pointeurs.(J'ai fais comme ça pour économiser encore la mémoire.
Si tu comptes optimiser la mémoire il ne faut pas utiliser de pointeurs, mais utiliser directement les variables.
De plus un pointeur (comme son nom l'indique) doit pointer sur une variable et donc typiquement contenir l'adresse de la variable. Quand tu fais int *LUMIN = 0 ou int *PRESSURE = 3, c'est n'importe quoi.
scanf prend beaucoup de mémoire et n'est certainement pas le meilleur moyen d'optimiser la mémoire.
Tu parles d'un système embarqué. printf et scanf sont supposés correspondre à quel périphérique?
Actuellement je bosse sur Arduino uno. En effet j'avais un doute pour mes pointeurs. Je suis repassé sur une configuration plus simple mais si l'on reprend le problème avec des variables je ne parviens toujours pas a récupéré l'information de l'utilisateur pour changer la variable.
Sur une Uno, l'interface utilisateur passe soit par la liaison série, soit par une interface dédiée que tu vas créer.
Etant donné la formulation " il nous est demandé de rentré directement une commande depuis l**'invite de commande**" on peut supposer que c'est de la liaison série dont il est question.
Il faut donc que tu écrives le code nécessaire à l'acquisition de l'information par l'intermédiaire de ce lien.
Oui en effet il faut utiliser la liaison serie. Mais le problème c'est justement que je ne connais pas le programme. Peut être y'a t'il une fonction qui peut résoudre mon problème.
L'exemple 3.2. ReadBytesUntil est assez proche de ce que tu veux faire.
Les commandes sont simple :
HELLO : affichage de HELLO
UPPER azertyuiop : transforme l'argument en majuscules
LOWER AZERTYUIOP : transforme l'argument en minuscules
ADD 33 12 : additionne deux arguments
Il est facile de modifier pour accepter d'autres commandes :
LUMIN 0
PRESSURE 3
J'avoue que pour l'instant je ne m'y connais pas trop en windows ...
En tout cas j'ai essayé la méthode de hbachetti et ca semble être ce que je recherche mais le soucis étant que j'ai un problème avec les return. Voila le code que j'ai entré :
Et il me renvoie ce genre d'erreurs :
C:\Users\33695\Desktop\test2\test2.ino: In function 'void loop()':
C:\Users\33695\Desktop\test2\test2.ino:14:12: warning: return-statement with a value, in function returning 'void' [-fpermissive]
return false;
^~~~~
C:\Users\33695\Desktop\test2\test2.ino:30:14: warning: return-statement with a value, in function returning 'void' [-fpermissive]
return true;
^~~~
C:\Users\33695\Desktop\test2\test2.ino:39:14: warning: return-statement with a value, in function returning 'void' [-fpermissive]
return true;
La fonction loop est déclarée void, c'est à dire qu'elle ne renvoie rien. On ne peut pas utiliser de return dans cette fonction car return est fait pour retourner une valeur.
Par ailleurs un return dans la fonction loop n'a pas de sens, car c'est une demande de sortir de la fonction. Pour aller où?
Problème maintenant c'est que je n'arrive pas a changer la valeur de ma variable ... Pourtant j'ai rentré "PRESSURE 3" mais il semble dire que l'argument est invalide ...
Oui effectivement, petite erreur de ma part. J'ai corrigé l'article sur mon blog.
La compilation passe sur ARDUINO mais pas sur ESP par exemple.
vileroi:
Par ailleurs un return dans la fonction loop n'a pas de sens, car c'est une demande de sortir de la fonction. Pour aller où?
Cela a du sens, si l'on désire sortir rapidement d'une fonction, sans avoir une suite de if / else imbriqués.
Pour aller où ? retourner à la fonction appelante, c'est à dire main()
@MaolCESI : comme tu utilises des commandes courtes tu peux réduire CMD_MAX pour gagner un peu de mémoire RAM.
Une vingtaine ou trentaine de caractères devrait suffire.
OK je vais un peu raccourcir mes tableaux.
J'ai fais la meme chose que toi lesept.
J'ai entré "PRESSURE 8" mais il me renvoie "EINVAL".
Après n'aillant pas le matériel sur moi j'utilise ceci :
Bon, j'ai un nouveau problème.
Je dois ajouter une nouvelle variable nommé LUMIN_MAX.
Lorsque j'utilise la meme commande en entrant "LUMIN_MAX".
Il me change la valeur de LUMIN et de LUMIN_MAX alors que je ne voulais que LUMIN_MAX initialement... J'ai essayé de changer certaines valeurs dans le tableau mais rien n'y fais