Quelqu'un peut-il expliquer les mécanismes d'une table de saut et pourquoi est-il nécessaire dans les systèmes embarqués?
Réponses
Trop de publicités?Un saut de table peut être soit un tableau de pointeurs de fonctions ou un tableau de code machine des instructions de saut. Si vous avez une relativement statique de la série de fonctions (telles que le système des appels ou des fonctions virtuelles pour une classe), alors vous pouvez créer cette table une fois et appeler les fonctions à l'aide d'un simple index dans le tableau. Cela signifierait récupérer le pointeur et l'appel d'une fonction ou de sauter à la machine de code en fonction du type de la table utilisée.
L'avantage de faire cela dans la programmation embarquée sont:
- Les indices sont plus efficace en terme de mémoire que le code machine ou des pointeurs, il y a donc un potentiel d'économies de mémoire dans des environnements restreints.
- Pour une fonction particulière de l'indice reste stable et la modification de la fonction exige simplement de changer le pointeur de fonction.
Si ne vous coûte un tout petit peu de performance pour l'accès à la table, mais ce n'est pas pire que n'importe quel autre appel de fonction virtuelle.
Un saut de table, aussi connu comme une branche de la table, est une série d'instructions, tous sans condition de branchement à un autre point dans le code.
Vous pouvez y penser comme à un switch (ou sélectionner) déclaration où tous les cas sont remplies:
MyJump(int c)
{
switch(state)
{
case 0:
goto func0label;
case 1:
goto func1label;
case 2:
goto func2label;
}
}
Notez qu'il n'y a pas de retour - le code qu'il accède à exécutera le retour, et il va revenir en arrière à l'endroit où myjump a été appelé.
Ceci est utile pour des machines d'état lorsque vous exécutez certaines de code basé sur la variable d'état. Il y a beaucoup, beaucoup d'autres utilisations, mais c'est l'une des principales utilisations.
Il est utilisé si vous ne voulez pas perdre du temps à jongler avec la pile, et que vous voulez économiser de l'espace du code. Il est particulièrement de l'utilisation de gestionnaires d'interruption où la vitesse est extrêmement important, et le périphérique qui a causé l'interruption n'est connu que par une seule variable. Ceci est similaire à la table vectorielle dans les processeurs avec des contrôleurs d'interruption.
Une utilisation serait de prendre un 0,60 $par microcontrôleur et de la génération d'un composite (TV) de signal pour les applications vidéo. le micro n'est pas assez puissant - en fait, c'est à peine assez rapide pour écrire chaque ligne de balayage. Un saut de table peut être utilisé pour dessiner des personnages, parce que cela prendrait trop de temps à charger une image à partir de la mémoire, et d'utiliser une boucle for() pour pousser le bitmap hors. Au lieu de cela il est possible de sauter à la lettre et de la ligne de balayage, puis de 8 instructions qui fait écrire les données directement sur le port.
Wikipédia résume assez bien:
En programmation informatique, une branche tableau (parfois connu comme un saut table) est un terme utilisé pour décrire un méthode efficace de transfert de programme de contrôle (ramification) à l'autre le cadre d'un programme (ou d'un autre les programmes qui ont été dynamiquement chargé) à l'aide d'un tableau de branche les instructions. La direction de la table la construction est couramment utilisée lors de l' la programmation en langage d'assemblage, mais peut également être généré par un compilateur.
... L'utilisation de tables de branchement et d'autres crus le codage des données a été commune au début jours de l'informatique, quand la mémoire a été cher, les Processeurs ont été plus lente et compact et de représentation des données efficace choix de solutions de rechange ont été important. De nos jours, ils sont généralement utilisé dans la programmation embarquée et développement du système d'exploitation.
En d'autres termes, il est utile de construire à utiliser lorsque votre système est extrêmement mémoire et/ou CPU limited, comme c'est souvent le cas dans une plate-forme intégrée.
En programmation informatique, une branche tableau (parfois connu comme un saut table) est un terme utilisé pour décrire un méthode efficace de transfert de programme de contrôle (ramification) à l'autre le cadre d'un programme (ou d'un autre les programmes qui ont été dynamiquement chargé) à l'aide d'un tableau de branche les instructions. La direction de la table la construction est couramment utilisée lors de l' la programmation en langage d'assemblage, mais peut également être généré par un compilateur.
Une succursale de table se compose d'une série liste des inconditionnels de la branche les instructions qui est ramifié en l'aide d'un décalage créé par multipliant un indice séquentiel par l'instruction longueur (le nombre d'octets dans la mémoire occupé par chaque direction de l'instruction). Il utilise le fait que la machine instructions de code pour la ramification ont un longueur fixe et peut être exécuté de manière extrêmement efficace par la plupart des matériel, et qui est le plus utile lors de la traiter avec des valeurs de données brutes qui peuvent être facilement converties en séquentiel valeurs de l'indice. Compte tenu de ces données, un direction de la table peut être extrêmement efficace; il se compose généralement de la étapes suivantes: éventuellement la validation les données d'entrée pour s'assurer qu'il est acceptable; en transformant les données en un décalage dans la direction de la table, ce implique généralement la multiplication ou de la déplacement de prendre en compte la l'instruction de la longueur; et la ramification de une adresse composée de la base de la le tableau et le générés décalage: ce implique souvent une addition de la décalage sur le compteur de programme vous inscrire.
Un saut de table est décrite ici, mais brièvement, c'est un tableau d'adresses de la CPU doit sauter pour fonction de certaines conditions. Comme un exemple, un C instruction switch est souvent mis en œuvre comme un saut de table où chaque saut entrée d'aller à un particulier de "l'affaire" de l'étiquette.
Dans les systèmes embarqués, où l'utilisation de la mémoire est à une prime, de nombreuses constructions sont mieux servis par l'aide d'un saut de la table au lieu de plus de mémoire intensive des méthodes (comme une énorme si-sinon-si).