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

Langage Delphi Discussion :

aide sur création/appel de fonctions


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 8
    Points
    8
    Par défaut aide sur création/appel de fonctions
    Bonjour,
    J'ai fais un programme ('progdebase') avec lequel je communique avec une carte d'entrées-sorties pci. J'utilise les fonctions de la dll du constructeur pour aller écrire et lire sur le port d'adresse de ma carte. Les fonctions d'écriture et de lecture sont assez lourdes :
    pour envoyer un mot à la carte : pci_do8(56444,mot à envoyer)
    pour lire une valeur sur la carte : pci_di8(56444).
    J'aimerais donc "transformer" pci_di8(56444) en une fonction simple 'entree'
    et pci_do8(56444,mot à envoyer) en sortie(mot à envoyer). Le but serait de développez ça sur une autre unité (que j'ai appelée 'apel').
    J'ai réussi à faire ma fonction sortie(i), mais je ne m'en sors pas avec la fonction d'entrée.
    Pouvez-vous m'aider ?
    Je vous laisse le code du programme principal et ma petite unité apel.
    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
    21
    22
    23
     
    program progdebase;
     
    {$APPTYPE CONSOLE}
     
    uses
    P16R16,windows,apel;
     
    var a,i:integer;
     
    begin
     
    i:=1;
     
    repeat
    sortie(i);
    i:=2*i;
    writeln('valeur entree ',entree);
    sleep(500);
    if i=256 then i:=1;
    until a=1;
     
    end.
    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
    21
    22
    23
     
    unit apel;
     
    interface
     
    uses SysUtils, P16r16, windows;
     
    var wTotalBoard:word;
    entree:integer;
     
    function sortie(w:integer):word;
     
    implementation
     
     
    function sortie(w:integer):word;
    begin
    pci_do8(56444,w);
    end;
     
    begin
    PCI_DriverInit(wTotalBoard);
    end.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Avant de se lancer l'écriture sur le Bus PCI, consulter un tutoriel sur comment créer procédures et fonctions serait judicieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const
     MA_VALEUR_FAVORIE = 56444;
     
    function entree(): word;
    begin
      result:= pci_di8(MA_VALEUR_FAVORIE);
    end;
     
    procedure sortie(w: word);
    begin
      pci_do8(MA_VALEUR_FAVORIE, w);
    end;
    Ensuite, Entree\Sortie, bof, un nommage comme ReadPCI\WritePCI serait beaucoup plus parlant, ... en plus le 56444 ne sort pas de n'importe où ? c'est un handle ? un adresse mémoire ? autant mettre une constante avec un nom permettant de tout de suite comprendre à quoi ça sert !
    le 8 correspond au 8ème port PCI ? à la taille de la lecture 8 bit ???

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 8
    Points
    8
    Par défaut re
    Merci pour ton aide !
    C'est pour un tp d'étudiant, voilà pourquoi je choisis l'appellation entrée/sortie plutôt que readpci/writepci ...
    56444 correspond à l'adresse de communication en décimal (soit DC7C en hexa).
    Enfin le chiffre 8 correspond à la taille de lecture sur 8 bits.
    Le code que tu m'as laissé, est-ce que je peux l'insérer dans une nouvelle unité ?
    J'ai un petit soucis, je veux que les étudiants affichent leur variable 'entree' dans une fenêtre d'affichage, exemple writeln ('la valeur d entrée est ', entree);
    seulement la fonction writeln n'accepte pas des fonctions comme argument.
    Je me trompe ???
    Merci en tout cas pour le coup de main.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    8Bits ??? tu utilise un Word ? Etrange, ça devrait donc être un Byte ou un SmallInt !
    Sinon, bien sur, une nouvelle unité dédiée pour un thème c'est mieux !
    Pour WriteLn, hum, tu parle de la version où l'on peut écrire des mask et ça format derrière ? comme ici ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 8
    Points
    8
    Par défaut
    Ben en fait moi j'utilise la version Delphi 6 . . .
    Je parle juste de la fonction pour afficher quelque chose en console application.
    Apparemment c'est la fonction write.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    Pour coller le résultat d'une fonction dans une chaine : va voir la fonction Format:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WrtieLn( Format('la valeur d''entrée est %d.', [entree]) );
    ou en deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LResultat := entree;
    WriteLn( 'la valeur d''entrée est ' + LResultat + '.' );
    Le '%d' est un token de mise en forme, consulte l'aide Delphi de la routine Format pour plus d'informations, c'est grosso modo la même syntaxe qu'en C.

    *LeGEC*

Discussions similaires

  1. Aide sur création de requete arborescente
    Par in dans le forum Oracle
    Réponses: 3
    Dernier message: 26/01/2007, 14h29
  2. [struts] liste dynamique, aide sur création Form
    Par chouchou93 dans le forum Struts 1
    Réponses: 3
    Dernier message: 01/12/2006, 16h45
  3. Aide sur modification d' une fonction.
    Par superadnan3 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2006, 17h29
  4. aide sur création d'un composant
    Par laetus dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/07/2004, 10h45

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