Sunteți pe pagina 1din 14

Run-time Model

Calling Conventions
Compiler Managed Resources
Calling Conventions
● Cuando se esta programando en C existen
dos stack diferentes.
● Un stack es el de 31 niveles utilizado por el
microcontrolador para almacenar
direcciones de retorno. Este es controlado
por el registro STKPTR.
● El otro es stack es la memoria ram, es un
stack manejado por software utilizando uno
de los FSRn.
Calling Conventions
● El stack manejado por software no tiene
nada que ver con el stack en hardware de
31 niveles.
● El stack manejado por software es
controlado por el programa. Cuando se
quiere ingresar algo al stack pues su utiliza
cualquiera de los registros asociados con
los FSRn.
● El stack crece desde direcciones bajas a
direcciones altas.
Calling Conventions
● Este stack manejado por software es el
que utiliza MPLAB C18 para colocar los
argumentos de las funciones en C que se
van a llamar, así como las variables locales
a la función (variables tipo auto)
Calling Conventions
Calling Conventions
● En el stack manejado por software el
registro FSR1 funciona como el stack
pointer, apuntando siempre a la siguiente
posición disponible en el stack
● MPLAB C18 utiliza FSR2 como el frame
pointer. Este registro provee acceso a las
variables locales y argumentos de manera
rápida
Calling Conventions
● En MPLAB C18, cuando una función es
llamada los argumentos o parámetros que
necesita esa función son insertados en el
stack en un orden de derecha a izquierda.
● El argumento más a la izquierda siempre
está en el tope del stack al momento de
entrar en la función.
Calling Conventions
● Ejemplo de un stack antes de llamar a una
función
Calling Conventions
● En el modo no-extendido (non-extended), el
Frame Pointer (FSR2) apunta a la posición en el
stack que separa los argumentos de la función
pasados en el stack de las varibales locales
alojadas en el stack.
● Los argumentos están ubicados a un offset
negativo al frame pointer, es decir en posiciones
de memoria por debajo del frame pointer.
● Las variables locales están a un offset positivo al
Frame Pointer, es decir en posiciones por arriba
del Frame Pointer.
Calling Conventions
● Stack después de llamar a una función
Calling Conventions
● Al entrar a una función, la función llamada
guarda en el stack el valor del Frame
Pointer de la función que la llamó, es decir
guarda el valor del FSR2 en el stack.
● Luego copia el valor del Stack Pointer
(FSR1) al Frame Pointer (FSR2), es decir
que ahora el Stack Pointer y el Frame
Pointer están apuntando al mismo sitio
Calling Conventions
● Lo que esta debajo del Frame Pointer y el
Stack Pointer son los argumentos de la
función y el valor del Frame Pointer que
poseía la función anterior antes de entrar a
la función que se está ejecutando.
● Cuando se salva el Frame Pointer de la
función que llamó se dice que se está
salvando el contexto de la función que
llamó.
Calling Conventions
● Luego de que el Frame Pointer es actualizado al
de la función que fue llamada, se reserva espacio
en el stack para las variables locales.
● Este espacio se consigue sumando al Stack
Pointer (FSR1) el total de bytes que suman todas
las variables locales.
● Una vez se mueve el Stack Pointer todo está listo
y cualquier referencia a los argumentos o
variables locales se hace en función de un offset
al Frame Pointer (FSR2)
Calling Conventions
● El lugar donde se retorna un valor depende
del tamaño del resultado.

S-ar putea să vă placă și