Autor Tema: C30 y dsPIC  (Leído 3719 veces)

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

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
C30 y dsPIC
« en: 27 de Diciembre de 2004, 02:31:00 »
Estoy haciendo mi primer programa en C30 y no me tira, me explico:

Pongo este codigo, pongo un breakpoint en el sumador del counter y voy debugando con el F7 la variable counter no varia, por que ?

Gracias.

#include "p30f6014.h"
  int counter;
  int main (void)
  {
      counter = 1;
      TRISB = 0;
      while(1)
      {
             counter++;
          PORTB = counter;

      }
      return 0;
  }

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: C30 y dsPIC
« Respuesta #1 en: 27 de Diciembre de 2004, 04:11:00 »
Pues no veo nada raro. Tan sólo que en mis programas hay un define adicional, pero no me preguntes para qué sirve:

#define __dsPIC30F6014__

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
RE: C30 y dsPIC
« Respuesta #2 en: 27 de Diciembre de 2004, 05:44:00 »
Es mas en el watch me pone Restricted memory de la variable watch. No se qe puede pasar, veo como el cursor pasa de una line a otra dentro del while pero la memoria no varia (inicio el programa pulsando F9 y cuando se para en el breakpoint avanzo pulsando F7).

Gracias

Desconectado alejopower

  • PIC10
  • *
  • Mensajes: 1
RE: C30 y dsPIC
« Respuesta #3 en: 07 de Octubre de 2005, 16:15:00 »
la variable counter no varia porque dentro de tu programa principal, osea main() , defines la variable counter=1 y sin embargo en la zona que define que hacer cuando ocurra una interrupcion [while(1)] , tu le dices que incremente el counter. Esto no tiene sentido porque seguro la variable se incrementa, pero cuando se vuelve al main con el nuevo valor del counter, el programa se encuentra con que counter=1, asi que ese nuevo dato se pierde.

Debes manejar diferente esa variable counter, mediante un puntero por ejemplo, o si no cambiarle la estructura al programa, de tal forma que la variable que modifiques efectivamente asuma el valor nuevo que le pones.

Me parece que debes revisar como funciona una interrupcion dentro de un programa .

ok.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: C30 y dsPIC
« Respuesta #4 en: 07 de Octubre de 2005, 16:43:00 »
Perdon, no programo DSPICs (aun) pero si uso C, y no es una interrupcion lo que programo el amigo Zero007.
Es solo un bucle infinito del cual no sale mas, es mas como no comprueba el limite de la variable la misma hara un rollover cuando supere su rango numerico.
Pero de cualquier forma en simulacion el deberia ver que se incrementa, no se si puede verlo en el puerto, pero si deberia incrementarse....Sonrisa GiganteSonrisa Gigante
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

2xMcK

  • Visitante
RE: C30 y dsPIC
« Respuesta #5 en: 08 de Octubre de 2005, 09:48:00 »
Asumo que estás usando el MPLAB IDE.

Lo del define es para que los includes sepan para qué chip se está utilizando y modificar alguna pequeña constante por ejemplo, desactivar cosas que ese chip no soporta... etc. Hay que ponerlo antes de los includes, importante.

Prueba a añadir a tu proyecto el linker script para tu dspic. Es un archivo con extensión .gld que encontrarás en el subdirectorio supporg/gld de donde tengas instalado el C30.

Acabo de probarlo y a mi me daba un error con la fecha del sistema sin usar el linker script. Con el script ya iba correctamente. Sonrisa Gigante

Suerte Sonrisa

Desconectado zer0007

  • PIC16
  • ***
  • Mensajes: 106
RE: C30 y dsPIC
« Respuesta #6 en: 13 de Octubre de 2005, 03:28:00 »
Gracias, hace tiempo que ya me funciona (lo que ahora bo recuerdo que pasaba).