TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: pablomanieri en 22 de Agosto de 2010, 16:44:33

Título: Problema con debug MPLAB-SIM y C30
Publicado por: pablomanieri en 22 de Agosto de 2010, 16:44:33
Hola amigos del foro, al final me animé a probar los dspic.
El tema es que estaba acostumbrado a programar en CCS y a realizar simulaciones con el proteus antes de cargar el programa en el pic. El problema es que ahora quiero comenzar a programar en C30, y lo que intento es hacer un debug paso a paso con el simulador del MPLAB SIM, y cuando declaro las funciones en archivos .h haciendo una simulación paso a paso con step into no entra a las funciones. Y el puntero salta a cualquier lado.
El tema es que al ejecutar la simulación, sin hacer step into se ejecuta correctamente.
Estoy probando con un simple ejemplo de apagar y encender un led, pero no hay caso, quisiera preguntarles si es posible hacer un step by step con C30 (v3.12) en mplab (v8.40), y si al hacerlo entra a las funciones dentro de las cabeceras .h o hay que colocar las funciones dentro de un archivo .c?
Adjunto el proyecto de mplab para ver si hay que configurar algo que no tuve en cuenta.
Desde ya muchas gracias


Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: Renatox_ en 22 de Agosto de 2010, 22:04:24
hola, al costado del step hay otro step donde no entras a la funcion por ejemplo si haces una multiplicacion el step entra a la rutina completa
pero el otro step salta de inmediato a la siguiente instruccion, espero sirva.

saludos
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: pablomanieri en 22 de Agosto de 2010, 22:45:27
Gracias por responder, te refieres a los botones para hacer un STEP INTO y STEP OVER. Pero ya he usado los dos cuando programaba en assembler y luego en CCS y siempre me han funcionado. El tema creo que está en que el compilador no genera el código para hacer el debug en las funciones que están dentro de un archivo de cabecera. Porque también probé en colocar un breakpoint dentro de la función y cuando le doy a simular con F9 me dice que uno o más breakpoint no pueden ser resueltos.
por ejemplo

archivo principal DSPIC C30.c
Código: C
  1. #include <p33FJ32MC204.h>
  2. _FOSCSEL(FNOSC_FRC);//iniciamos con oscilador interno sin prescaler
  3. _FOSC(FCKSM_CSECMD & OSCIOFNC_OFF);//permitimos reconfiguracion del clock
  4. _FWDT(FWDTEN_OFF); //wdt disable
  5. _FICD (JTAGEN_OFF&ICS_PGD1);//jtad disable icd enable en PGD1
  6. _FPOR(FPWRT_PWR1);
  7. #define FCY 40000000UL
  8. #include <libpic30.h> //cargamos cabecera para los delay
  9. #include <funciones.h>
  10. #define delay_ms(d) __delay_ms(d);
  11. unsigned int y;
  12.         int main(void){
  13.         // Configure PLL prescaler, PLL postscaler, PLL divisor
  14.         // N1 = PLLPRE + 2
  15.         // N2 = 2 x (PLLPOST + 1)
  16.         // M = PLLDIV + 2
  17.         // FOSc=FIN(M/(N1*N2)); FIN=7.37Mhz
  18.         //    FCY=(FIN/2)*(M/(N1*N2))
  19.         PLLFBD = 41; // M = 43
  20.         CLKDIVbits.PLLPOST=0; // N2 = 2
  21.         CLKDIVbits.PLLPRE=0; // N1 = 2
  22.         // Initiate Clock Switch to Internal FRC with PLL (NOSC = 0b001)
  23.         __builtin_write_OSCCONH(0x01);
  24.         __builtin_write_OSCCONL(0x01);
  25.         // Wait for Clock switch to occur
  26.         while (OSCCONbits.COSC!= 0b001);
  27.         // Wait for PLL to lock
  28.         while (OSCCONbits.LOCK!= 1);// configura I/O como digitales
  29.         AD1PCFGL=0xFFFF; //configura I/O como digitales
  30.         TRISA=0;
  31.         while(1){
  32.                 _LATA0=1;
  33.                 y=prueba(6);
  34.                 delay_ms(prueba(6));
  35.                 _LATA0=0;
  36.                 delay_ms(1);
  37.                         }
  38. }

Archivo funciones.h
Código: C
  1. int prueba (unsigned int x){
  2. int y;
  3. y++;  
  4. y=x; //prueba para ver si entra a la función con step into
  5.  
  6. return y;
  7. }

Si coloco un breakpoint en algunas de las líneas de la función prueba. Me da el mensaje del breakpoint no resuelto.
Además con STEP INTO no entra a la función.
Pero se que funciona, porque cuando pongo un break en el programa principal luego de llamar a la función. El valor que tiene que retornar la misma es el correcto.
Por eso es que piendo que el C30 no me genera correctamente el código para hacer el debug. A alguien más le pasó?
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: Nocturno en 23 de Agosto de 2010, 01:37:57
A mí también me pasa eso, Pablo. Cuando quiero poner un breakpoint y me sale ese mensaje, la única solución que he encontrado es mover la función para ponerla en el fichero principal.
Pero seguramente habrá alguna forma de habilitar el debugger en todo el código, a ver si alguien dice cómo.
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: Suky en 23 de Agosto de 2010, 10:08:07
Estamos en las mismas  :? Siempre creo el código que necesita debugger en el main y después separo todo en archivos  :?


Saludos!
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: pablomanieri en 23 de Agosto de 2010, 10:36:46
Bien, bien, gracias a todos. Tal vez alguien sepa como hacerlo, sino a debuggear poniendo todo en el principal
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: fram_22 en 03 de Septiembre de 2010, 11:30:30
Hola:

Yo tenia el mismo problema. Pero ahora que lo mencionan tiene mas sentido.
Sin embargo tengo otra duda en la que quizás me puedan ayudar. Estoy trabajando con un dspic33fj128mc802 para control de motores. Tengo poco tiempo en este dispositivo
y realizá una prueba con el ADC y el DMA. Lo que me causa dudas es lo siguiente.
En la vida real el programa funciona bien, entra la interrupción del DMA y los datos son procesados.
Pero en MPLAB SIM, cuando corro la simulacion (estoy utilizando una exitación externa sobre ADCBUF, que es de donde se mandan los datos al DMA)
simplemente la interrupción nunca entra. Alguien tiene experiencia en esto? Agradesco sus comentarios de antemano.

Saludos
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: migsantiago en 15 de Septiembre de 2010, 17:20:46
Mismo problema. Intenté crear un archivo .h para el .c que quiero depurar e insertarlo en el árbol de archivos del proyecto. No funcionó. Tampoco funcionó insertándolo con #include.

Qué bug más raro. La única alternativa desordenada es pegando la función en el archivo main como dice Nocturno.

Hola:


Sin embargo tengo otra duda en la que quizás me puedan ayudar. Estoy trabajando con un dspic33fj128mc802 para control de motores. Tengo poco tiempo en este dispositivo
y realizá una prueba con el ADC y el DMA. Lo que me causa dudas es lo siguiente.
En la vida real el programa funciona bien, entra la interrupción del DMA y los datos son procesados.
Pero en MPLAB SIM, cuando corro la simulacion (estoy utilizando una exitación externa sobre ADCBUF, que es de donde se mandan los datos al DMA)
simplemente la interrupción nunca entra. Alguien tiene experiencia en esto? Agradesco sus comentarios de antemano.

Saludos

En otro tema del foro leí que DMA no sirve en MPLAB SIM, sólo lo puedes depurar en vivo con un dsPIC real.
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: Suky en 15 de Septiembre de 2010, 17:40:32
Citar
En otro tema del foro leí que DMA no sirve en MPLAB SIM, sólo lo puedes depurar en vivo con un dsPIC real.

Hoy me toco debugear con el PIC32, el debuger/programador lo tiene integrado la placa, y es una bestialidad  :shock: Parecía que simulaba en MPLAB SIM, casi ninguna demora. Me acuerdo cuando probé el debug con el PICKit 2, y dije: "Hay que tener ganas de perder tiempo con esto!"  :D :D
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: migsantiago en 22 de Septiembre de 2010, 17:08:10
¿Saben cómo empeorar la depuración? Pues metan funciones tipo inline y usen la directiva de compilación -finline

El depurador brinca a donde quiere, cuando quiere y los breakpoints se los pasa por el arco del triunfo  :5]
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: Simon21 en 11 de Noviembre de 2010, 15:42:53
Nadie sabe como hacer para ejecutar bien el mplab sim paso a paso ?
es medio raro lo que me sucede ya que hay veces que puedo ir paso
a paso correctamente y otras veces es como que el programa se vuelve loco
y salta de cualquier lugar a cualquier otro.

Si alguien sabe como hacer esto de manera correcta agradeceria su comentario

Saludos
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: migsantiago en 11 de Noviembre de 2010, 19:54:00
Lo que a mi me sirve:

- Deshabilitar toda optimización de código
- No usar funciones INLINE
- Meter todo el código en el main.c, si se quiere depurar algo, debe estar en main.c

Otra opción es que uses el program memory junto con el disassembly listing y vayas viendo por dónde pasa el CPU, pero es un fastidio el hacerlo.

Otra recomendación que he anotado por malas experiencias, cuando hagas mediciones con el ADC, nunca pauses el programa mientras el ADC está convirtiendo. Esto provoca que el PIC ya nunca termine la conversión y el bit DONE nunca se ponga a 1. Imagino que esto sucede porque el ADC funciona con cada step del CPU. Cuando lo pausas, entonces el sample&hold se descarga y la conversión queda mal... pura imaginación pero creo que es por eso.

Otra solución es que para el ADC uses el reloj interno (ADRC).
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: Simon21 en 11 de Noviembre de 2010, 20:13:29
Muy buena info Santiago, desde ya gracias por tu respuesta.

Tenes idea como utilizar los estimulos en MPLAB SIM C30 ¿?

He intentado y la verdad no he podido notar cambios en las variables.

Saludos
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: migsantiago en 11 de Noviembre de 2010, 20:16:54
Muy buena info Santiago, desde ya gracias por tu respuesta.

Tenes idea como utilizar los estimulos en MPLAB SIM C30 ¿?

He intentado y la verdad no he podido notar cambios en las variables.

Saludos

No, sólo he usado depuración por hardware y Pickit2.  :(
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: Simon21 en 11 de Noviembre de 2010, 20:29:13
Como haces para depurar con el pickit? a mi me prestaron un pickit3 pero solo lo uso para programar ya que quise
depurar y no paso nada..
Título: Re: Problema con debug MPLAB-SIM y C30
Publicado por: migsantiago en 11 de Noviembre de 2010, 21:55:57
Pues instalo pickit2 y sus librerías al instalar MPLAB. Luego conecto el Pickit2 como dice su manual en el ICSP. Y finalmente voy al menú debug, elijo pickit2 y ya.

Checa si tu pickit3 es compatible con tu micro.