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

Re: HILFE , Unerklärbare effekt wenn etwas Testcode weggelassen wird Kategorie: Programmierung C (von UlrichK - 28.11.2010 15:08)
Als Antwort auf Re: HILFE , Unerklärbare effekt wenn etwas Testcode weggelassen wird von Jo - 28.11.2010 14:46
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> > > Hallo zusammen,
> > > mein akt. Projekt ist soweit so gut wie abgeschlossen. Ich habe in der Entwicklungsphase im 10ms
> > > TimerInterrupt folgenden code laufen, der beide LEDs abwechselnd rasch blinken lässt.
> > >
> > > ...
> > >
> > >     if( Int10msCtr & 16) {
> > >       Port_WriteBit(PORT_LED1, ON);
> > >       Port_WriteBit(PORT_LED2,OFF);
> > >     } else {
> > >       Port_WriteBit(PORT_LED1, OFF);
> > >       Port_WriteBit(PORT_LED2, ON);
> > >     }
> > > ..
> > > Damit erkennt man, dass der Interrupt aufgerufen wurde und der C-Control arbeitet.
> > >
> > > Nun ist das Proj. fertig. und ich habe diesen Block auskommentiert
> > >
> > >  /*
> > >     if( Int10msCtr & 16) {
> > >       Port_WriteBit(PORT_LED1, ON);
> > >       Port_WriteBit(PORT_LED2,OFF);
> > >     } else {
> > >       Port_WriteBit(PORT_LED1, OFF);
> > >       Port_WriteBit(PORT_LED2, ON);
> > >     }
> > >  */
> > >
> > > --> Die Applikation bleibt nun kurz nach dem Start stehen, völlig unklar wieso,
> > >
> > > aber und es wird noch aberwitziger
> > >
> > > bei folgendem erneut leicht modifiziertem Code
> > >
> > >
> > >     if( Int10msCtr & 16) {
> > >       Port_WriteBit(PORT_LED1, ON);
> > >  //     Port_WriteBit(PORT_LED2,OFF);
> > >     } else {
> > >       Port_WriteBit(PORT_LED1, OFF);
> > >  //     Port_WriteBit(PORT_LED2, ON);
> > >     }
> > >
> > > gibt es eine RAM Schutzverletzung
> > >
> > > Conrad C-Control Pro 2010                                                                                              
> > > OK0                                                                                                                    
> > >                                                                                                                        
> > > Interpreter gestartet - 64kb RAM                                                                                        
> > >                                                                                                                        
> > > Interpreter gestartet - 64kb RAM                                                                                        
> > >                                                                                                                        
> > > Stack RAM Schutzverletzung  bei Adresse 55647 in Thread 0                                                              
> > >                                                                                                                        
> > > Zeit: 1270ms      
> > >
> > >
> > > --> Kann es sein, dass im Bytecode Interpreter ein Bug ist????
> > > Kennt jemand sonst solche Effekte?
> > > Hat jemand eine Idee wie man den eigentlichen fehler finden kann.
> > >
> > > Brenne nach guten Inputs
> > >
> > > Danke und Grü�e
> > >
> > > Jo
> >
> > Hallo Jo,
> > die gleichen unerklärlichen Effekte habe ich auch. Siehe auch posting vom 29.11.
> > Bereits am 22.10 habe ich PeterS mein komplettes Projekt an ccpro zugeschickt. Er hat mir auch
> > zugesagt, nach dem Fehler zu suchen - hat aber z.Z. wohl keine Zeit dazu(?).
> > Nochmal: Bei mir funktioniert etwas NICHT mehr, wenn ein Modul des Projekts an anderer Stelle steht.
> > Das kann man ja verschieben in der IDE. Es traten bereits auf:
> > - Stack Ram Schutzverletzung
> > - Der Interpreter wurde einfach gestopt
> > - Die ganze IDE wurde 2 mal schlagartig beendet (mag vielleicht was anderes sein).
> > Ich hoffe immer noch auf Peter.
> > Programmentwicklung kann zum Glück weitergehen, wenn das Modul ' wo anders' steht. Aber ist
> > ein sehr unsicheres Gefühl.
> > Gruss
> > Ulrich
>
> Hallo Ulrich,,
> ich habe deinen Post gelesen, ja, ich denke unsere Probleme könnten eine �hnliche Ursache habe.
> Mir scheint es so, dass erst ab einer bestimmten Grö�e das Problem auftritt.
> Die Programmgrö�e wird bei mir mit
Hallo Jo,
das mit der Grösse glaub ich auch. Vielleicht ist der Sprungbereich von 'jmp' Befehlen
zu klein für grosse Programme?? Mein Projekt ist auch sehr gross:

Ã?bersetze Projekt EQ6-Control
C-Control Pro Compiler (C) 2010  Conrad Electronic
Durchlaufe Pass 1
Durchlaufe Pass 2
3530 bytes (4kb:141% - 64kb:5%) globale Variablen
Generiere Bytecode - 33117 bytes..
Schreibe Symboldaten - 38477 bytes..

Stell doch mal die Module um in der IDE - ich denke du hast auch mehrere .cc files. Bei mir ist
der Fehler dann WEG - aber vielleicht geht dann was anderes nicht mehr????

Peter HILF, Peter HILF ( wenn du Zeit hast)

Gruss Ulrich

>
> Ã?bersetze Projekt RollaControl
> C-Control Pro Compiler (C) 2010  Conrad Electronic
> Durchlaufe Pass 1
> Durchlaufe Pass 2
> 2294 bytes (4kb:91% - 64kb:3%) globale Variablen
> Generiere Bytecode - 19652 bytes..
> Schreibe Symboldaten - 25866 bytes..
>
> ausgegeben.
>
> Ich bin gerade ziemlich ausgebremnst... Wenn z.B. an einer stelle ein
> if( 0 ) {
>
> } else {
>  // mach was
> }
>
> einbaue Stoppt das Programm.
>
> Ich habe einen einfaches Unterprogramm zur definition von Sonderzeichen im Programm
>
>
> if( user_chars_set != USER_CHARS_ROLLADEN_AKTIVE) {
>
>     user_chars_set = USER_CHARS_ROLLADEN_AKTIVE;
>
>     LCD_WriteCTRRegister( 0x40);
>
>
>     LCD_WriteChar(0x04);        //  #  0x04
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>
>
>
>
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>
>
>
>
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>
>
>
>
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>
>
>     /*  Ersetzt durch 0x3D ('=')
>
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>
>     */
>
>     /*  Ersetzt durch 0xFC
>
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     */
>
>
>
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>
>
>
>     /* Ersetzt durch 0xD0
>
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x00);        //     0x00
>     LCD_WriteChar(0x00);        //     0x00
>     */
>
>
>
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x00);        //     0x00
>
>
>
>
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>
>
>
>
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x15);        //  # #0x15
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>     LCD_WriteChar(0x1F);        //  ###0x1F           #
>
>
>     LCD_WriteCTRRegister( 0x80);
>     }
>
>
> }
>
>
> Diese Funktion Crashed bei entsprechender konstellation nach 31 Zeilen, reproduzierbar auch im
> Debugger. �ndere ich wo anders was in der SW klappt es. Ich werde langsam verrückt, weil die
> Ideen für einen Workaround ausgehen. Ich habe auch nach einem möglichen Speicherüberschreiber
> von meiner SW gesucht, aber bisher nichts gefunden. Array überwachung ist aktiv, strcopy habe
> ich im debugger nachgeschaut.
> Jetzt hoffen wir mal auf Peter
> Viele Grü�e
>
> Jo


    Antwort schreiben


Antworten:

Re: HILFE , Unerklärbare effekt wenn etwas Testcode weggelassen wird (von Jörg - 28.11.2010 15:53)
    Re: HILFE , Unerklärbare effekt wenn etwas Testcode weggelassen wird (von PeterS - 29.11.2010 14:50)
    Re: HILFE , Unerklärbare effekt wenn etwas Testcode weggelassen wird (von UlrichK - 28.11.2010 18:03)
        Re: HILFE , Unerklärbare effekt wenn etwas Testcode weggelassen wird (von Joerg - 29.11.2010 8:45)
            Re: HILFE , Unerklärbare effekt wenn etwas Testcode weggelassen wird (von UlrichK - 29.11.2010 9:42)
                Re: HILFE , Unerklärbare effekt wenn etwas Testcode weggelassen wird (von Joerg - 29.11.2010 10:29)
                    Re: HILFE , Unerklärbare effekt wenn etwas Testcode weggelassen wird (von UlrichK - 29.11.2010 13:59)