Pregunta

¿Alguien puede explicar la mecánica de una mesa de salto y por qué sería necesaria en sistemas integrados?

¿Fue útil?

Solución

Una tabla de salto puede ser una matriz de punteros a funciones o una matriz de instrucciones de salto de código de máquina.Si tiene un conjunto de funciones relativamente estático (como llamadas al sistema o funciones virtuales para una clase), puede crear esta tabla una vez y llamar a las funciones usando un índice simple en la matriz.Esto significaría recuperar el puntero y llamar a una función o saltar al código de máquina según el tipo de tabla utilizada.

Los beneficios de hacer esto en programación integrada son:

  1. Los índices son más eficientes en memoria que el código de máquina o los punteros, por lo que existe la posibilidad de ahorrar memoria en entornos restringidos.
  2. Para cualquier función en particular, el índice permanecerá estable y cambiar la función simplemente requiere cambiar el puntero de la función.

Le cuesta un poco de rendimiento acceder a la tabla, pero esto no es peor que cualquier otra llamada a función virtual.

Otros consejos

Una tabla de salto, también conocida como tabla de bifurcación, es una serie de instrucciones, todas las cuales se bifurcan incondicionalmente a otro punto del código.

Puede considerarlos como una declaración de cambio (o selección) donde se completan todos los casos:

MyJump(int c)
{
   switch(state)
   {
      case 0:
         goto func0label;
      case 1:
         goto func1label;
      case 2:
         goto func2label;
   }
}

Tenga en cuenta que no hay retorno: el código al que salta ejecutará el retorno y volverá al lugar donde se llamó myjump.

Esto es útil para máquinas de estado donde ejecuta cierto código basado en la variable de estado.Hay muchísimos otros usos, pero este es uno de los principales.

Se utiliza cuando no quieres perder el tiempo jugueteando con la pila y quieres ahorrar espacio en el código.Es especialmente útil en manejadores de interrupciones donde la velocidad es extremadamente importante y el periférico que causó la interrupción solo se conoce mediante una única variable.Esto es similar a la tabla de vectores en procesadores con controladores de interrupciones.

Un uso sería tomar un microcontrolador de 0,60 dólares y generar una señal compuesta (TV) para aplicaciones de vídeo.el micro no es potente; de ​​hecho, apenas es lo suficientemente rápido como para escribir cada línea de escaneo.Se usaría una tabla de salto para dibujar caracteres, porque tomaría demasiado tiempo cargar un mapa de bits desde la memoria y usar un bucle for() para sacar el mapa de bits.En su lugar, hay un salto separado a la letra y a la línea de escaneo, y luego unas 8 instrucciones que realmente escriben los datos directamente en el puerto.

-Adán

Se describe una tabla de salto. aquí, pero brevemente, es una serie de direcciones a las que la CPU debe saltar según ciertas condiciones.Como ejemplo, una instrucción de cambio en C a menudo se implementa como una tabla de salto donde cada entrada de salto irá a una etiqueta de "caso" particular.

En los sistemas integrados, donde el uso de la memoria es escaso, muchas construcciones funcionan mejor utilizando una tabla de salto en lugar de métodos que consumen más memoria (como un if-else-if masivo).

Wikipedia lo resume bastante bien:

En la programación de computadoras, una tabla de rama (a veces conocida como tabla de salto) es un término utilizado para describir un método eficiente para transferir el control del programa (ramificación) a otra parte de un programa (o un programa diferente que puede haber sido cargado dinámicamente) usando Una tabla de instrucciones de rama.La construcción de la tabla de rama se usa comúnmente cuando se programan en lenguaje de ensamblaje, pero también puede ser generado por un compilador.

...El uso de tablas de rama y otras codificaciones de datos sin procesar fue común en los primeros días de la computación cuando la memoria era costosa, las CPU eran más lentas y la representación de datos compactos y la elección eficiente de alternativas eran importantes.Hoy en día, se usan comúnmente en la programación integrada y el desarrollo del sistema operativo.

En otras palabras, es una construcción útil para usar cuando su sistema tiene una memoria y/o CPU extremadamente limitada, como suele ser el caso en una plataforma integrada.

De Wikipedia:

En la programación de computadoras, una tabla de rama (a veces conocida como tabla de salto) es un término utilizado para describir un método eficiente para transferir el control del programa (ramificación) a otra parte de un programa (o un programa diferente que puede haber sido cargado dinámicamente) usando Una tabla de instrucciones de rama.La construcción de la tabla de rama se usa comúnmente cuando se programan en lenguaje de ensamblaje, pero también puede ser generado por un compilador.

Una tabla de rama consiste en una lista de serie de instrucciones de rama incondicionales que se ramifica en un compensación creado multiplicando un índice secuencial por la longitud de la instrucción (el número de bytes en la memoria ocupado por cada instrucción de rama).Hace uso del hecho de que las instrucciones del código de la máquina para la ramificación tienen una longitud fija y la mayoría de los hardware pueden ejecutar de manera extremadamente eficiente, y es más útil cuando se trata con valores de datos sin procesar que pueden convertirse fácilmente en valores de índice secuenciales.Dados dichos datos, una tabla de rama puede ser extremadamente eficiente;Por lo general, consiste en los siguientes pasos:Opcionalmente, validando los datos de entrada para asegurarse de que sea aceptable;Transformando los datos en un desplazamiento en la tabla de rama, esto generalmente implica multiplicarlos o cambiarlos para tener en cuenta la longitud de la instrucción;y ramificarse a una dirección compuesta por la base de la tabla y el desplazamiento generado:Esto a menudo implica una adición de la compensación en el registro de contador del programa.

Las tablas de salto, más conocidas como mesas de rama, generalmente las utiliza únicamente la máquina.

El compilador crea una lista de todas las etiquetas en un programa ensamblador y vincula todas las etiquetas a una ubicación de memoria.Una tabla de salto es prácticamente una tarjeta de referencia sobre dónde se almacena en la memoria una función o variable o cualquier etiqueta que pueda ser.

Entonces, cuando se ejecuta una función, al finalizar salta a su ubicación de memoria anterior o salta a la siguiente función, etc.

Y si estás hablando de lo que creo que eres, no solo los necesitas en sistemas integrados sino en cualquier tipo de entorno compilado/interpretado.

Brian Gianforcaro

Las tablas de salto se utilizan comúnmente (pero no exclusivamente) en máquinas de estados finitos para que estén basados ​​en datos.

En lugar de interruptor/caja anidada

  switch (state)
     case A:
       switch (event):
         case e1: ....
         case e2: ....
     case B:
       switch (event):
         case e3: ....
         case e1: ....

puedes hacer una matriz 2d o punteros de función y simplemente llamar handleEvent[state][event]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top