Forum Programmation.shell shell-->C

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-2
22
nov.
2015

Bonjour,
j'ai un programme pour faire clignoter une led sur shell script et je veux traduire en C
voila le programme

// Blink an LED on breadboard

PIN="26" # P8_6is gpio1_3 = (32 * 1) + 3 = 35
GPIOPIN="/sys/class/gpio/gpio$PIN"
if [ -d "$GPIOPIN" ]; then
echo "Blinking LED connected to Pin $PIN ..."
else
echo $PIN > /sys/class/gpio/export

echo "Blinking LED connected to Pin $PIN ..."
sleep 1
fi
while true; do
echo high > $GPIOPIN/direction
sleep 2
echo low > $GPIOPIN/direction
sleep 2
done

voila ce que j'ai essayé

int main()
 { 
 int p; char tab[max_N];
 int gpio = 26;
 p=open("/sys/class/gpio/export", O_WRONLY);
 sprintf(tab, "%d", gpio);
 write(p, tab, strlen(tab));
 close(p);
 sprintf(tab, "/sys/class/gpio/gpio%d/direction", gpio);
 p = open(tab, O_WRONLY);
 write(p, "out", 1); 
 write(p, "in", 3); 
 close(p);
 if [ -d "$GPIOPIN" ] then
 fprintf ("Blinking LED connected to Pin $PIN …")
 else
 // echo $PIN > /sys/class/gpio/export

fprintf("Blinking LED connected to Pin $PIN …")
 //sleep 1
 else
 while (true) do
 {
 sprintf(tab, "/sys/class/gpio/gpio%d/value", gpio);
 p = open(tab, O_WRONLY);
 write(p, "1", 1);

 write(p, "0", 1); 
 close(p);
 return 0;
 }
  • # ???

    Posté par  . Évalué à 1.

    bonjour,

    tu veux quoi : de l'aide, qu'on te le fasse ou autres : y a pas de questions ou de sollicitations dans ton texte ?

    tant va la cruche à l'eau qu'à la fin elle t'explose en pleine tête

    • [^] # Re: ???

      Posté par  . Évalué à 1.

      s'il y a quelqu'un qui peut corrigé ce que j'ai déjà essayé
      merci d'avance

  • # Déjà

    Posté par  . Évalué à 1.

    Un premier jet, sans chercher à comprendre le code :

    • max_N n'est pas défini.

    • if [ -d "$GPIOPIN" ] then
      fprintf ("Blinking LED connected to Pin $PIN …")
      else
      // echo $PIN > /sys/class/gpio/export
      fprintf("Blinking LED connected to Pin $PIN …")
      //sleep 1
      else

    C'est pas du C tout ça !

    • while (true) do C'est pas du C, true n'existe pas en C, manque l’accolade fermante.
    • [^] # Re: Déjà

      Posté par  . Évalué à 1.

      true n'existe pas en C

      Ça dépend dans quel C, visiblement dans C99 cela existe après avoir inclu <stdbool.h>.
      Après il reste certainement une question de bon goût :)

  • # 2 choses: syntaxe C, et poser une question intelligemment

    Posté par  . Évalué à 2.

    Je n'ai pas répondu sur l'autre fil, mais je suppose que tu as fais un effort sur celui-la…

    Donc, pour moi il va falloir que tu apprennes 2 choses:

    • comment poser une question de la bonne manière qui te servira sur les forums en général, et notamment sur linuxfr ou les gens sont assez à cheval sur ce genre de choses. Rien que survoler le document que j'ai mis en lien te permettra de comprendre ce que je veux dire et certains réactions que tu as pu constater.
    • la syntaxe du langage C. Par exemple, ton while(true) do{} ce n'est pas du C. Idem le if [ ... ] then est une construction du shell.

    Pour ce qui est du shell, sais-tu ce que fais [ -d foobar ]?
    Et pour le code C, le jour ou tu feras des programmes sérieux, tu vas galérer à déboguer si tu ne prends pas un minimum de bonnes habitudes. Notamment:

    • vérifier le code de retour des fonctions. Oui, ça inclue write, read, printf et scanf.
    • utiliser des fonctions dites sûre: plutôt que sprintf, snprintf par exemple, qui permets d'être sûr de ne pas avoir de dépassement de tampons, qui sont des erreurs qui mènent à des crash et des problèmes de sécurité.

    Il y aurais sûrement d'autres choses à dire, mais commences par ça. Ho, et un dernier conseil pour la route, au sujet de la compilation: ajoutes les flags -Wall et -Wextra. -Werror est pas mal non plus quand on commence, parce que quand on ne maîtrise pas le langage, il vaut mieux suivre les conseils du compilateur, et ce flag te "forcera" à le faire.

  • # dupe

    Posté par  (site web personnel) . Évalué à 2.

    Ah ben il y a justement une autre entrée de forum à ce sujet. Tu trouvera peut-être la réponse par là https://linuxfr.org/forums/programmation-c--2/posts/shell-script-langage-c

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

  • # Python

    Posté par  . Évalué à -3.

    Pourquoi vouloir le faire en C?
    Fais le avec Python, ça sera moins compliqué pour commencer.

    • [^] # Re: Python

      Posté par  . Évalué à 1.

      Hormis la question de l'empreinte, je ne trouve pas que pour ce genre de trivalité le python soit beaucoup plus facile, surtout si l'on ne maîtrise ni l'un ni l'autre à priori. Dans les 2 cas tu vas devoir passer autant de temps dans la documentation.
      Maintenant pour faire des choses plus complexes, il y aurait probablement matière à débat.

      • [^] # Re: Python

        Posté par  (site web personnel) . Évalué à 2.

        Hormis la question de l'empreinte,

        Avec MicroPyhon alors…

        Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.