Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Probleme mit Start: F10 - reset Kategorie: Programmierung C (von Mansfeld - 12.05.2010 13:22)
Als Antwort auf Re: Probleme mit Start: F10 - reset von PeterS - 11.05.2010 14:52

> > Hi,
> >
> > das folgende Programm verhält sich unterschiedlich beim Starten mit F10 und reset:
> > Starte ich mit F10, so wird das Programm (while-loop in main() ) korrekt durchlaufen.
> > Starte ich aber mit reset (also ohne USB Kabel), so bleibt das Programm in der
> > while-loop hängen. Es sieht so aus, als ob die Interrupts 6 und 7 ihre Arbeit eingestellt
> > hätten.
> > Wie unterscheidet sich die Arbeitsweise der beiden Starts: F10 und reset?
> >
> >    Gruss
> >     Fred
>
> Die Msg_Write() Anweisungen werden natĂĽrlich nur durch gefĂĽhrt, wenn die IDE aktiv ist,
> sonst muĂ?t Du die RS232 Funktionen nutzen. Woher weiĂ?t Du, das er in der while_loop
> hängen bleibt?
>
> Gruss Peter

Hallo,
das Programm bleibt in der while-loop, der Roboter fährt und fährt,
nachfolgender Code (BEEP()) wird nicht ausgefĂĽhrt.
Der Effekt tritt nur auf, wenn ich mit reset (ohne USB-Kabel) starte. Starte ich
hingegen mit F10 ist alles ok.

Lösung: SPI_Disable() in servos_init() ausgeführt. Dann alles ok.

   Gruss
    Fred

>
> >  
> >
> >
> >
> > #include "servos.h"
> >
> > int steps_l, steps_r;
> >
> >
> > // Interrupt 7
> > void count_l_isr(void)
> > {
> >   int irq_cnt;
> >   steps_l++;
> >   irq_cnt = Irq_GetCount(INT_7);
> > }
> >
> > // Interrupt 6
> > void count_r_isr(void)
> > {
> >   int irq_cnt;
> >   steps_r++;
> >   irq_cnt = Irq_GetCount(INT_6);
> > }
> >
> >
> > void main(void)
> > {
> >   steps_l = 0;
> >   steps_r = 0;
> >   servos_init();
> >
> >   ENC_LED_ON();
> >   DRIVE_ON();
> >
> >   Timer_T1PWA(200);
> >   Timer_T1PWB(200);
> >
> >   while(steps_r < 80)
> >   {
> >     Msg_WriteInt(steps_l);
> >     Msg_WriteChar(SPACE);
> >     Msg_WriteInt(steps_r);
> >     Msg_WriteChar(13);
> >   }
> >
> >   DRIVE_OFF();
> >   ENC_LED_OFF();
> >
> > }


    Antwort schreiben


Antworten: