Autor Tema: duda sublw  (Leído 8526 veces)

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

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: duda sublw
« Respuesta #15 en: 29 de Marzo de 2008, 22:23:43 »
Por la macro entiendo que llamas desde una rutina generada anteriormente y citada como por ejemplo

Include <ldc8bit.inc>

Porque si es así, tienes toda la razón. Yo no utilizo macros, los copio y pego en el programa para poder manejarlos mejor a la hora de ubicarlos en el lugar que yo deseo, ya que si se ponen al final del programa, talvez no funcionan. Es por las tablas y una tarea pendiente que deberá solucionar MICROCHIP, con el PC.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: duda sublw
« Respuesta #16 en: 30 de Marzo de 2008, 09:56:02 »
hola
te cuento como experiencia personal, que cuando comence a usar mplab me sucedieron cosas parecidas como que podia llamar a una rutina o macro que no existiera, ya fuese de un .lib o .inc y no me daba error, me volvi loco intentando saber porqué. pero en sucesivos programas no se si al actualizar la version o simplemente algo que habia tocado. lo solucione haciendo un proyecto nuevo y reordenando los archivos, en el mismo asm, copiar pegar de las .lib .inc
pero llamar a una macro o rutina que no esté en un include o libreria y que no de error, a mi parecer, es por haber tocado algo :mrgreen: por que ahora si me los da
en mi caso para organizar los archivos, el .asm solo contiene los archivos que forman el programa
Código: [Seleccionar]
list P=16f877A
#include <P16F877A.INC>
#include <DEFINITIONS.INC>
#include <MACROS-MIDI.LIB>
#include <BOOTLOADER.INC>
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC&_BODEN_ON&_LVP_OFF
                        end
estos se encuentran en la misma carpeta del .asm asi no es necesario añadirlos en la ventana project excepto el propio .asm
#include   <P16F877A.INC>
#include   <DEFINITIONS.INC> estos contienen las direcciones y definiciones

#include   <MACROS-MIDI.LIB> estas son las macros que uso en mis programas, podria ser de una lcd o IIC,pulsadores.....

#include   <BOOTLOADER.INC> y en esta, está el programa principal donde se llaman a las rutinas y las direcciones donde se ubican las macros
copiar y pegar todo en el asm, solo las partes de las macros que vayas a utilizar y ponerlas en las direcciones donde vayan a estar, asi escribir el codigo de corrido tambien respetando las direcciones para las calls, interrupciones... y el programa que las llama, al final es lo mismo solo que al estar escribiendo en un solo archivo ayuda a colocar todo de forma mas grafica o mas sencilla a mi ver. puedes usar la ventana VIEW/PROGRAM MEMORY para ver como te queda ordenado el programa en la memoria
creo que el utilizar las macros y librerias sueltas se llama relocatable y escribir de corrido yo lo llamo asi, normalmente es como lo hacia, pero cuando empiezas a usar las mismas rutinas de un programa para otro ya te cansas de tanto copiar pegar y se recurre a incluirlas en una macro. pero si es para un solo programa copia y pega, como dice Leon Pic, que seguro asi te da los errores. si es para usar el mismo hard una y otra vez, prueba a hacer un nuevo pryecto y copiar pegar el codigo en hojas nuevas para crear, los guardas como asm lib .... y prueba haber si puedes llamar a una macro con el nombre cambiado, debería darte error

un saludo

aps tambien viene explicado en este pdf como usar las macros
« Última modificación: 30 de Marzo de 2008, 11:17:15 por alogic.on »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: duda sublw
« Respuesta #17 en: 07 de Abril de 2008, 12:36:09 »
Igual que incluyen el visual inizializer pq no pueden poner este tipo de cosas??? me parece inadmisible q un compilador no te avise de cuando usas una macro que no existe y que si te avise mil veces de warnings estupidos como que este registro no está en el banco 1....

Si lo que mencionas es referente a GUARDO_CONTEXTO , si eso aparece una sola vez en el código, entonces el MPASM lo tomó como un 'label'.  No me explico que tipo de error te debiera dar si escribes un label.  Si lo escribes dos veces te salta el error.

No me parece que haya una forma 'elegante' de solucionar esto con el assembly, porque sencillamente si lo escribes 2 veces te da error y si lo escribes una vez, te lo toma como label.  Entonces, si tuviera que dar un warning cada vez que pongamos un label el listado de warnings sería inacabable.

Otra solución sería que deba avisar si no usamos un macro que hemos definido.  En mis códigos tengo una librería de macros (un .inc con muuuchos macros dentro).  Dicho .inc lo incluyo en mis códigos y no me gustaría que me avise de todos los macros que definí y no usé.

Ya pero es que lo que hago no es usar una variable o registro lo que se está llamando es una macro. Prueba a llamar una macro inexistente con mplab veras que no te da error alguno.

De seguro no es lo que comento arriba? de que lo llamas una sola vez y por ende te lo toma como un label?

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)