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 :

interruption


Sujet :

C

  1. #1
    Membre confirmé Avatar de scorbo
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 176
    Par défaut interruption
    Salut,

    J'arrive pas à compiler un prog gérant les interruptions, en fait le compilateur n'aime pas cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void interrupt (*old)();
    j'ai comme : syntax error : missing ')' before '*'

    alors que c'est le genre de déclaration qu'on trouve partout.

    J'ai regardé si je trouvais de l'aide sur le tutoriel ou sur des forums, mais j'ai rien trouvé et là je comprend vraiment pas.

    Merci

    @+

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: interruption
    Citation Envoyé par scorbo
    J'arrive pas à compiler un prog gérant les interruptions, en fait le compilateur n'aime pas cette ligne:
    Je ne suis pas surpris. Le langage C ne gère pas les interruptions (du moins pas celles auquelles tu penses).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void interrupt (*old)();
    j'ai comme : syntax error : missing ')' before '*'

    alors que c'est le genre de déclaration qu'on trouve partout.
    C'est pourtant simple. Le mot clé 'interrupt' n'est pas défini par le langage C.

    Il se peut que ton compilateur ait eu une extension 'interrupt' qui permettait (sous MS-DOS, par exemple) de créer des fonctions d'interruptions matérielles ou logicielles, et même de les installer (Les compilateurs Borland pour MS-DOS avaient getvect(), setvect(), par exemple), mais si tu as changer de compilateur ou simplement de cible (Windows au lieu de MS-DOS), ce genre de facilité risque d'avoir disparu.

    En effet, sur les sytèmes modernes (NT, Linux etc.), un programme utilisateur n'a absolument pas le droit d'installer un driver d'interruption directement. Il faut écrire un driver qui est fait pour ça.

    Donc tu dois préciser le système ciblé, le compilateur, et on verra si une réponse est possible.

  3. #3
    Membre confirmé Avatar de scorbo
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 176
    Par défaut
    ok, merci pour cette info, j'en savais rien.

    Là où c'est plus gênant c'est que c'est le code qu'on nous a donné en cours ! Mais bon.

    Le but étant de faire un programme en C-ANSI afin qu'il soit utilisable sous n'importe quelle plate-forme (tout windows et linux aussi quant à faire).

    Je dois récupérer des données arrivant sur le port parallèle en gérant les interruptions. Pour ce qui est du compilateur, étant donné que j'utilise la norme ANSI, ils devraient tous fonctionnés.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par scorbo
    Là où c'est plus gênant c'est que c'est le code qu'on nous a donné en cours ! Mais bon.
    Les écoles sont malheureusement pleines de soi disants 'profs...'
    Le but étant de faire un programme en C-ANSI afin qu'il soit utilisable sous n'importe quelle plate-forme (tout windows et linux aussi quant à faire).
    Alors là, je t'arrête tous de suite. Non seulement les interruptions ne sont pas gérables en C-ANSI, mais en plus, ni Windows NT, ni Linux ne te laisseront bricoler leurs interruptions (pas la peine de contourner par l'assembleur!)
    Je dois récupérer des données arrivant sur le port parallèle en gérant les interruptions. Pour ce qui est du compilateur, étant donné que j'utilise la norme ANSI, ils devraient tous fonctionner.
    Tu n'as pas l'air de comprendre que précisément, tu n'utilises pas la norme ANSI, mais une extension. Il suffit d'un écart pour que l'ensemble du programme ne soit pas standard.

    Si ton prof t'a vraiment demandé de faire ça, il est tombé sur la tête. J'aimerais bien voir l'énoncé exact du projet.

  5. #5
    Membre confirmé Avatar de scorbo
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 176
    Par défaut
    ok, voilà qui a le mérite d'être clair, merci.

    En fait, je n'ai pas de sujet précis. Je sais simplement (pour l'instant) que je dois récupérer des données sur le port et donc le plus logique est d'utiliser les interruptions (tout dépend de l'application bien sûr et des traitements qui sont à effectuer).

    En tout cas, merci je sais à quoi m'en tenir pour la prog de l'application.
    Et effectivement je viens de regarder, les fonctions getvect et setvect ne sont pas dans la norme ansi. Je verrai bien comment gérer ça, si ça se trouve je n'aurai pas besoin des interruptions.

    Mais sinon, par curiosité, comment fait-on alors pour les gérer en C, faut passer par l'assembleur ?

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par scorbo
    ok, voilà qui a le mérite d'être clair, merci.

    En fait, je n'ai pas de sujet précis. Je sais simplement (pour l'instant) que je dois récupérer des données sur le port et donc le plus logique est d'utiliser les interruptions (tout dépend de l'application bien sûr et des traitements qui sont à effectuer).
    Il est possible qu'en interne ce soit fait comme ça, mais pas question de gérer ça directement à partir d'un application sur un système comme Windows NT ou Linux. Les bidouilles à la MS-DOS/Windows, c'est fini (et ça n'aurait jamais dû existé).
    En tout cas, merci je sais à quoi m'en tenir pour la prog de l'application.
    Et effectivement je viens de regarder, les fonctions getvect et setvect ne sont pas dans la norme ansi. Je verrai bien comment gérer ça, si ça se trouve je n'aurai pas besoin des interruptions.

    Mais sinon, par curiosité, comment fait-on alors pour les gérer en C, faut passer par l'assembleur ?
    La question n'est pas là. Le C n'est qu'un outil, et il n'est pas forcément adapté à la résolution de tel ou tel problème. Tu penses 'réalisation' (phase 3) au lieu de penser 'conception' (phase 2).

    Rappel :

    Cycle de vie d'un projet :
    1. Spécification (Quoi)
    2. Conception (Comment, découpage)
    3. Réalisation (Codage / tests unitaires)
    4. Intégration (Assemblage les morceaux, mise au point)
    5. Validation (Test de conformité)


    Tu dois raisonner de façon plus large, décrire ton problème et utiliser l'outil adapté à sa résolution dans un contexte donné.

    Dans un système moderne et protégé comme Unix, Linux, Windows NT, Mac OS, PSOS, VRTX etc, ce genre de 'détail' n'est pas à la porté du programmeur d'application.

    Le système offre généralement des fonctions de gestion uniformes (API) pour gérer les périphériques, et c'est lui qui intègre les extensions nécessaires pour gerer les accès physiques (registres, mémoire) et temps réel (interruptions) sour la forme de composants logiciels d'extension appelés 'drivers'.

    L'écriture d'un driver est un métier bien différent de celui de programmeur d'application, puis qu'il doit tenir compte d'un coté des spécificité du matériel et de la machine, et de l'autre coté de la SPI (System Programming Interface) qui permet au driver de se 'brancher' d'une façon fiable à tel ou tel système en respectant les protocoles en vigueur. L'outil utilisé est probablement du C avec des extensions ou de l'assembleur 'inline' pour les cas tordus.

    Petit rappel de l'architecture utilisée sur les systèmes modernes (à une vache près).
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
           ------------
          ------------ |
         ------------ |
        |Application |
         ------------
               ^
               |
               v
         ------------
        |    API     |
         ------------
        |            |
        |  Systeme   |
        |            |
         ------------
        |   SPI      |
         ------------
           ^
           |
           v
      ----------------
     |    DRIVER      |
      ----------------
       |    |      ^
       |    |      |
     Write Read Interrupt
       |    |      |
       v    v      |
      ------------------
     |   Périphérique   |
      ------------------

  7. #7
    Membre confirmé Avatar de scorbo
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 176
    Par défaut
    merci pour le petit rappel sur l'organisation du developpement d'une application, c'est texto mes cours et je viens de passer mon exam de GL y'a pas longtemps, lol


    En toute cas, merci pour tout.

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

Discussions similaires

  1. Utiliser l'interruption clavier
    Par Ninkosen dans le forum x86 16-bits
    Réponses: 7
    Dernier message: 28/03/2003, 01h01
  2. interruption clavier
    Par pyrostan dans le forum C
    Réponses: 4
    Dernier message: 13/01/2003, 17h33
  3. interruption materiel port parrallele
    Par pyrostan dans le forum C
    Réponses: 2
    Dernier message: 13/01/2003, 08h22
  4. Tracer une ligne droite sans les interruptions
    Par Stef784ever dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 25/11/2002, 01h22
  5. Bouquins d'Assembleur - interruptions matérielles
    Par Stef784ever dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/11/2002, 21h23

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