Autor Tema: ¿como se usa el branch?  (Leído 2743 veces)

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

Desconectado Picoffon

  • PIC10
  • *
  • Mensajes: 19
¿como se usa el branch?
« en: 04 de Febrero de 2005, 05:48:00 »

hola a todos,

estoy haciendo un programa, y creo que excedo el tamaño del código para almacenar en la memoria del PIC. Se que con el comando "Branch" puedo solucionarlo, pero simplemente con la ayuda del manual de Picbasic Pro, no se como debo utilizarlo. A ver si hay alguien que me pueda explicar más o menos como se utiliza, o simplemente decirme donde puedo encontrar algún ejemplo sobre esto.

Gracias.

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: ¿como se usa el branch?
« Respuesta #1 en: 07 de Febrero de 2005, 21:58:00 »
Que onda picoffon,
Cual es el problema en si que te marca ...??? si no cabe en la memoria del pic que usas, la unica solucion es usar un pic con mas memoria,
Expon tu problema y trataremos de ayudarte.
EL comando branch funciona como un goto condicionado  para brincar de distintas locaciones de forma indexada.
Ejemplo:
||||||||||||| con GOTO condicionado:
        IF VAR1 = 0 THEN GOTO Lab_0    " VAR1 =0: goto  label "Lab_0"
   IF VAR1 = 1 THEN GOTO Lab_1    " VAR1 =1: goto  label "Lab_1"
   IF VAR1 = 2 THEN GOTO Lab_2    " VAR1 =2: goto  label "Lab_2"
 
|||||||||||||| usando BRANCH:

 
   BRANCH VAR1, [Lab_0 , Lab_1, Lab_2]

El comando Branch es para dispositivos que solo tienen una pagina de memoria (0-2047), si vas a usar dispositivos con una capacidad mayor(mas paginas de memorias), vas a tener problemas de cruse de paginas de memoria(como al usar goto), para estos dispositivos es mejor usar el BranchL .

Salu2 pana

Desconectado Picoffon

  • PIC10
  • *
  • Mensajes: 19
RE: ¿como se usa el branch?
« Respuesta #2 en: 08 de Febrero de 2005, 05:18:00 »
Hola Lager,

Verás, en principio no me sale ningún error que me haga ver que he sobrepasado el límite de memoria. Pero, leyendo por ahi, me he encontrado con que para códigos demasiado largos se puede tener el problema de falta de memoria.
En mi caso estoy utilizando un pic 16f876, y por ahora he superado las 300 líneas de código. Parece ser que no necesito el branch.

Por otro lado si que me sale un warning cuando compilo mi programa que me dice lo siguiente:
- warn ... : [102] code crosses boundary @800h

¿qué quiere decir? ¿Tiene algo que ver con el tema del que hablamos o es algo sin importancia?. El caso es que siempre sale el warning en la misma linea, haya lo que haya en ésta, lo cual me tiene un poco intrigado.

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: ¿como se usa el branch?
« Respuesta #3 en: 08 de Febrero de 2005, 11:15:00 »
Que onda Picoffon,
Ese warning es algo comun en dispositivos con varias paginas de memoria, y es basicamente lo que te informa: que has cruzado la pagina en la direcciion 800. Si no estas experimentando problemas en tu codigo al hechar a andar tu proyecto, no tienes de que preocuparte. Es importante la estructuracion que manejes en tu codigo para que no tengas problemas de rutinas fuera de paginas de memoria. Los problemas comunes pueden ser que no entre una rutina al llamarla con goto, o una rutina demasiado larga no selleve a cabo completamente o de forma adecuada, y es debido a este detalle. La forma adecuada de estructurar tu codigo es siempre poniendo AL PRINCIPIO las rutinas que llames con goto o CALL, para que el compilador las organice y no te marque ese  warning o simplemente no tengas problemas a la hora de hacer funcionar tu proyecto. Las variables que declares (byte,word,bit..) declaralas de orden mayor a menor, es decir primero las de tipo WORD, luego las de tipo BYTE y luego las de tipo  BIT, para que si son muchas  las variables que emplees, se acomoden y por ejemplo si una variable WORD esta cruzando de una pagina a otra, el byte alto no quede en una pagina y el byte bajo en otra.Habria que darle una revizada al codigo. Otra seria estructurar partes de rutinas llamadas con goto o branch con un ORG X .... para que empiezen exatamente en posiciones completas de paginas de memoria y evitar el cruse.... OJO: que si estas usando muchas rutinas con goto entre paginas debes de usar mejor el branchl .
En proton casi no existe este problema ya que tiene un algoritmo que hace la ubicacion de cada banco o pagina de memoria en donde se encuentre dicho codigo, mas en pbpro no se decirte si ese warning lo tome como lo indica como warning o de plano como error.
Las veces que compile en pbpro y me aparecia esta indicacion como Warning, lo tomava solamente como advertencia, no se si aparesca o te diga en que linea ... es donde cruza la pagina.. con esta info podrias remediar este warning tambien.
cheka la linea 102 que es la que te marca. y ubica lo que empieze desde ahi en la pagina siguiente con org , en fin es cosa de revizar el codigo, pero la mayoria de las veces no es necesario hacer nada pana, si llegases a tener problemas de funcionamiento entonces si hay que revizar el codigo y corregir ese warning.

Salu2 pana

Desconectado Picoffon

  • PIC10
  • *
  • Mensajes: 19
RE: ¿como se usa el branch?
« Respuesta #4 en: 09 de Febrero de 2005, 05:08:00 »
Muchas gracias por tu extensa respuesta, probaré primero el programa sin hacerle caso al warning, y si no va seguiré tus consejos y lo estructuraré de otra forma.

Por cierto, el comando org de que programa es, porque en Picbasic no está.


 

anything