La différence entre le rapport de recherche internationale et de l'Appel de Fonction?
Je veux comprendre la différence entre ISR (Interrupt Service Routine) et appel de Fonction.
Je me sens à la fois l'appel de la fonction et de l'ISR sont les mêmes du point de vue matériel. S'il vous plaît Corrigez-moi si je me trompe.
Tout ce que je pourrais trouver sur rapport de recherche internationale et de l'appel de Fonction se présente comme suit:
ISR:
- Asynchrone événement qui peut se produire à tout moment durant l'exécution de
le programme - Enregistre le PC, des Drapeaux et des registres sur la pile et
désactive toutes les interruptions et des charges à l'adresse de l'ISR - ISR ne peut pas avoir des arguments qui peuvent être transmis
- Ne peut pas renvoyer des valeurs
- Permet les interruptions
- Généralement de petite taille, car ils prennent le temps de quelques autres processus
- Certains de rapport de recherche internationale ont leur propre pile
Fonction:
- Se produit quand il y a un appel de fonction
- Enregistre le PC et les registres sur la pile
- Peut avoir des arguments
- Peut renvoyer des valeurs
- Aucune restriction sur la taille et la durée d'exécution des
Est il y a plus de différence autre que cela ? S'il vous plaît laissez-moi savoir.
J'ai aussi lu sur le fait d'avoir un appel de fonction d'ISR, comment ce lieu. Merci de mettre en évidence sur elle.
OriginalL'auteur Nilesh Agrawal | 2013-07-21
Vous devez vous connecter pour publier un commentaire.
Ils ne sont pas nécessairement les mêmes que vous statet dans le premier point sur les Rapports de recherche internationale: les Interruptions sont asynchrones et donc en quelque sorte "interrompre" le travail du processeur principal(s).
Par exemple, permet de regarder ce MIPS code décorées avec des adresses, ce qui ne permet pas de faire quelque chose d'utile:
Ce code peut être handeled du processeur principal: les opérations arithmétiques (lignes 1, 7) sont effectuées par l'unité arithmétique, l'accès à la mémoire (lignes 2, 4) par le contrôleur de mémoire, et les sauts (lignes 3, 5, 8) sont effectuées par le processeur principal. (L'adresse réelle de
jal
est défini lors de la fixation de l'objet fichier.)C'est pour les appels de fonction. Il est à tout moment déterminé, d'où le code est bon maintenant et le code qui est exécuté au prochain point dans le temps (c'est à dire lorsque le programme compteur est incrémenté: PC+=4).
Maintenant il vient de le point, lorsque vos fonctions à faire quelque chose de compliqué, mais vous voulez que le logiciel à réagir sur une touche. Puis un coprocesseur entre en jeu. Ce coprocesseur attend jusqu'à ce que certains événements (comme une pression de touche sur votre clavier) se produit, puis appelle le gestionnaire d'interruption. C'est un bloc de code situé sur une certaine adresse dans la mémoire.
Pense, le processeur est dans le calcul ci-dessus, mais en attendant, vous souhaitez stocker le nombre de frappes de touche sur l'adresse
keys
. Ensuite, vous écrivez un programme commençant à l'adresse0x80000180
(ce qui est défini comme l'exeption adresse de gestionnaire en MIPS):Maintenant ce qui se passe à une combinaison de touches?
eret
le PC est configuré à l'ordinateur du processeur principal avant l'interruption s'est produiteIci, il ya un interrupteur de l'exécution normale de la gestion des interruptions entre les étapes 2 et 3 et à l'arrière à nouveau de 4 à 5.
Note: j'ai simplifié un grand nombre, mais il doit être clair, comment les interruptions sont différents à partir d'appels de fonction, et la façon dont le matériel a avoir additionall capacités pour la gestion des interruptions.
Si ce n'est que pour le microprocesseur comme 8051 ou sur microcontrôleur 8091 qui n'est pas co-processeur aura des interruptions et des appels de fonction comme même ? Merci de m'aider, je suis vraiment confus
Je ne suis pas expert sur les micro-contrôleurs, mais sur ce site est un bloc-diagramme de la 8051: aninditadhikary.wordpress.com/tag/intel-8051 où vous pouvez voir le "Contrôle d'Interruption", qui est placé à côté de l'uc, semblable à la mips coprocesseur.
Et voici un tutoriel pour 8051 qui explique interrompt: 8052.com/tutint.phtml . Essence: Le PROCESSEUR vérifie après chaque ligne de la "normale" du code, si il y a une exception et, dans l'affirmative, il saute le gestionnaire d'exception.
OriginalL'auteur contradictioned
Donc avoir affirmé qu'ils sont les mêmes, vous allez sur la liste de la façon dont ils sont différents, ce qui peut-être plutôt des réponses à votre question.
Vos quatre premiers points sur les ISRs sont largement et généralement vrai. Les points sur l'activation des interruptions n'est pas nécessairement le cas et c'est une décision de mise en œuvre par le programmeur, et peut être déterminée par l'architecture, et le fait d'être petit est une ligne directrice est pas une obligation - et les "petits" est entièrement subjective".
Les différences ne sont pas tellement à l'égard de la façon dont ils sont codés (si ISR est généralement imposer un certain nombre de restrictions et peut également avoir des privilèges que les fonctions normales ne sont pas), mais plutôt à la façon dont ils sont invoqués et le comportement du processeur.
Une fonction (ou procédure ou de la sous-routine de manière plus générale) doit être explicitement appelé et fait partie du même contexte et l'exécution du thread comme son appelant. Un matériel ISR n'est pas explicitement appelé mais plutôt invoqué par un événement extérieur (externe au processeur core qui est sur puce périphériques peuvent générer des interruptions). Lorsqu'une interruption est appelé le contexte du thread en cours est automatiquement conservé avant la commutation de contexte pour l'ISR. Sur le retour, à l'inverse changement de contexte de la restauration de l'état du processeur avant l'interruption de sorte que l'exécution se poursuit à partir du point d'interruption.
Le mécanisme peut être compliqué par la présence d'un multi-thread du système d'exploitation ou le planificateur de laquelle le rapport de recherche internationale elle-même peut entraîner un fil-commutateur de contexte, de sorte que le retour d'un rapport de recherche internationale un thread différent de l'exécution ou du contexte est sous tension. De tels mécanismes sont gérés par le système d'exploitation dans ce cas.
Il existe un autre type de rapport de recherche internationale a appuyé sur certains processeurs, que d'un interruption logicielle. Une interruption logicielle est utilisé comme un appel de fonction dans le sens où il est explicitement invoqué par l'enseignement, plutôt qu'un événement unique, mais offre une indirection mécanisme par lequel l'appelant n'a pas besoin de connaître l'adresse de l'ISR et, en effet, que l'adresse peut changer. En ce sens, il est un peu différent de l'appel d'une fonction par le biais d'un pointeur, mais parce que c'est un rapport de recherche internationale, il s'exécute dans l'interruption de contexte, pas de l'appelant au contexte, et donc peuvent avoir des restrictions et des privilèges qu'une fonction normale ne fonctionne pas.
Fondamentalement une interruption est en mesure de répondre directement et de façon déterministe à des événements où sinon, vous risquez de sondage ou de test pour un événement puis de la gérer, mais ne pouvait le traiter à la fois que vous choisissez de tester pour elle, plutôt que sur son apparition réelle, qui peut être variable et trop long.
OriginalL'auteur Clifford
La principale différence est que les gestionnaires d'interruption sont (en général), invoquée par le périphérique matériel - un matériel réel signal est généré par le périphérique et le matériel du processeur transfère le contrôle au gestionnaire approprié, sans aucune action par le code en cours d'exécution avant l'interruption. Contrairement aux fonctions, il n'y a pas d'appel - l'exécution est arrachée de l'interruption du code par le processeur.
Sur les OS que le support de multithreading et de processus, la fonction des appels witin le même processus/thread contexte que l'appelant. Une interruption, otoh, que, n'a pas de thread ou processus de contexte - une interruption de réseau résultant d'un fond de téléchargement BitTorrent peut se produire lorsque vous modifiez un document Word, et afin que le gestionnaire est très limité dans ce qu'il peut faire. Il peut charger des données vers/à partir de pré-allouée tampons appartenant au processus/thread à laquelle il est lié, il peut être le signal d'un sémaphore, il peut être en mesure de définir OS événement drapeaux. C'est à ce sujet.
Souvent, une interruption de gestionnaire effectue une interruption de retour directement, afin d'autoriser l'exécution de l'interruption du code de procéder wtihout toute nouvelle ingérence. Sur simple contrôleurs, comme ton 8051, qui sont souvent exécutés code embarqué sans compex OS, c'est la seule disponible. Avec préventive multithread OS, une interruption de gestionnaire a la possibilité de s'acquitter de ses interruption de retour via les codes du système d'exploitation et ainsi de provoquer un planificateur de s'exécuter. Cela permet d'interrompre les gestionnaires à faire des filets qui étaient en attente pour l'interruption prêt, et éventuellement en cours d'exécution, (et donc peut-être d'anticiper le thread qui a été à l'origine interrompue). Cela permet à ces systèmes ont de bonnes performances d'e/S sans aucune interrogation.
L'interruption matérielle sources de mon être périphériques intégrés dans la puce du processeur - réseau des contrôleurs, contrôleurs de disque, l'affichage des contrôleurs, contrôleurs DMA, les contrôleurs USB, intercore-comms contrôleurs, (sur des processeurs à plusieurs cœurs), les minuteries, etc. ou d'interruption de demande de code pin/s sur l'emballage peut être utilisé pour générer une interruption à partir d'un périphérique externe à la source, (peut-être un bouton-poussoir, clavier, clavier ou l'écran tactile de matériel).
OriginalL'auteur Martin James
Les réponses ci-dessus sont à peu près complète...note spéciale pour le logiciel interrompt par Clifford.
Le seul ajout, je voudrais faire, c'est ceci. Le registre contexte stockées sur un appel de fonction est définie par la Procédure de Convention d'Appel pour l'Architecture du PROCESSEUR. Cela signifie généralement que l'appelant enregistre somethings sur la pile et le destinataire de l'appel enregistre certaines choses, et est à peu près un ensemble statique. Exception: IA64 qui a une fenêtre dynamique de registre sauve/restaure.
Sur rapport de recherche internationale, le seul registre contexte stockée est ce qui est destiné à être utilisé dans le rapport de recherche internationale. Si un registre est utilisé, seulement de ce registre est de sauver/restaurer.
Sur la plupart des processeurs, le registre des stockée/restauré dans un appel de fonction est beaucoup plus grand que ceux qui sont stockés/restauré dans un rapport de recherche internationale en raison de la nature statique de la procédure des conventions d'appel.
OriginalL'auteur lsk