IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Traduction basic en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2013
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 15
    Par défaut Traduction basic en C
    Salut à tous,

    je programme avec un microcontrôleur PIC 16F1503.
    J'ai un code en C que j'ai presque intégralement traduit, il y a seulement une fonction de liaison série que je n'ai pas réussi à traduire et donc me voilà.

    La fonction basic en question est "Serout", le lien détaille son fonctionnement.
    http://www.picaxe.com/BASIC-Commands...facing/serout/

    Je voudrais traduite ça en C pour que mon microcontrôleur puisse envoyer des infos à un PC.

    Quelqu'un peut-il m'aider?

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    EN gros tu veux écrire sur un port COM si j'ai bien tout compris. Si t'es sur windows c'est relativement aisé car il me semble qu'une classe est fournie (je t'invite à chercher sur google pour plus de détails). Par contre sous unix c'est légèrement plus compliqué, il faut déjà trouver sur quel device écrire (pas toujours évident) et ensuite jouer avec les paramètres de la structure termios pour réussir à contrôler la vitesse de lecture / écriture.

  3. #3
    Membre averti
    Inscrit en
    Mars 2013
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 15
    Par défaut
    Salut,

    oui je suis sous Windows. J'ai cherché un peu sur le net mais j'ai pas trouvé grand chose.

    J'ai un code C pour l'écriture d'un port COM mais comme là ça serait dans un microcontrôleur je sais pas si ça marcherait.

    Je veux que mon µC puisse envoyer un truc du genre :
    "message : " + variable

  4. #4
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Je pense pas que transmettre directement une variable soit une bonne idée. Tu peux très bien faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char envoi[255] = "";
    int value = 489;
     
    snprintf(envoi, 255, "DATA: %d", value);
    ecrire_sur_port_com(envoi);
    Et après pour reconvertir ta donnée dans l'autre sens (de char* a int ou autre), je t'invite à aller regarder cette page.

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par imperio Voir le message
    Je pense pas que transmettre directement une variable soit une bonne idée.
    Tant qu'on utilise htonl et des type à la taille défini ((u)intXX_t), il n'y a pas de raison que ceci ne marche pas.
    De plus, le fait d'envoyer les données directement en binaire permettra d'être plus rapide et de réduire les flux de données.

    Après, il suffit juste de créer des petites fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    void envoyerOctets( char *, size_t);
     
    #define Envoyer(Objet) envoyerOctets( &(Object), sizeof (Object) )
     
    void EnvoyerInt8_t( uint8_t value)
    {
          Envoyer(value);
    }
     
    void EnvoyerInt16_t (uint16_t value)
    {
            value = htons(value);
            Envoyer(value);
    }
     
    void EnvoyerInt32_t (uint32_t value)
    {
            value = htonl(value);
            Envoyer(value);
    }
    De même pour la réception et le tour est joué, on envoie et on réception des données en binaire sans problèmes.

Discussions similaires

  1. Traduction BASIC en C++
    Par BButch dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 07/06/2010, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo