TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jfh900 en 06 de Mayo de 2006, 22:49:06

Título: Posición parámetros de las funciones
Publicado por: jfh900 en 06 de Mayo de 2006, 22:49:06
Hola, tengo el siguiente problema y no se como resolverlo, resulta que tengo una libreria de funciones que me generan una señal de valor crítico. Las funciones me funcionan bien, pero cuando creo en el programa mas variables o aumento los arrays, las variables que representan a los parámetros de las funciones, pasan a la página 1 con lo cual al acceder la función a los parámetros, necesita cambiar de página, y en este punto las funciones dejan de funcionar bien. Como podria hecer para que estas variables, esten siempre en la página 0?

Un saludo y gracias anticipadas
Título: Re: Posición parámetros de las funciones
Publicado por: JJcorps en 07 de Mayo de 2006, 05:31:19
Declaralas en la pagina 0, si las funciones tiene como parametros punteros a las variables pasale la direccion de la variable y listo. Ejemplo

Código: [Seleccionar]
void funcion(int *valor);

void main()
{
    int numero;   //Variable en pagina 0, no se como se declara en la pagina 0
    funcion(&numero);
}

Por lo que se de C esto tiene que funcionar pq lo que le pasas es la direccion donde se aloja la variable ya este en la pagina 0 o en la 1.  Si le pasas la variable 'numero' sin el aspersan (&) lo que hace internamente el compilador es una copia de la variable de ahi que los parametros cambien de pagina.
Estudio Ingieneria Informatica asi que si tu compilador de C respeta los standares esto debe de funcinar.

Bueno espero que te sea de ayuda
Título: Re: Posición parámetros de las funciones
Publicado por: jfh900 en 07 de Mayo de 2006, 12:32:17
Gracias por tu ayuda, probaré haber si funciona.

Un saludo.
Título: Re: Posición parámetros de las funciones
Publicado por: jfh900 en 07 de Mayo de 2006, 12:45:13
Lo acabo de probar, y aunque se pase el parámetro por referencia, sigue creando una variable que me aparece en el bloque 1.

Gracias de todas formas y un saludo.
Título: Re: Posición parámetros de las funciones
Publicado por: maunix en 07 de Mayo de 2006, 20:34:21
Lo acabo de probar, y aunque se pase el parámetro por referencia, sigue creando una variable que me aparece en el bloque 1.

Gracias de todas formas y un saludo.

jfh900 realmente es raro lo que comentas, aunque la variable sea de pagina 0,  1, 2 o cualquiera el compilador debiera ser capaz de direccionarla sin problemas.

Tal vez haya alguna opción del compilador activada que no permita hacer bien estas operaciones ya que me parece un error bastante básico como para que sea un bug del compilador.

Saludos
Título: Re: Posición parámetros de las funciones
Publicado por: jfh900 en 07 de Mayo de 2006, 21:15:58
No me he explicado bien. No es un bug, lo que ocurre es que las funciones que he realizado en ensamblador y las he incorporado al "C" son muy críticas en tiempo, si tengo pocas variables declaradas en el programa, las variables que defienen los parámetros me las pone en la página 0, pero si pongo muchas variables son estas (las que definen los parametros, las que me las pasa a la pagina 1), yo lo que busco es si hay alguna forma de decirle al compilador que estas variables las ponga siempre en la pgaina cero. ya que si estan en esta pagina las funciones van bien y en la pagina 1 como necesita mas instrucciones (dos mas por cada variable que accede) las funciones no van bien.

Espero haberme explicado mejor y muchas gracias por contestar.

Un saludo.
Título: Re: Posición parámetros de las funciones
Publicado por: pocher en 08 de Mayo de 2006, 15:30:30
¿Has probado a poner las funciones directamente en ensamblador en tu programa C, entre #asm y #endasm?

Quizá así se mejoren los tiempos.

Un saludo
Título: Re: Posición parámetros de las funciones
Publicado por: jfh900 en 08 de Mayo de 2006, 17:10:31
Estan escritan en ensamblador.

Saludos.
Título: Re: Posición parámetros de las funciones
Publicado por: maunix en 08 de Mayo de 2006, 18:40:21
No me he explicado bien. No es un bug, lo que ocurre es que las funciones que he realizado en ensamblador y las he incorporado al "C" son muy críticas en tiempo, si tengo pocas variables declaradas en el programa, las variables que defienen los parámetros me las pone en la página 0, pero si pongo muchas variables son estas (las que definen los parametros, las que me las pasa a la pagina 1), yo lo que busco es si hay alguna forma de decirle al compilador que estas variables las ponga siempre en la pgaina cero. ya que si estan en esta pagina las funciones van bien y en la pagina 1 como necesita mas instrucciones (dos mas por cada variable que accede) las funciones no van bien.

Espero haberme explicado mejor y muchas gracias por contestar.

Un saludo.

En el C18 si la hay, de hecho las defines en el banco de memoria que prefieras mediante el uso del linker.

En otros compiladores de C, desconozco.  Si usas el C18 me podría fijar como era que se hacía pero para eso debieras tener práctica en el uso del linker y del modo reubicable de codificar ensamblador.

Tan solo dime y te echaré uuna mano.

Saludos

Título: Re: Posición parámetros de las funciones
Publicado por: JJcorps en 09 de Mayo de 2006, 04:19:46
En el compilador Css podria hacer una pequeña 'chapuza'  Usando READ_BANK() y WRITE_BANK() ya que lees o escribes en una posicion de un banco que tu elijas, pero tendrias que modificar tus funciones para que usen estas funciones.
Título: Re: Posición parámetros de las funciones
Publicado por: maunix en 09 de Mayo de 2006, 08:41:47
En el compilador Css podria hacer una pequeña 'chapuza'  Usando READ_BANK() y WRITE_BANK() ya que lees o escribes en una posicion de un banco que tu elijas, pero tendrias que modificar tus funciones para que usen estas funciones.

JJcorps no sería algo peligroso?  Si el compilador asigna esa posicion de memoria a otra variable uno estaría sobreescribiendo el contenido de la misma. 

Por ejemplo, si le decimos al compilador que escriba en la posicion 0x71 del banco 0, y ahí guardó la variable 'contador' por citar solo un ejemplo, sería un desastre desde el punto de vista del software. 

Además las variables pueden cambiar su ubicación con cada vuelta a compilar y dejar cosas 'fijas' por código de esta forma puede ser realmente nocivo para el software ya que se tardaría mucho tiempo en detectar el problema.


Saludos