c++ c memory embedded

c++ - ¿Qué es una mesa de saltos?



memory embedded (7)

Las tablas de salto se utilizan comúnmente (pero no exclusivamente) en máquinas de estado finito para que sean impulsadas por datos.

En lugar de interruptor / caja anidados

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

puede hacer una matriz 2d o punteros a funciones y simplemente llamar a handleEvent[state][event]

¿Puede alguien explicar la mecánica de una mesa de salto y por qué se necesitaría en los sistemas integrados?


Las tablas de salto, más comúnmente conocidas como una tabla de ramas, generalmente son utilizadas solo por 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 más o menos una tarjeta de referencia donde una función o variable, o tal vez la etiqueta, se almacena en la memoria.

Entonces, cuando una función se ejecuta, al finalizar regresa 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


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áticas (como llamadas al sistema o funciones virtuales para una clase), puede crear esta tabla una vez y llamar a las funciones utilizando 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 dependiendo del tipo de tabla utilizada.

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

  1. Los índices son más eficientes en cuanto a la 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 se mantendrá estable y cambiar la función simplemente requiere cambiar el puntero a la función.

Si le cuesta un poco de rendimiento para acceder a la mesa, esto no es peor que cualquier otra llamada de función virtual.


Una tabla de salto, también conocida como tabla de ramificación, es una serie de instrucciones, todas ramificadas incondicionalmente en otro punto del código.

Puede pensar en ellos como una declaración de cambio (o selección) donde se llenan 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 saltará ejecutará la devolución y volverá al lugar donde se invocó myjump.

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

Se usa donde no quiere perder el tiempo jugando con la pila, y quiere guardar espacio de 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 es conocido por una sola variable. Esto es similar a la tabla de vectores en procesadores con controladores de interrupción.

Un uso sería tomar un microcontrolador de $ 0.60 y generar una señal compuesta (TV) para aplicaciones de video. el micro no es potente; de ​​hecho, es apenas lo suficientemente rápido para escribir cada línea de escaneo. Se usaría una tabla de salto para dibujar personajes, porque tomaría demasiado tiempo cargar un mapa de bits de la memoria y usar un ciclo for () para sacar el mapa de bits. En su lugar, hay un salto por separado a la línea de letras y escaneos, y luego 8 o más instrucciones que realmente escriben los datos directamente en el puerto.

-Adán


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

En los sistemas integrados, donde el uso de la memoria es escaso, muchos constructos se benefician mejor si se utiliza una tabla de salto en lugar de más métodos intensivos en memoria (como un if-else-if masivo).


here :

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

Una tabla de ramificación consiste en una lista en serie de instrucciones de bifurcación incondicionales que se bifurca utilizando un desplazamiento creado al multiplicar un índice secuencial por la longitud de la instrucción (el número de bytes en la memoria ocupada por cada instrucción de bifurcación). Utiliza el hecho de que las instrucciones de código de máquina para la bifurcación tienen una longitud fija y pueden ejecutarse de manera extremadamente eficiente por la mayoría del hardware, y es más útil cuando se trata de valores de datos en bruto que pueden convertirse fácilmente a valores de índice secuenciales. Dados esos datos, una tabla de sucursales puede ser extremadamente eficiente; por lo general, consta de los siguientes pasos: opcionalmente validar los datos de entrada para garantizar que sea aceptable; transformando los datos en un desplazamiento en la tabla de ramas, esto generalmente implica multiplicarlo o desplazarlo para tener en cuenta la longitud de la instrucción; y bifurcando a una dirección formada por la base de la tabla y el desplazamiento generado: esto a menudo implica una adición del desplazamiento en el registro del contador del programa.


here resume bastante bien:

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

... El uso de tablas de ramificación y otras codificaciones de datos en bruto fue común en los primeros días de la informática cuando la memoria era costosa, las CPU eran más lentas y la representación de datos compacta 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 de sistemas operativos.

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