Autor Tema: Ubicar programa a partir de una direccion determinada  (Leído 1991 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dopoulo

  • PIC10
  • *
  • Mensajes: 24
Ubicar programa a partir de una direccion determinada
« en: 13 de Febrero de 2006, 10:10:00 »
Estoy intentando hacer un programa cargador para un PIC18F452 que lea los programas de una tarjeta MMC/SD.

El cargador irá en el ultimo KB de la memoria de programa aproximadamente. Estoy utilizando el compilador de Hi-Tech.

Mi duda consiste en como colocar el programa a partir de esa posicion.
En las opciones del compilador viene una opción que consiste en especificar un offset en la memoria ROM, he probado esto pero lo que hace es mover el programa completo hacia ese offset, con lo cual ahora en la direccion 0 de la memoria no esta el salto al comienzo del programa.
Lo que yo necesito es ubicar el programa a partir de la direccion que yo quiera, y que en la direccion 0x0000 de la memora haya un "goto" al comienzo de mi programa.

A ver quien pueda ayudarme. Gracias

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Ubicar programa a partir de una direccion determinada
« Respuesta #1 en: 13 de Febrero de 2006, 10:30:00 »
La directiva "ORG" suele ser común para compiladores y ensambladores.Con ella puedes reservar posiciones de memoria y rangos completos,evitando que estas posiciones sean ocupadas.Búscala en la ayuda de tu compilador que seguramente vendrá algo.Ya nos cuentas.
Suerte

Desconectado grouchy

  • PIC10
  • *
  • Mensajes: 39
RE: Ubicar programa a partir de una direccion determinada
« Respuesta #2 en: 14 de Febrero de 2006, 00:20:00 »
Con el compilador CCS lo que puedes hacer es lo siguiente:

#org 0x00,0x04
      #asm
           goto 0x1000
      #endasm
....
...
....
...
//                
//#org inicio_del programa, fin_del programa
#org 0x1000,0x13FF    
void main()
{
.
.
.
}

¿Estas ocupando interrupciones?

Desconectado dopoulo

  • PIC10
  • *
  • Mensajes: 24
RE: Ubicar programa a partir de una direccion determinada
« Respuesta #3 en: 14 de Febrero de 2006, 12:44:00 »
Gracias a los dos.
Parece que he solucionado algo
Incluyendo esto: creo una "seccion del programa" en la direccion 0 que realiza un salto a BOOT_START (direccion donde comienza mi cargador)

#asm
   psect redirect,abs   
   goto BOOT_START
#endasm

Pero ahora viene otro problema. Como quiero ubicar mi cargador en la parte alta de la memoria de codigo, en las opciones del linkador viene una opcion para especificar un offset. Pues bien, si el offset que especifico es mayor que 0x4000h cierta parte del codigo me lo coloca a partir de 0x4000h y si el offset indicado es menor, me desplaza el programa bien.
He aqui el resultado cuando especifico un offset de 0x6000 por ejemplo:

Psect Usage Map:

Psect    | Contents                 | Memory Range
---------|--------------------------|--------------------
redirect | User defined psect       | $000000 - $000003
text     | Program and library code | $004000 - $004067
text     | Program and library code | $004068 - $00408B
text     | Program and library code | $00408C - $00409D
powerup  | Power on reset code      | $006000 - $006003
init     | Initialization code      | $006018 - $006031
end_init | Initialization code      | $006032 - $006035
param    | Parameter auto blocks    | $0000FF - $0000FF
bigbss   | Large RAM variables      | $0005FF - $0005FF
rbit     | Bit variables            | $000000 - $000000

Memory Usage Map:

Program ROM   $000000 - $000003  $000004 (       4) bytes
Program ROM   $004000 - $00409D  $00009E (     158) bytes
Program ROM   $006000 - $006003  $000004 (       4) bytes
Program ROM   $006018 - $006035  $00001E (      30) bytes
                                 $0000C4 (     196) bytes total Program ROM

RAM data      $0000FF - $0000FF  $000001 (       1) bytes
RAM data      $0005FF - $0005FF  $000001 (       1) bytes
                                 $000002 (       2) bytes total RAM data    

Near bits     $000000 - $000000  $000001 (       1) bits  total Near bits  


Si os fijais, la seccion de codigo de inicialización queda a partir de 0x6000h pero la seccion de codigo de las librerias quedan a partir de 0x4000h (16384)

¿Sabe alguien que puede estar pasando?.
¿Tiene alguien algo de practica en reubicar programas?
Gracias

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Ubicar programa a partir de una direccion determinada
« Respuesta #4 en: 14 de Febrero de 2006, 13:56:00 »
0x4000 son 16384 palabras,que es exactamente la memoria con la que cuenta el micro.Si tu cargador ocupa 1K como comentas,colocándolo a partir de la posición
0x3C00 te debería valer.
Saludos

Desconectado dopoulo

  • PIC10
  • *
  • Mensajes: 24
RE: Ubicar programa a partir de una direccion determinada
« Respuesta #5 en: 16 de Febrero de 2006, 06:42:00 »
Gracias, pero despues de mucho darle vueltas resulta que era un ¿bug? (¿se dice así?), vamos un fallo del compilador de Hi-Tech que con un parche que viene en su foro se soluciona, vamos para volverme loco.


 

anything