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 :

Aide pour portage programme de C++ vers Assembleur


Sujet :

C++

  1. #1
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut Aide pour portage programme de C++ vers Assembleur
    Bonjour,

    J'ai acheté un module ROBOARD qui est en fait un mini PC
    a base de 486 avec toutes les interfaces pour piloter des servomoteurs
    et gérer toutes sortes de capteurs.

    Le truc boote sur une cle USB sans problème, je me suis installé un petit
    DOS, et tout est opérationnel

    pour utiliser les sorties de cette carte, j'ai téléchargé les librairies sur le site
    du fabricant (http://www.roboard.com/download_ml.htm)
    Mais voila, tout est écrit en C++ (j'imagine car les fichiers sont des *.cpp)

    Et je ne comprends pas un traitre mot de ce langage !

    Ca fait une semaine que je cherche, et je n'ai toujours pas compris comment
    accéder à ses ports PWM ou entrées analogiques

    Du coup je cherche une âme charitable qui voudrait bien analyser pour moi
    les fichiers sources (185Ko en tout)

    histoire que je puisse transposer tout ça en assembleur (et en Forth bien sur )

    Un petit MP pour se mettre d'accord sur le prix ?

    merci d'avance

    a+ François

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Je vois qu'ils fournissent tout le tsointsoin pour diverses platformes, dont visual studio. Je me demande s'il n'est pas possible de demander à visual studio de générer de l'assembleur. Sinon, tu peux toujours le récupérer en débuggant. Mais ça risque d'être long et fastidieux...

  3. #3
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    Bien sur le cul pour une fois que c'est pas l'inverse !
    Comment peut-on maitrisé l'ASM et pas comprendre le C ou le C++...
    Mais pourquoi ne compile tu pas tes classes puis les "décopiler" en ASM ?
    Les appels vers ta lib ne sont il pas possible en ASM ?
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  4. #4
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Merci à vous deux,

    Bien oui, le C++ (ou même le C) pour moi c'est du Chinois

    Pourtant j'ai passé du temps à essayer de comprendre ces programmes,
    (il me semble que le % veut dire modulo) tous ces signes, ses parenthèses,
    accolades...etc... c'est peut-être plus rapide à taper mais moi ça m'aide pas
    des masses

    J'ai aussi un problème de taille : le programme d'exemple est donné pour une
    application bien précise qui ne me convient pas, et qui en plus fait planter la machine.

    Au hasard, voici un petit bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    RBAPI(void) pwm_SetBaseAddress(unsigned baseaddr) {
        write_sb_reg(SB_PWMSETTING_REG,  //set base address with enabling I/O address decoding
                     ((read_sb_reg(SB_PWMSETTING_REG) & 0xffff0000L) | 0x00800000L) + (unsigned long)(baseaddr & 0xfe00) );
        BaseAddress = baseaddr;
    }
    a+ François

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Ok, à ta décharge, ce n'est pas le morceau de C le plus clair du monde informatique ! :-) Mais ce n'est pas non plus le plus difficile.

    Sache qu'en général, les symboles écrits en majuscules correspondent à des macros définies avec #define, macros qui la plupart du temps servent simplement d'aliases, et qui jouent le rôle d'equates dans ton cas. Je dis « en général » parce que c'est une convention, mais que le compilateur ne l'impose pas.

    Donc, en l'occurrence, « SB_PWMSETTING_REG » doit correspondre à un nombre entier correspondant au numéro du registre concerné, et cette définition doit se trouver soit en tête de programme, soit dans un des fichiers « *.h » inclus également en tête de code.

  6. #6
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Ok, merci Obsidian

    Pour la suite du bout de code, j'ai imaginé que :
    & 0xffff0000L serait un masque AND avec la valeur 32bits FFFF0000h ?
    | 0x00800000L serait un masque OR avec la valeur 32bits 00800000h ?

    Si quelqu'un pouvait me décortiquer tout ça je lui en serais éternellement reconnaissant !
    (enfin, une éternité pas trop longue quand-même ! )

    a+ François

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Ici tu auras un aperçu rapide sur les bases du langage et de ses opérateurs:
    http://www.cplusplus.com/doc
    Et beaucoup de choses d'autres sur ce même site si tu veux aller plus loin.

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par Forthman Voir le message
    Ok, merci Obsidian

    Pour la suite du bout de code, j'ai imaginé que :
    & 0xffff0000L serait un masque AND avec la valeur 32bits FFFF0000h ?
    | 0x00800000L serait un masque OR avec la valeur 32bits 00800000h ?

    Si quelqu'un pouvait me décortiquer tout ça je lui en serais éternellement reconnaissant !
    (enfin, une éternité pas trop longue quand-même ! )

    a+ François
    C'est tout-à-fait ça. « 0x » étant le préfixe C spécifiant l'hexadécimal. On précise également, parce que c'est moins évident, que tout nombre entier débutant par « 0 » en C est considéré comme étant écrit en octal.

  9. #9
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Bonjour,

    Bon, et bien comme on dit, à coeur vaillant rien d'impossible

    Hier je me suis tapé la moitié du tuto "Penser en C++" et même si je suis toujours
    incapable d'aligner une seule ligne de code en C++, j'arrive à comprendre
    ce qui est écrit

    Mais je continu à trouver que ce langage est tordu avec ces symboles
    qui ont des signification pas claires, voire des double sens (comme << )

    Ne m'en veuillez pas, je vais rester au Forth même si personne ne l'utilise
    (de toutes façons je ne suis pas dans l'informatique )

    merci à tous pour m'avoir "poussé" à me cultiver

    a+ François

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par Forthman Voir le message
    Hier je me suis tapé la moitié du tuto "Penser en C++" et même si je suis toujours incapable d'aligner une seule ligne de code en C++, j'arrive à comprendre ce qui est écrit
    C'est-à-dire que passer directement du Forth au C++, ce n'est même plus un grand écart, c'est un vol trans-régional. :-)

    Mais je continue à trouver que ce langage est tordu avec ces symboles
    qui ont des signification pas claires, voire des double sens (comme << )
    Il n'y a pas tant de double-sens. Enfin, pas dans le langage proprement dit. Il y a bien l'étoile « * » qui peut représenter soit un pointeur, soit l'opérateur de multiplication mais, à part ça, le C++ permet si nécessaire de redéfinir les opérateurs comme de simples fonctions. Et ça, c'est formidable, parce que cela permet d'intégrer ses propres objets au milieu de calculs ordinaires. L'exemple-type en matière de programmation orientée objet sont les nombres complexes. Pouvoir les déclarer comme des variables ordinaires, bénéficier de toute l'arithmétique associée comme on le ferait sur papier et pouvoir les combiner avec les types natifs, c'est très confortable !

    Évidemment, pour cela, il faut que le développeur respecte la sémantique de ces opérateurs et ça, rien ne peut l'y contraindre. On voit donc fleurir des nouveautés comme les inserters dont tu parles.

    Il y a deux écoles qui s'affrontent : celle qui pense qu'il est préférable d'apprendre le C avant le C++, et celle qui pense qu'au contraire, s'il faut choisir, alors autant commencer directement par le C++. Bjarne Stroustrup lui-même se range dans la seconde catégorie. Cela est dû au fait que les nouveaux concepts introduits par le C++ par rapport au C impliquent de concevoir les logiciels d'une manière complètement différente. C'est un peu comme passer de deux à trois dimensions, en mathématiques, ou du dessin à la sculpture.

    Par contre, dans ton cas, tu travailles avec un langage très ancien, et tu as probablement une vision très proche du fonctionnement de ta machine, même si tu n'es pas « informaticien ». Il fut un temps où écrire un logiciel et paramétrer sa machine allaient de pair. Je pense donc que tu pourrais très facilement assimiler le C dans un premier temps, et que cela te serait très bénéfique pour migrer ensuite vers le C++ si besoin.

  11. #11
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Bonjour,
    J'ai encore besoin de votre aide

    Dans la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((PWM_ioSection = io_Init()) == -1) return false;
    la valeur de io_Init est elle bien placée dans PWM_ioSection AVANT de faire le test == -1 ?

    merci!!!

    a+ François

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Bonjour

    Citation Envoyé par Forthman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((PWM_ioSection = io_Init()) == -1) return false;
    la valeur de io_Init est elle bien placée dans PWM_ioSection AVANT de faire le teste == -1 ?
    Tout à fait. Une affectation est évaluée comme ayant la valeur de la variable affectée. La comparaison nécessite qu'elle soit évaluée d'abord. La valeur est donc bien stockée avant la comparaison.
    Find me on github

  13. #13
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide pour portage d'un driver windows vers QNX
    Par stef88 dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 22/08/2007, 10h21
  2. [débutant] besoin d'aide pour un programme
    Par acdchornet dans le forum C++
    Réponses: 12
    Dernier message: 26/10/2006, 22h32
  3. Réponses: 13
    Dernier message: 26/10/2006, 21h02
  4. [Free Pascal] Besoin d'aide pour un programme
    Par ricomix dans le forum Free Pascal
    Réponses: 3
    Dernier message: 04/06/2006, 17h01
  5. aide pour un programme a compiler
    Par letombeur dans le forum C++
    Réponses: 8
    Dernier message: 11/01/2006, 21h53

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