Autor Tema: Simular en MPLAB X IDE  (Leído 8239 veces)

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

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Simular en MPLAB X IDE
« en: 12 de Mayo de 2015, 14:42:44 »
Hola gente, pues eso, sencillamente como hacer una simulación, paso a paso de un programa escrito en .asm en este simulador.

En los compiladores anteriores era intuitivo y sencillo realizar una simulación. Pero en este se me a complicado de lo lindo. Y no encuentro un tutorial o ejemplo decente de tener en cuenta...

Ya tengo un programa escrito, y lo que deseo es ir simulándolo paso a paso para poder ver como cambian los valores de los distintos registros y hacer modificaciones para comprobar las "reacciones" del programa e incluso presentarle estímulos desde los distintos pines de entrada. O sea, tal como lo hacíamos en el viejo compilador.

Desde ya muchas gracias por la ayuda.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Simular en MPLAB X IDE
« Respuesta #1 en: 12 de Mayo de 2015, 15:25:24 »
Hola chaly, con simulación te refieres a debug sin tener el micro supongo verdad?

para simular tu proyecto debes irte a la ventana de la izquierda y dar con el boton derecho sobre tu proyecto, y se te abrira la siguiente ventana.



en conf:default debes seleccionar simulator




y dependiendo del compilador que estes usando debes seleccionar el nivel de optimizacion 0 para poder debugear correctamente, en tu caso, ensamblador, no dispone de  niveles de optimizacion por lo tanto este paso te lo puedes saltar.





Una vez hecho esto puede darle a debug (despues de marcar tus puntos de ruptura) y , despues de compilar correctamente y sin fallos, el programa comenzara a correr y se detendrá en tus puntos de ruptura como si estuvieras trabajando en el micro, te aparecera unos nuevos botones al lado del de debug, lo tipico de avanzar, pausa, reset,...



por ultimo en la ventana debajo del código te aparece la ventana variables, donde podrás ver tus variables y modificarlas, (para incluirlas solo debes seleccionarlas con el raton y arrastrarla a la ventana variables, pulsando el boton derecho puedes elegir verlas en hexadecimal, decimal... y otras opciones relacionadas con las variables.





un saludo y espero que te sirva ;-)
« Última modificación: 12 de Mayo de 2015, 15:27:43 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Simular en MPLAB X IDE
« Respuesta #2 en: 12 de Mayo de 2015, 15:28:20 »
La cosa que no vio juanperser es que es en ASM. Por lo que las variables no aparecen asi como las tiene el xD

Yo las cosas que suelo hacer aca utilizo el MPLAB X, para mi es igual que el otro, puede ser que no encuentres algunas cosas, pero es simple.
Espero no ser muy basico

Primero fijate que este seteado el proyecto como Principal, sino click derecho en el royecto y Set Main Project.
Luego asignarle el simulador si es que no lo hiciste antes, click derecho en el proyecto, propiedades y fijate que en donde dice Hardware Tools este puesto Simulator.

Listo. Ya esta todo seteado.
Podes poner un breakpoint haciendo doble click sobre el numero de la linea. Asi no arranca corriendo directamente.
Compilalo, arriba en la barra, tenes un martillito, y un martillito con una escoba siguiendo esa linea, antes de donde muestra el contador de programa hay otro boton que si te apoyas sobre el dice Debug Main Project. Ver imagen que puso juanperser

Click ahi y comienza a correr el programa en modo debug,
Tambien te aparecen nuevos botones para parar, correr, resetear, ir paso a paso, etc.

Y luego abajo de la barra tenes las barras que dice File Register, donde podes ver todos los registros, EEPROM, Stack, entre otros y distinta vistas de cada uno. En C normalmente podes ver las variables.
Si te falta alguna ventana, en Window -> PIC memory view o Debugging las podes encontrar

PD: Esto lo escribi mientras juanperser puso su mensaje, por lo que no lo edite xD
« Última modificación: 12 de Mayo de 2015, 15:55:39 por KILLERJC »

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Simular en MPLAB X IDE
« Respuesta #3 en: 12 de Mayo de 2015, 15:33:59 »
Citar
La cosa que no vio juanperser es que es en ASM. Por lo que las variables no aparecen asi como las tiene el xD

si me he dado cuenta de que es ensamblador, pero a mi si me aparecen las variables y los registros, tienes la version de MPLAX actualizada?

Citar
y dependiendo del compilador que estes usando debes seleccionar el nivel de optimizacion 0 para poder debugear correctamente, en tu caso, ensamblador, no dispone de  niveles de optimizacion por lo tanto este paso te lo puedes saltar.

« Última modificación: 12 de Mayo de 2015, 15:36:53 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Simular en MPLAB X IDE
« Respuesta #4 en: 12 de Mayo de 2015, 15:46:14 »
Pero ojo, ahi veo funciones que MPASM no acepta, eso es un ASM incluido en un C no es cierto ? lo digo por el label, y el bankmask. Por lo tanto tu compilador es XC8/16 lo que sea.
Si hablamos estrictamente de ASM solo, MPASM, no te van a aparecer. Solo las propias del PIC, pero las creadas tuyas no.

La unica forma que me aparezcan las variables es si dejo atras la forma que antes las hacia.

Antes podias ponerla con EQU o CBLOCK y en la ventana de debug podias tranquilamente indicar la direccion, Ahora para que aparezcan tengo que hacerlo con udata y reservando espacio, obviamente tengo que ponerle el code al comienzo del programa
Indico el valor de inicio sino el linker me los acomoda como el quiere.

Código: ASM
  1. VarBank0 udata 0x20
  2. Decena res 1
  3. Unidad res 1
  4. Centena res 1
  5. Num_Binario res 1
  6.  
  7. RES_VECT CODE 0x00
  8.  ; Programa
« Última modificación: 12 de Mayo de 2015, 15:54:08 por KILLERJC »

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Simular en MPLAB X IDE
« Respuesta #5 en: 12 de Mayo de 2015, 16:02:55 »
Si, ensamblador nunca lo uso por si solo, solo lo meto cuando lo necesito y en combinacion con C, este en particular es de XC8, pero con XC32 pasa lo mismo, es raro que si lo usas en combinacion te deje ver las variables y si solo usas ensamblador no.

total, supongo que lo arreglaran en versiones futuras.

un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Simular en MPLAB X IDE
« Respuesta #6 en: 12 de Mayo de 2015, 20:53:09 »
Hola juaperser1 y KILLERJC, primero muchas gracias por responder.

Pues las variables propias del micro si las puedes ver y tal cual lo a indicado juaperser1, el problema es con las variables creadas por uno mismo, esas si que les pone "Not Recognized", por lo tanto no te las deja ver y este es mi problema.

KILLERJC, como es esto? Cual es su función? No termino de entenderlo... perdonar mi "dureza"  :5]

Código: ASM
  1. VarBank0 udata 0x20
  2. Decena res 1
  3. Unidad res 1
  4. Centena res 1
  5. Num_Binario res 1
  6.  
  7. RES_VECT CODE 0x00

Muchas gracias y un saludo.

Atte. CARLOS.
« Última modificación: 12 de Mayo de 2015, 21:13:15 por Chaly29 »
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Simular en MPLAB X IDE
« Respuesta #7 en: 13 de Mayo de 2015, 00:27:30 »
Vos Chaly estas acostumbrado igual que yo, a usar:

Código: ASM
  1. CBLOCK 0x20
  2.    Decena
  3.    Unidad
  4.    Centena
  5.    Num_Binario
  6. ENDC

o

Código: ASM
  1. Decena EQU 0x20
  2. Unidad EQU 0x21
  3. Centena EQU 0x22
  4. Num_Binario EQU 0x23

Ambos es solamente darle un nombre a una constante, no es reservar justamente el espacio para eso. Luego el compilador lo reemplaza.
Por eso es valido si hago ADDLW Decena , que no significa sumarle el contenido de Decena a W, sino que seria sumar 0x20 a W

MPASM tiene una directiva para asignarle un lugar a los datos y una directiva para indicar que seccion estamos tratando, si es codigo o datos.
Una equivalencia si has oido hablar es de .bss .data .text .nss en ASM ( eso se maneja para 16 bits y 32)

udata => unitialized data => data no inicializada, es decir el lugar de memoria pero que no se le asigna ningun valor, en C vendria a ser algo asi:

Código: C
  1. uint8_t Decena,Unidad,Centena,Num_Binario;

Es decir defino que existe (y tamaño) pero no defino un valor. Por otra parte esta la directiva res , esta reserva X espacios de datos. Al reservar el lugar para los datos y decirle al compilador que esa seccion es de datos, Este sabe que realmente son datos, en cambio como lo haciamos antes no, por eso no aparecen como variables si usas como estabamos acostumbrados. Realmente deberias definirlo asi:

Código: ASM
  1. VarBank0 udata 0x20
  2. Decena res 1
  3. Unidad res 1
  4. Centena res 1
  5. Num_Binario res 1
  6.  
  7. VarBank1 udata 0xA0
  8. Var_banco1 res 1
  9.  
  10. RES_VECT CODE 0x00
  11.     GOTO MAIN
  12. ORG 0x04
  13.     GOTO INTERRUPCION
  14.  
  15. MAIN
  16.      .....
  17.      GOTO MAIN

Entonces lo que hacemos es definir un espacio de datos ( que puede o no ponerse una etiqueta como lo hice ) y le decimos que comienza en la direccion 0x20 (Tampoco es obligatorio definir un comienzo, pero si queres direccionarlo indirectamente por algun motivo entonces si). Todo lo que se encuentre debajo de udata hasta encontrar otra directiva pertenece a ese espacio de dato.
Si yo quiero decirle ahora al compilador que lo que viene es codigo, utilizo la directiva code y todo lo de abajo es codigo, ya con eso el compilador sabe que cosa va para cada lado.


Las directivas son:

[label] code [ROM_address]
[label] res mem_units
[label] udata [RAM_address]

http://ww1.microchip.com/downloads/en/DeviceDoc/33014L.pdf
« Última modificación: 13 de Mayo de 2015, 00:30:08 por KILLERJC »

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Simular en MPLAB X IDE
« Respuesta #8 en: 13 de Mayo de 2015, 01:10:46 »
Hola KILLERJC, te as pasado con la explicación, muy clara y certera, mañana mismo lo estaré probando y comento los resultados.

Muchísimas gracias.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Simular en MPLAB X IDE
« Respuesta #9 en: 13 de Mayo de 2015, 13:15:49 »
Hola KILLERJC, pues no encuentro manera de hacer funcionar estas líneas de código que tu me comentas:

El problema o error me lo tira con:

VarBank0 udata 0x20

Me dice que no hay espacio para la cantidad de variables o algo así, mas exactamente eso:

section 'VarBank0' can not fit the absolute section. Section 'VarBank0' start=0x00000030, length=0x00000002

El resto de las directivas no presentan problemas, por lo menos hasta ahora.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Simular en MPLAB X IDE
« Respuesta #10 en: 13 de Mayo de 2015, 13:25:04 »
Que PIC estas usando ? ya que para un PIC16 funcionaria.
Que cantidad de variables tenes? Ya que estoy viendo que dice que comienza en 0x30 y tiene un espacio de 2 lugares nomas. lo cual es raro.



Al menos te copio y pego una parte de mi codigo, es el que use para probar el BCD de Miguel que hizo puso aca en el foro:


Código: ASM
  1. ;*******************************************************************************
  2. ;
  3. ; TODO Step #3 - Variable Definitions
  4. ;
  5. ; Refer to datasheet for available data memory (RAM) organization assuming
  6. ; relocatible code organization (which is an option in project
  7. ; properties > mpasm (Global Options)).  Absolute mode generally should
  8. ; be used sparingly.
  9. ;
  10. ; Example of using GPR Uninitialized Data
  11. ;
  12. ;   GPR_VAR        UDATA
  13. ;   MYVAR1         RES        1      ; User variable linker places
  14. ;   MYVAR2         RES        1      ; User variable linker places
  15. ;   MYVAR3         RES        1      ; User variable linker places
  16. ;
  17. ;   ; Example of using Access Uninitialized Data Section (when available)
  18. ;   ; The variables for the context saving in the device datasheet may need
  19. ;   ; memory reserved here.
  20. ;   INT_VAR        UDATA_ACS
  21. ;   W_TEMP         RES        1      ; w register for context saving (ACCESS)
  22. ;   STATUS_TEMP    RES        1      ; status used for context saving
  23. ;   BSR_TEMP       RES        1      ; bank select used for ISR context saving
  24. ;
  25. ;*******************************************************************************
  26.  
  27. variables udata 0x20
  28. Decena res 1
  29. Unidad res 1
  30. Centena res 1
  31. Num_Binario res 1
  32.  
  33.  
  34. ;*******************************************************************************
  35. ; Reset Vector
  36. ;*******************************************************************************
  37.  
  38. RES_VECT  CODE    0x0000            ; processor reset vector
  39.     GOTO MAIN
  40.  
  41. ;*******************************************************************************
  42. ; TODO Step #4 - Interrupt Service Routines
  43. ;

No es mas que un proyecto creado en ASM y defino las variables asi. Si es para PIC18 tal ves necesites definirlo como access. Asi como esta el comentario.

Resultado:

Citar
MPLINK 5.05, LINKER
Device Database Version 1.22
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors    : 0

MP2HEX 5.05, COFF to HEX File Converter
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors    : 0

BUILD SUCCESSFUL (total time: 1s)

Y si no de ultima quitale el 0x20 y deja que el linker se encargue de acomodarlo,
« Última modificación: 13 de Mayo de 2015, 13:31:47 por KILLERJC »

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Simular en MPLAB X IDE
« Respuesta #11 en: 14 de Mayo de 2015, 19:57:49 »
Hola KILLERJC, tal cual está en el último post que hiciste, pues así lo e hecho yo:

Código: ASM
  1. variables udata 0x20
  2. Decena res 1
  3. Unidad res 1
  4. Centena res 1
  5. Num_Binario res 1

Con distintos nombres de variables, por supuesto, ya e intentado quitar el 0x20 y tampoco funcionó.

En el error que postee está el 0x30 simplemente porque probando quedó ese, pero también intenté con 0x20, con unas 15 variables y finalmente con 2 (tal como el error indica), pero incluso con una sola tampoco funciona.

Estoy usando un 16F870, por lo cual con lo que comentas debería de funcionar. Será que el MPLAB X IDE no acepta esto?

Creo que no queda otra que regresar al viejito MPLAB, ya que el nuevo pierde cantidad de funciones, lo que indicaría que el .asm se estaría extinguiendo....  :?

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Simular en MPLAB X IDE
« Respuesta #12 en: 15 de Mayo de 2015, 04:21:58 »
Hola Chaly29 yo antes usaba esta otra opción y me funcionaba:
Código: ASM
  1. VARIABLES UDATA_SHR
  2.     Temp1 res 1     ; Reservamos '1' byte para la variable Temp
el inconveniente de usar la manera que expongo es que posiciona las variables en las posiciones que el programa cree oportuno, de todos modos la opción que plantea KILLERJC  a mi me funciona.

Saludos!
« Última modificación: 15 de Mayo de 2015, 04:25:01 por Miquel_S »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Simular en MPLAB X IDE
« Respuesta #13 en: 15 de Mayo de 2015, 10:29:16 »
Bueno, no queria responder hasta no encontrar el problema y una solucion.
Utiliza lo que hizo Miguel. Es decir la directiva

[label] udata_shr [RAM_address]

El por que?
Ya que no seria lindo tirar instrucciones por tirar

Por que el PIC, al banco 0 se puede acceder desde el banco 3, por lo tanto no se puede definir como DATABANK ( o un registro con un banco definido) sino como SHAREBANK ( es decir UN registro que se puede acceder desde varios bancos).
Si los definiera con DATABANK seria incorrecto, ya que seria como si tuviera 2 registros independientes, cuando en realidad es que tengo 1 solo. O podria simplemente definir la seccion del banco 0 y quitar la parte del banco 3(no mapearlo), si es que quiero definirlo como DATABANK.

Mirando los archivos del linker:
PIC16F870:

Código: [Seleccionar]
DATABANK   NAME=sfr0       START=0x0               END=0x1F           PROTECTED
DATABANK   NAME=sfr1       START=0x80              END=0x9F           PROTECTED
DATABANK   NAME=sfr2       START=0x100             END=0x10F          PROTECTED
DATABANK   NAME=sfr3       START=0x180             END=0x18F          PROTECTED

SHAREBANK  NAME=gpr0       START=0x20            END=0x6F          
SHAREBANK  NAME=gpr0       START=0x120           END=0x16F          PROTECTED
SHAREBANK  NAME=gprnobnk   START=0x70            END=0x7F          
SHAREBANK  NAME=gprnobnk   START=0xF0            END=0xFF           PROTECTED
SHAREBANK  NAME=gprnobnk   START=0x170           END=0x17F          PROTECTED
SHAREBANK  NAME=gprnobnk   START=0x1F0           END=0x1FF          PROTECTED
SHAREBANK  NAME=gpr1       START=0xA0            END=0xBF          
SHAREBANK  NAME=gpr1       START=0x1A0           END=0x1BF          PROTECTED

Del codigo:

SHAREBANK  NAME=gpr0       START=0x20            END=0x6F                                                       -------> Esto pertenece al banco 0
SHAREBANK  NAME=gpr0       START=0x120           END=0x16F          PROTECTED                           -------> Esto al banco 3

Pero si observas en el datasheet, accedes al mismo banco.
Las posiciones de 0x70 a 0x7F puede ser accedidas desde cualquier banco, por ese motivo estan definidas las direcciones de los 4 bancos

En cambio yo lo probaba con un PIC16F877, que lo define como DATABANK, ya que su acceso es unico, excepto de 0x70 a 0x7F:

Código: [Seleccionar]
DATABANK   NAME=sfr0       START=0x0               END=0x1F           PROTECTED
DATABANK   NAME=sfr1       START=0x80              END=0x9F           PROTECTED
DATABANK   NAME=sfr2       START=0x100             END=0x10F          PROTECTED
DATABANK   NAME=sfr3       START=0x180             END=0x18F          PROTECTED

DATABANK   NAME=gpr0       START=0x20              END=0x6F          
DATABANK   NAME=gpr1       START=0xA0              END=0xEF          
DATABANK   NAME=gpr2       START=0x110             END=0x16F          
DATABANK   NAME=gpr3       START=0x190             END=0x1EF          

SHAREBANK  NAME=gprnobnk   START=0x70            END=0x7F          
SHAREBANK  NAME=gprnobnk   START=0xF0            END=0xFF           PROTECTED
SHAREBANK  NAME=gprnobnk   START=0x170           END=0x17F          PROTECTED
SHAREBANK  NAME=gprnobnk   START=0x1F0           END=0x1FF          PROTECTED

En fin, udata solo no te va a servir por lo antes mencionado
Y deberias usar udata_shr

Con lo cual te aparece en la ventana de variables como "Global Symbol" y si abris la ventanita de file Register, podes ver la memoria RAM y le pone los nombres ahi.

Citar
Creo que no queda otra que regresar al viejito MPLAB, ya que el nuevo pierde cantidad de funciones, lo que indicaría que el .asm se estaría extinguiendo....

Tengo entendido que esto viene del MPLAB 8.xx , nomas que el MPLAB8 te permitia agregar cualquier direccion, aca si no esta definido como dato, entonces no te lo toma como una variable, y solo podrias ver las posiciones de memoria pero sin ninguna etiqueta indicandote cual es cual

PD:

MPLAB X deberia incluir el archivo de linker al proyecto... pero no lo hace. teniendo que navegar por las carpetas para encontrarlo
 .../Microchip/MPLABX/mpasmx/LKR

Asi tener un facil acceso y poder ver la memoria.
« Última modificación: 15 de Mayo de 2015, 11:53:42 por KILLERJC »


 

anything