programmation d'interruption sous assembleur - ASM - Programmation
Marsh Posté le 15-03-2005 à 12:19:05
6809, 68000, 80x86 ?
Mode réel , mode protégé ? Sous dos , sous windows, sous linux
Et que sais-je encore
Du détails serait le bienvenu si tu veux l'ombre du début du commencement d'une réponse
Marsh Posté le 15-03-2005 à 12:31:33
Bonjour
Il y a trois types d'interruptions
- les interruptions matérielles qui sont appelées à chaque fois qu'un circuit externe au processeur envoie un signal pour dire qu'il a une transaction à réaliser avec le processeur
- les interruptions logicielles qui sont générés par le processeur suite à une erreur du style division par 0 ou faute de protection mémoire etc...
- les interruptions logicielles réalisées par le programeur pour appeler une routine système placée dans un segment fixe de la mémoire.
Le problème est de savoir
si tu doit générer le code d'une interruption logicielle ou matérielle ?
ou si tu dois appeler un sous-programme système à l'aide d'une instruction assembleur int ?
Il faudrait préciser aussi quel est le processeur, et la finalité du programme.
Il est possible de démarrer un programme par une commande at
genre d'interruption par horloge.
Bref il faut être plus précis dans la demande pour que l'on puisse élaorer une réponse pertinente.
Cordialement
Marsh Posté le 15-03-2005 à 17:39:01
ecxusez moi de ne pas avoir été plus précise, c'est la premiere fois que je vais sur un forum, je débute.
Je travail avec le microprocesseur texas TMS320C31.
Mon sujet, je dois réguler la température d'une diode laser, pour se faire, j'ai une entrée qui me donne la température mesurée, et une sortie qui envoie la bonne température a fournir.
Le truc c'est que mon programme doit regarder la température mesurer qd il se passe une interruption que j'aimerai générer moi meme par une touche de clavier, par exemple, pour pouvoir voir si mon algo marche.
Merci
Marsh Posté le 16-03-2005 à 12:50:36
Bonjour
Je ne connais pas ce processeur cependanr je pense qu'il doit avoir une table des vecteurs d'interuptions.
Si j'ai bien compris l'exposé, lorsqu'il y a une interruption, généré par un timer ou un autre matériel, le gestionnaire de l'interruption charge la température, la stocke éventuellement, la compare avec un seuil qui déclenche un signal vers un pilote de refroidissement. Le but recherché étant à partir du clavier d'envoyer le signal vers le pilote de refroidissement.
Il suffit de capturer l'interruption du clavier en connaissant l'adresse de son gestionnaire d'interuption et remplacer ce pilote par un programme qui génére artificiellement l'interuption ou par un appel direct à la routine du pilote de refroidissement.
Il faut voir la doc du microprocesseur pour connaitre l'emplacement en mémoire de la table des vecteurs d'interruptions et la doc matériel pour connaitre les numéros d'interruption du clavier, du lecteur de température si on veut le modifier, de l'appel au pilote de refroidissement.
J'espère avoir été a peu près clair.
Cordialement
Marsh Posté le 16-03-2005 à 13:09:14
db__ >> manque d'espaces, c'est dur pendant la digestion...
sinon baleine2, tu as déjà un OS sous-jacent, où c'est de la programmation direct ?
Marsh Posté le 17-03-2005 à 16:40:09
désolée, je suis débutante, il faut me traduire ca en francais..."OS sous jacent" et "prog directe"? ainsi que "routine"? il existe un dico francais/langage programmeur? (je ne plaisante pas)
Marsh Posté le 17-03-2005 à 16:50:47
OS sous-jacent: LinuxRT, WinCE, y'a un OS qui tourne déjà sur ton DSP ?
tu dois te plier aux primitives d'un OS ?
ou tu es l'OS ? (firmware, dev niveau noyau, ou rien et le DSP boote direct sur ton code ?)
Marsh Posté le 17-03-2005 à 21:27:29
Il est fort peu probable qu'elle utiliser un (RT)OS.
La doc du chip est ici pour ceux/celles que ça intéresse : http://focus.ti.com/lit/ug/spru031f/spru031f.pdf (pour la gestion des interruptions, cf. 7.6)
L'IVT est 'relocatable' (franglais ?); son adresse est placée dans le registre ITTP (Interrupt-Trap Table Pointer; voir 3.1.9.1. de la doc indiquée plus haut). Donc BEWARE.
Marsh Posté le 18-03-2005 à 10:14:32
complètement aware!!
je me sens vraiment ridicule...je vais essayer de décripter vos message, pis je vous reposerai des questions plus tard.
merci a tous, si vous avez des cours ou de la doc pr m'aider, n'hesitez pas.
bonne journée
Marsh Posté le 03-04-2005 à 17:14:40
Moi ce que je ne comprend pas c'est la différence entre une interruption
définit par le programmeur (que l'on apelle avec INT)
et une fonction (que l'on apelle avec CALL) !
Dans quel cas doit-on utiliser l'un ou l'autre ?
Marsh Posté le 04-04-2005 à 10:59:25
dans le cas de l'archi 80x86, CALL pousse seulement le pointeur d'instruction et saute à l'adresse pointée par l'opérande....
alors que INT pousse les flags en + du pointeur d'instruction et saute à l'adresse contenue dans la table des vecteurs sélectionnée par l'opérande.
CALL c'est pour les sous-routines de ton propre programme.
INT c'est généralement plustôt pour appeller les services de l'OS.
Marsh Posté le 15-03-2005 à 11:02:32
Bonjour a tous,
j'ai un réel problème avec les interruptions, j'ai beau lire 1000 doc, je ne comprends rien, et je ne sais pas comment en implémenter une sous assembleur. Ce qu'il se passe c'est que je dois générer une interruption pour que mon programme débute et je ne sais pas comment le faire. Si qq1 peut m'aider, ce serait super cool!
merci d'avance à l'ame charitable qui voudra bien m'aider
bonne journée