Autor Tema: ¿Usar Locate o dejar las variables sin dirección?  (Leído 1278 veces)

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

Desconectado keb23

  • PIC10
  • *
  • Mensajes: 7
¿Usar Locate o dejar las variables sin dirección?
« en: 23 de Abril de 2009, 07:41:07 »
Hola a todos,

Este es mi primer mensaje en el foro. Estoy probando con PICs tras una experiencia larga con ATMEL (arquitectura 8051) y programación en ASM.

Ahora estoy con el CCS y no sé qué situación es mejor para lo que quiero hacer.

Quiero recoger un bloque de datos por puerto serie y guardarla en una zona de la RAM. En ASM yo diría la zona exacta (con su dirección de memoria concreta), pero en los pics puedo elegir entre decírsela con  #locate o dejarla sin definir.

¿Qué debo de hacer?

¡Muchas gracias!

Editado: Por cierto, el locate se usa así:


#locate identificador = 0x00

¿donde 0x00 es la posición en RAM que usaré?

Y si no quiero "posicionarla" sería ...

#byte identificador = 0x00


Regracias

« Última modificación: 23 de Abril de 2009, 08:16:07 por keb23 »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: ¿Usar Locate o dejar las variables sin dirección?
« Respuesta #1 en: 23 de Abril de 2009, 15:39:39 »
¿De qué tamaño es el arreglo que guardarás?

Lo mejor es que dejes al compilador ubicar el arreglo en ram en vez de ubicarlo tú mismo. La ram en los pics está particionada en bancos y si los arreglos son grandes no podrás accesarlos secuencialmente.

Código: [Seleccionar]
int8 arreglo[64]; //arreglo de 64 bytes
int8 i=0;
...

while(i<64)
arreglo[i++]=getc(); //guardas un byte del puerto serial en la siguiente posición

i=0;

Desconectado keb23

  • PIC10
  • *
  • Mensajes: 7
Re: ¿Usar Locate o dejar las variables sin dirección?
« Respuesta #2 en: 24 de Abril de 2009, 04:09:02 »
Son muchos bytes que me gustarían que estuvieran secuencialmente. Mi micro tiene 96 bytes de palabras de uso general. Y mi idea es desde la posición 30 a la 5F, usarlos para mi programa. Ahora mismo he usado el reserve y luego he hecho un #byte id = 0x%%. Si veo que esto em hace cosas raras ya lo arreglaré. El resto de la memoria la dejaré sin gestionar.


 

anything