Autor Tema: 18f458 bancos de memoria para datos  (Leído 2231 veces)

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

Desconectado velascoluis75

  • PIC10
  • *
  • Mensajes: 15
18f458 bancos de memoria para datos
« en: 18 de Abril de 2006, 07:03:41 »
Hola a todos

Tengo un lío enorme con el manejo de los bancos de memoria

¿Cómo se usan los bancos de memoria del PIC 18f458 cuando se manejan muchas variables, más de las que caben en un banco?

gracias

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: 18f458 bancos de memoria para datos
« Respuesta #1 en: 18 de Abril de 2006, 08:19:54 »
Hola a todos

Tengo un lío enorme con el manejo de los bancos de memoria

¿Cómo se usan los bancos de memoria del PIC 18f458 cuando se manejan muchas variables, más de las que caben en un banco?

gracias

¿Estas programano en ensamblador?

Si es así, es similar a como programas en los 16Fxxx .  Debes seleccionar el RamBank adecuado a la memoria que quieras accesar.  Si la memoria que quieres accesar esta en el RamBank1, deberás situarte en el RamBank1 y así sucesivamente.

Además tienes el primer y último RamBank que no están en ningun banco (son unbanked) y no necesitas seleccionar el RamBank para accesarlas.  Esto es muy cómodo y te aconsejo que en esos bancos (sobre todo el primero ya que el último está repleto de registros propios del micrcontrolador) ubiques las variables que más uses.

Espero haber captado tu pregunta , si necesitas algo mas de ayuda postea algún código o algún pequeño esquema de lo que necesitas hacer y veremos como echarte una mano  :)
- 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 velascoluis75

  • PIC10
  • *
  • Mensajes: 15
Re: 18f458 bancos de memoria para datos
« Respuesta #2 en: 19 de Abril de 2006, 05:47:16 »
Muchas gracias Maunix

Estoy programando en assembler.

¿Cómo sitúo las variables en esos bancos unbanked con un cblock? ¿De cuánto espacio dispongo?


Gracias

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: 18f458 bancos de memoria para datos
« Respuesta #3 en: 19 de Abril de 2006, 08:13:40 »
Muchas gracias Maunix

Estoy programando en assembler.

¿Cómo sitúo las variables en esos bancos unbanked con un cblock? ¿De cuánto espacio dispongo?

Gracias

Puedes usar CBLOCK o el método clásico de las 'equ' para cada variable, eso es si programas en código fijo o en absolute coding.  Si usas relocatable coding o codigo reubicable, lo defines con la directiva res pero ahi ya tienes que comenzar a trabajar con el linker.  Si nunca lo has usado en el manual del ASM explica como hacerlo, pero es bastante breve y escaso de ejemplos.

Aquí te pongo un datasheet que te será de mucha utilidad.  Fijate en la página 48 del PDF (46 del datasheet) , Figura 4-6.  Ahi te muestra gráficamente como es la memoria del 18F458, cual region es unbanked y cual no. 
http://ww1.microchip.com/downloads/en/DeviceDoc/41159d.pdf   

Espero te sirva de ayuda.

Cuando necesitas definir más memoria que la que entra en un banco, sencillamente lo debes hacer en 2 definiciones diferentes teniendo en cuenta al momento de direccionar las mismas que estes apuntando al ram bank adecuado.

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 velascoluis75

  • PIC10
  • *
  • Mensajes: 15
Re: 18f458 bancos de memoria para datos
« Respuesta #4 en: 25 de Abril de 2006, 06:20:57 »
Gracias, Mauricio.

Si he entendido bien puedo definir un bloque de variables unbanked comenzando en 60 hexadecimal. Si no caben en la zona unbanked, pues las defino en otro banco y cuando haga referencia a ellas, indico siempre el banco en que están ¿no?

Con el linker no he trabajado nunca. ¿Qué ventaja tendría?


Luis, Cádiz (España)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: 18f458 bancos de memoria para datos
« Respuesta #5 en: 25 de Abril de 2006, 08:25:44 »
De nada Luis.

Si he entendido bien puedo definir un bloque de variables unbanked comenzando en 60 hexadecimal. Si no caben en la zona unbanked, pues las defino en otro banco y cuando haga referencia a ellas, indico siempre el banco en que están ¿no?
Asi es, tan simple como eso.  Pero porque en 60hexa? las unbanked las puedes comenzar en 0x00 directamente ;) ;)
Y para las banked, igual qeu siempre, indicas el banco en el que están si es que no estás en ese banco en ese momento.  Fijate que las instrucciones del ensamblador te permiten indicar si la referencia al registro está en el banco 'unbanked' o si está en el banco que estás actualmente apuntando.  Entonces nunca necesitas apuntar a las unbanked, esa es la ventaja.

Puedes usar el banco1 y el unbanked al mismo tiempo sin cambiar nada de nada.

Con el linker no he trabajado nunca. ¿Qué ventaja tendría?

La ventaja es la de que tu código puede armarse en forma diferente, en el sentido que tu diseñas subrutinas sin importarte en donde irán ubicadas y luego con el linker indicas en que banco de memoria de programa iran ubicadas.

El inconveniente es que no es tan fácil de hacer o de entender.  En los 18F es algo mucho más simple porque no tienes bancos de memoria de programa, en los 16F no es tan simple porque los bancos de memoria de programa estan siempre ahi y si quieres llamar una subrutina debes saber en que página estaba, por eso mover código de una página a otra (que se hace con solo indicar que dicha subrutina irá ubicada en dicho banco) no es tan obvio a la hora de ejecutar el código. 

A lo que voy es por ejemplo si tienes una subrutina en pagina1, y la mueves a página 2.  El código que llama a esa subrutina no cambia automáticamente, sino que debe saber que se movió el código.  Para eso es muy cómun y cómodo usar los macros pagesel y banksel (para memoria de datos).

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)