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

API, COM et SDKs Delphi Discussion :

Interruption en Delphi


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 13
    Par défaut Interruption en Delphi
    Bonjour à tous,

    J'utilise Delphi 2005 et je me demandais, bien que je pense que c'est impossible, s'il était possible de récupérer les interruptions matérielles, plus précisément celle du Timer0 sous Delphi... J'ai trouvé cet article sur ce site :

    http://pascal.developpez.com/cours/artint/

    Mais il ne s'applique pas au Delphi...

    Si quelqu'un connait la méthode en Delphi se serait super...

    Sinon si c'est impossible, j'ai pensé à mettre au point une dll en C qui s'occuperait de détourner l'interruption... Pour ça je me demandais comment faire ça proprement? deux méthode, une premiere qui se présente sous la forme d'une fonction que j'appel depuis mon programme en Delphi et qui ne renvoie sa valeur que lorsqu'une interruption a été générée... (Pour ça, je créée en Delphi un nouveau thread)... Problème, il est évident que dans le but de récupéré les interruptions du timer0 c'est que je veux travailler en temps réel et qu'ici j'ajoute des taches qui ne vont que ralentir le systeme.
    Deuxieme possiblité, que la dll envoie un message au programme en Delphi a chaque interruption, mais là je ne sais pas du tout comment faire...


    Voilà, si quelqu'un sait un peu m'éclaircir se serait génial

    Merci à tous de m'avoir lu

    Benjamin

  2. #2
    Membre chevronné
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Par défaut interuption !
    ouïe ouïe ouïe !

    Quasiment impossible, quoi que...
    Autant que je sache, toutes les interruptions matérièles sont détournées par le système d'exploitation WINDOWS. Il est quasiment impossible d'y accéder directement. Cependant il existe un composant qui fonctionnait sous WIN95 et qui permettait d'accéder aux interruptions système. Mais WIN95 est un système coopératif s'appuyant sur un mode DOS.
    Si quelqu'un pense pouvoir me corriger, il est le bienvenue.

    Les versions NT (NT4, NT5 ou 2000, XP) fonctionnent en mode préemptif.
    C'est pour cela qu'il n'est pas possible d'accéder à une zone particulière de la mémoire ou au BUS de données sans demander l'autorisation au noyau du système. Il existe une DLL (très connue et gratuite) qui permet d'accéder au BUS de données. Pour les interruptions, je ne sais pas.

    Cette DLL "input32.dll" tu la trouveras facilement en faisant une recherche sur le web, avec en plus des exemples d'utilisation.

    Mais attention, jouer à manipuler les interrutions systèmes peuvent tout simplement conduire au plantage de l'ordinateur. J'ai parcouru la faq que tu indiques dans ton message, mais elle s'applique uniquement au mode DOS. L'instruction Interrupt par exemple en Delphi consiste à provoquer l'interruption du programme en mode débbuger.

    Tu as intéret à chercher à résoudre ton problème en utilisant la gestion des événements. Cherche dans les faqs Delphi.

    Bon courrage.

  3. #3
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    De l'avis de Philippe, je pense que tu devrais utiliser l'API Windows GetTickCount en conjonction avec les threads et la classe TEvent. je pense que ça fera l'affaire dans ton cas.

    A tout hasard, tu peux toujours jeter un oeil sur la structure d'une procedure de callback de TimerProc.

    Quelque soit les méthodes que tu utiliseras tu aura du mal à tomber sous une résolution de 10 millisecondes.

    Bon courage.

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Un code intéressant sur le sujet :
    "How to use DPMI calls to service hardware interrupts v.1.0"
    http://www.torry.ru/samples/samples/hard/K-Keyboard.zip

    En fait, lorsque qu'une interrupt N se produit, le processeur se branche à l'adresse T[n] où T est à une adresse fixe de l'espace mémoire. On peut donc détourner l'adresse, mais avant de se rebrancher sur la procédure interceptée, il faut faire attention à :
    - sauvegarder/restaurer toute modification d'un registre,
    - faire un traitement court, juste un minimum d'instructions.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 13
    Par défaut
    Bonsoir,

    Comme je vois je ne suis pas sorti de l'auberge et mon application risque de devoir tourner sous DOS, vu que je dois avoir des bases de temps de l'ordre de 10µs


    Pour inpout32.dll je la connais tres bien, mais le probleme reste de détourner l'interruption


    Pour GetTickCOunt, comme tu le dis je saurais pas descendre en dessous de 10 millisencodes


    Enfin je vais continuer a chercher, merci à tous

Discussions similaires

  1. Comment appeler une interruption en Delphi
    Par moubark dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 06/01/2010, 19h02
  2. Utiliser les interruptions en Assembleur sous Delphi
    Par crazyinf dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 01/04/2009, 20h13
  3. Réponses: 2
    Dernier message: 13/12/2006, 17h40
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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