Autor Tema: Posición parámetros de las funciones  (Leído 2271 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Posición parámetros de las funciones
« 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
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado JJcorps

  • PIC12
  • **
  • Mensajes: 51
    • Proyectos de JJcorps
Re: Posición parámetros de las funciones
« Respuesta #1 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

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Posición parámetros de las funciones
« Respuesta #2 en: 07 de Mayo de 2006, 12:32:17 »
Gracias por tu ayuda, probaré haber si funciona.

Un saludo.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Posición parámetros de las funciones
« Respuesta #3 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.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Posición parámetros de las funciones
« Respuesta #4 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
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Posición parámetros de las funciones
« Respuesta #5 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.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Posición parámetros de las funciones
« Respuesta #6 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

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Posición parámetros de las funciones
« Respuesta #7 en: 08 de Mayo de 2006, 17:10:31 »
Estan escritan en ensamblador.

Saludos.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Posición parámetros de las funciones
« Respuesta #8 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

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado JJcorps

  • PIC12
  • **
  • Mensajes: 51
    • Proyectos de JJcorps
Re: Posición parámetros de las funciones
« Respuesta #9 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.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Posición parámetros de las funciones
« Respuesta #10 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
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything