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]Liaison série avec TP7 dans fenêtre DOS W2000


Sujet :

Turbo Pascal

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6
    Points : 4
    Points
    4
    Par défaut [TP]Liaison série avec TP7 dans fenêtre DOS W2000
    Bonjour,

    Pour développer un programme qui tournera sous DOS, j'utilise une fenêtre DOS sous W2000.

    J'envoie des caractères sur la liaison série (10 octets à la suite) par écriture directe dans le port COM1, mais sur la liaison série, les octets ne sont pas envoyés immédiatement à la suite les uns des autres : 5 octets à la suite, puis une pause (10 à 100 ms), et les 3 autres.
    Je suppose que W2000 fait autre chose pendant ce temps, qui est très variables d'un envoi à l'autre (et qui peut aussi être nul). Sous MS-DOS 6.22, ce problème n'existe pas avec le même programme.
    Pour information, cet arrêt dans la trame série provoque une init de l'appareil que je commande, et le dialogue est impossible.
    Comment faire pour forcer W2000 à envoyer ces 10 octets à la suite ?

    Merci de votre aide !

    Résolu le 16/06 :
    Tout fonctionne parfaitement dans une fenêtre DOS, à condition de charger la SP3 de W2000. Ces problèmes existent au moins avec la SP2 que j'avais installée.
    Merci pour les réponses !

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    D'une manière générale, il vaut mieux éviter tout dialogue direct avec le matériel.
    N'y a-t-il pas moyen de faire dialoguer ton programme avec le driver correspondant ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    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
    Ben moi je pense plutôt qu'il faudra que tu dialogues directement avec ton matériel :p désolé Alcatîz
    Dans ce genre de cas, il vaudrait mieux courcircuiter l'OS pour s'affranchir des contraintes imposées par Billou&Co... Par conséquent il faudra sûrement que tu utilises ton port série de manière optimisée : sûrement en utilisant le FIFO ( avec un FIFO de 10 octets par exemple ). Si tu veux de la doc, http://www.google.fr ou demande moi si tu es trop fainéant :p
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 107
    Points : 279
    Points
    279
    Par défaut
    Je crois me souvenir que Win2k bloque plus ou moins l'accès a certains ports, ou le protège / restreint.

    C'est tout ce que je peux dire ...

    ++Mathieu
    Chaque jour, l'homme crée des choses plus grandes, meilleures et sûres, et chaque jour, la nature crée des idiots plus performants. Pour l'instant, je pense que la nature gagne.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses, et voici quelques compléments d'informations :

    Une fois développé, le programme tournera sur un PC avec DOS6 uniquement, par contre pour le développement j'utilise mon PC de travail qui est sous W2000, et je souhaite faire tous les essais sur ce dernier.

    Je dialogue directement avec le circuit du port série (par des instructions Port), pour l'initialiser, programmer les interruptions à la réception de caractères. Pour l'émisson d'une trame, j'écrit directement dans le circuit par Port[$3F8]=Car; pour COM1 par exemple. Je ne vois pas comment envoyer les caractères plus rapidement.
    Lorsque je charge la FIFO avec 10 octets, comme elle est gérée directement par le circuit d'émission, je ne comprend pas que ce circuit n'envoie pas directement les 10 octets. Je suppose que W2000 émule le circuit, et que les instructions Port[$3F8] sont interrompues, d'ou je n'arrive pas à charger la FIFO en une seule fois (en principe elle accepte au moins 16 octets). Peut-on avoir une action sur W2000 à ce niveau là ?
    Un essai avec la priorité maximale de la fenêtre DOS (priorité en Temps Réel) donne les mêmes résultats.
    Je ne connais pas de driver à utiliser pour les ports série de base, et les essais que j'ai fait en utilisant les interruptions du BIOS ou du DOS donnent les même résultats.

    Une idée pour arriver à sortir de ce problème ?
    Merci pour votre aide !

  6. #6
    Inactif
    Inscrit en
    Avril 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Met une partition DOS et un multi-boot sur ton ordi :

    Sérieusement, si tu veux que ça fonctionne, il va falloir que tu teste en dos !!!
    Je sais que je ne sais rien...... Mais ça change tous les jours....
    Roi du "REPOST dans les dents" !
    Pensez au tag [Résolu] : cliquez sur le lien en bas de page

  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
    Comme l'a dit Denis69, il vaudrait mieux que tu testes tout sous DOS 6...
    En ce qui concernent les interruptions du BIOS ou du DOS, il vaut mieux les éviter car elles sont pas très efficaces... Le plus simple est de gérer le port soit même ( ça se fait très simplement en assembleur :p )
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 107
    Points : 279
    Points
    279
    Par défaut
    C'est la seul solution ...
    Mais le problème pour faire tes test, tu risque d'avoir des problèmes ...
    essaye de trouver un patch sur microsoft.com, peut-étre que !

    ++ Mathieu
    Chaque jour, l'homme crée des choses plus grandes, meilleures et sûres, et chaque jour, la nature crée des idiots plus performants. Pour l'instant, je pense que la nature gagne.

  9. #9
    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
    A partir du moment où tu utilise un système d'exploitation sécurisé, tu t'expose à des problèmes de ce genre.

    Normalement, tu dois créer une appli W32 pour effectuer des appels vers les ports systèmes.
    Sachant que sous W2k, le Dos est une pure émulation, c'est pas encore gagné...

    Tu parles de priorité temps réel. As-tu dans ce cas tenté de passer en mode "Critical Section", avec l'int 2Fh, fonction 1681h ? Si c'est le cas, je ne vois pas trop quoi faire d'autre que de repasser en Dos pur.

    A+
    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. Réponses: 4
    Dernier message: 28/01/2010, 21h07
  2. Nouvelle form avec bouton dans barre taches
    Par DarkChamallo dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/05/2004, 20h44
  3. Liaison d'une dll Visual C++ dans un programme c++Builder
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/11/2003, 13h49
  4. [VB6] Multiselection avec CTRL dans une msflexgrid
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/04/2003, 10h57
  5. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32

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