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

Turbo Pascal Discussion :

[TP] Gestion des bus PCI en pascal


Sujet :

Turbo Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Points : 10
    Points
    10
    Par défaut [TP] Gestion des bus PCI en pascal
    Bonjour,

    J'ai un programme écrit avec TP7 qui fonctionnait sur d'anciennes machines avec un bus ISA. Je change de machines qui sont maintenant en bus PCI. J'utilise donc de nouvelles cartes d'entrées-sorties pour lesquelles le fabricant me fournit le fichier .lib pour borland C.

    Il me semble difficile de gérer le bus PCI comme avant le bus ISA en utilisant simplement l'instruction Port[add].

    La meilleure solution que j'entrevois pour l'instant est de créer une DLL en C qui appellerait les fonctions fournies dans la lib du constructeur de la carte. Les fonctions ainsi crées seraient à disposition dans TP7 via la directive 'external' (une espèce de transtypage)

    Est-ce que quelqu'un voit une impossibilité dans cette méthode, ou y a-t-il une meilleure idée ?

    Merci à tous

    Etienne

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Bien à priori, si ton système d'exploitation a réservé les ressources nécessaires pour la carte en question ( je veux dire une plage d'entrées-sorties ), il doit être possible de gérer cette carte avec port[]. Il faudra ensuite surveiller les données à envoyer et à recevoir car le protocole de communication entre la carte et le système d'exploitation peut avoir changé.
    Quant à la DLL, il me semble que c'est impossible puisque TP7 tourne en mode réel 16 bits, et que les DLL sont prévues pour fonctionner en mode windows ( ou du moins protégé ) 32 bits.
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour et merci pour la réponse rapide,

    L'OS est MS-DOS et je ne pense pas qu'il permet de réserver de la place mémoire pour les cartes interface. Par contre que se passe t-il au niveau du bios ?
    Pour pouvoir utiliser une DLL, il faut donc que j'utilise BP7 en mode protégé ?
    Dans ce cas quelle version de BC va me permettre de créer une DLL en mode protégé ?

    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    C'est généralement le rôle du driver de réserver les ressources nécessaires pour accéder au périphérique qu'il contrôle. Ainsi, le driver correspondant à la carte PCI doit réserver une plage d'entrées-sorties pour que le système d'exploitation puisse accéder à la carte. Il n'y a à priori aucun problème si l'OS est MS-DOS quand le driver a été développé pour MS-DOS. Quant au BIOS, lui, ne fait pas grand-chose...
    Pour les DLLs, tu peux oublier si ça doit tourner sous DOS, car c'est plutôt compliqué sous Turbo Pascal, et puis ça n'apporte pas grand-chose car les problèmes peuvent souvent être solutionnés autrement qu'avec une DLL. De plus, BP7 est un compilateur pour Windows, et tu ne pourras pas l'utiliser pour DOS.
    Il semble vraiment préférable d'utiliser le tableau port !!
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci, et ok pour les conseils

  6. #6
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Bon...

    Déjà, BP7 n'est pas un compilateur pour Windows Wormful. Enfin pas seulement. Il fait du Dos en mode réel et protégé aussi, et les DLL sont utilisables sont Dos mode protégé avec BP7.

    Plus simplement, il doit être possible de passer ta LIB C en fichier OBJ avec Binobj. Je ne sais pas s'il ne faut pas auparavant faire deux trois trucs avec le compilateur C. A toi de voir.

    Ensuite, une fois que tu as un ficchier OBJ, tu peux le lier à ton code Pascal avec l'instruction {$L FICHIER.OBJ}, et en écrivant le prototype de toutes tes fonctions et procédures suivies de la directive external.

    Attention toutefois : il me semble nécessaire que la lib C utilise une convention d'appel de type Pascal, car dans le cas contraire, tu ne vas pas réussir à la faire fonctionner comme il faut, à mon avis en tout cas.


    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  7. #7
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Pourquoi ne pas utiliser le tableau port ?? C'est quand même beaucoup plus simple que d'utiliser un fichier .obj compilé en C !!
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  8. #8
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Si un fichier LIB a été fourni avec le matériel, ce n'est sûrement pas pour décorer... Il doit y avoir des subtilités avec la carte PCI que l'utilisateur n'est peut-être pas sensé connaître.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Points : 10
    Points
    10
    Par défaut J'ai trouvé une solution
    Bonjour à tous,

    Merci pour vos conseils. Je n'ai pas trouvé de solution en utilisant des DLL. Je vais quand même essayer la solution de hdd34 pour utiliser un fichier obj.

    Depuis ma demande j'ai pu obtenir de la part du fabricant de la carte, les sources du fichier .lib. Il y a effectivement des informations à connaitre pour avoir accès aux registres du driver PCI. En lisant la datasheet du driver, on s'appercoit que la simple utilisation du 'port[]' peut suffire en connaissant les adresses de base allouées par l'interface.

    En passant je me suis heurté au problème de compiler des instructions 32 bits avec le compilateur de TP7. C'est possible en ajoutant une constante devant l'instruction.

    Voilà, en conclusion j'ai résolu mon pb sans utiliser de DLL, mais je vais quand même essayer en utilisant un .OBJ

    A bientôt

  10. #10
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Si tu utilises un fichier .obj, il faudra que tu connaisses les procédures et fonctions contenues dans ce fichier .obj, et que tu puisses les appeler convenablement !!
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  11. #11
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Généralement, quand on te donne une librairie pré-compilée, on t'indique quelles sont les procédures et fonctions accessibles, sinon, ta lib, tu peux te la carrer où je pense...

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  12. #12
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    C'est exactement ça !! Si tu ne sait pas quoi appeler ça servira à rien d'avoir un fichier .lib...
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  13. #13
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Euh... la remarque, c'était pour toi Wormful

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

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

Discussions similaires

  1. Concomitance des bus ISA et PCI
    Par Hibou57 dans le forum Composants
    Réponses: 9
    Dernier message: 24/11/2007, 17h19
  2. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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