TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: zer0007 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;
}
-
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__
-
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
-
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.
-
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....
-
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. 
Suerte
-
Gracias, hace tiempo que ya me funciona (lo que ahora bo recuerdo que pasaba).