Schleife funktioniert nicht mehr richtig

Postby mr. teflon » Mon Feb 28, 2011 12:00 am

Hallo,

wegen dem Debugger. Ich nutze wenn dann den KD30. Aktuell versuche ich damit das Problem zu finden. Allerdings bekomme ich nach einer Weile, wenn es mittels Debugger läuft, eine Fehlermeldung und der Debugger beendet sich.

Communication ERROR.
Can't accept data.
ERROR(16014)

Mit einem kürzeren Programm, zum Bsp. meine vorherigen Timer Spielereien, gibt es keinen Abbruch. Kommt der Debugger mit größeren Code nicht zurecht? Mein Code ist 10kB groß.

Tschau
Mr. Teflon
mr. teflon
 
Posts: 146
Joined: Fri Jan 03, 2014 1:48 pm

Postby mr. teflon » Tue Mar 01, 2011 12:00 am

Hallo sepp2gl,

der Debugger zickt aktuell immer noch rum. Weis momentan nicht warum.

Eine andere Frage hätte ich noch. Warum werden in manchen code Beispielen die Funktionen mit ; nach der } abgeschlossen?

Ich kenne das nur so:
(void) name ...
{
Befehle;
...
}

in manchen Bsp. sieht das aber so aus mit ; am Ende
(void) name ...
{
Befehle;
...
};

Was bewirkt das ; ?

Zum anderen Problem haste keine Ideen mehr?
Ich danke Dir trotzdem für die Hilfe, auch wegen dem Timer C usw.. Den hätte ich wohl noch längere Zeit sonst nie benutzt.

Tschau
Mr. Teflon
mr. teflon
 
Posts: 146
Joined: Fri Jan 03, 2014 1:48 pm

Postby sepp2gl » Tue Mar 01, 2011 12:00 am

Zunächst die einfache Frage:
"Was bewirkt ein }; am Ende einer Funktion?"
Antwort: Eine Syntax-Fehlermeldung des Compilers.
}; gibt es nur in Verbindung mit Variablendeklarationen und Initialisierungen aber nicht bei Funktionen.

Die schwierigere Frage zum Debugger:
Der Debugger sollte während der Programmausführung nicht frei mitlaufen (permanent Variablen aktualisieren), sondern nur dazu benutzt werden aud Breakpoints zu warten, da der Debugger die Timerfunktionen stört.
Der Debugger stört außerdem insbesondere die Ausgaben auf der RS232, die er verwendet.

Die noch schwierigere Frage nach der Funktion:
da musst Du selbst durch. Ich habe keine Zeit dafür.
Versuche zu verstehen, wie der Controller "denkt" und lese die Datenblätter (daran kommst Du nicht vorbei!).
Ich würde Dir insbesondere empfehlen, das Programm neu aufzubauen und mir dem Debugger Breakpoints an versch. Stellen zu setzen und Dir die Variablen anzusehen, um die Funktion zu verstehen.

Gruß, sepp2gl
sepp2gl
 
Posts: 30
Joined: Fri Jan 03, 2014 1:50 pm

Postby mr. teflon » Tue Mar 01, 2011 12:00 am

Hallo,

okay. Da muß ich durch.

Wegen dem Semikolon. Dann sind das Funktionen zum Initialisierungen von irgendwas, was ich gesehen habe. Der Compiler bringt keine Fehlermeldung. Kann man das ; auch weglassen?

Danke soweit.

Ich habe das Programm nochmal ordentlich abgespeckt. Falls Du das schon gelesen haben solltest. Vielleicht findest Du etwas Zeit zum drüberschauen.

Wegen dem Debugger. Also wird der Debugger im Freilauf nie funktionieren sobald ein Interrupt verwendet wird. Darf man nur im Stepmode verwenden?

Tschau
Mr. Teflon
Attachments
BikeTemp-v6-MAX6675-only.1.rar
(84.11 KiB) Downloaded 25 times
mr. teflon
 
Posts: 146
Joined: Fri Jan 03, 2014 1:48 pm

Postby sepp2gl » Tue Mar 01, 2011 12:00 am

Nein, kannst Du nicht. Initialisierungen von Variablen sind keine Funktionen.
Die brauchen das.
Ich empfehle zum Nachschlagen das gute alte C-Buch von Kernighan&Ritchie.
Die haben C erfunden und ich habe Mitte der 80er danach gelernt. Kann es nur empfehlen.

Zum Debugger:
Dass er nur im Step-Modus betrieben werden darf habe ich nicht gesagt.
Er darf schon mitlaufen. Nur darf er bis zum Breakpoint keine Ausgaben machen.

P.S.: Das neue Buch von Kernighan (ohne Ritchie) beschäftigt sich bereits mit ANSII-C; das ist zu bevorzugen. Gibt es bei eBay.
sepp2gl
 
Posts: 30
Joined: Fri Jan 03, 2014 1:50 pm

Postby mr. teflon » Wed Mar 02, 2011 12:00 am

Hallo,

ich glaube Du verstehst mich falsch. Ich rede nicht von Variablendeklaration sondern Funktionen.

Bsp.:
// Cursor auf Spalte (0...15) und Reihe (0 oder 1) setzenvoid set_lcd_cursor_pos(char column, char row){char addr;wait_ms(5);RS = 0;           // RS = HIGH: es folgen Kommandosaddr = column + (row * 0x40);send_byte_to_lcd(addr | 0x80);wait_ms(5);};


Was macht das ; ganz am Ende?

Ich habe ein gekauftes Buch von Markt und Technik "C Programmierung" von Jürgen Wolf und ich habe das Galileo Openbook "C von a bis z". Ich lese darin leider nichts von dem Semikolon am Ende einer Funktion. Jetzt könnte das ja noch eine spezielle Schreibweise wegen dem Renesas Compiler sein mit einer bestimmten Bedeutung die ich nicht kenne.
Deshalb die Frage. Das ; haben nicht alle Funktionen am Ende.

Tschau
Mr. Teflon
mr. teflon
 
Posts: 146
Joined: Fri Jan 03, 2014 1:48 pm

Postby mail » Wed Mar 02, 2011 12:00 am

Hallo Herr Teflon

Das Problem scheint mit die größe der Speicherbereiches ,welcher durch viele Funktionen ,welche oft nur einkopiert sind und nicht in Benutzung.

So wird Speicher für die DCF Uhr bereitgehalten aber nicht benutzt. Ebenso Speicher für die Serielle Komunikation .

Wie viel Speicher des doch nicht sehr üppigen RAM Speichers noch frei sind zeigt das Programm Map Viewer . Hierbei sollte nicht vergessen werden das insbesondere die Aufrufe von Float berechnungen sehr Speicherintensiv sind ,wobei diese Funktionen insbesondere den Bedarf an Speicher für Stackopperationen drastisch nach oben treiben.

Daher hänge Ich ein Programm an welches die Ausgabe von Dezimalzahlen mit fester Position des Dezimalpunktes verwendet.

Dabei wird mit dem X Timer ein fester Zeitaufruf generiert und in der Main rutine nur in Abhängigkeit von der Zeit verschiedene Aktionen aufgerufen.

Wichtig ist auch beim einsatz des KD 30 das nicht zu viele zu beobachtende Variablen definiert sind ,den diese müssen immer neu an den PC übertragen werden auch wenn sie später keiner ansieht.


Gruss Hermann
Attachments
Zeitsteuerung.c
(12.91 KiB) Downloaded 24 times
mail
 
Posts: 4
Joined: Fri Jan 03, 2014 1:49 pm

Postby mr. teflon » Thu Mar 03, 2011 12:00 am

Hallo,

ich werde den Hinweis wegen den float Variablen berücksichtigen.

Ich habe jetzt erstmal viele Schritte zurück gemacht, wegen der Fehlersuche. Deshalb sieht es so aus als ob manche Funktionen sinnloserweise drin stehen, die werden später wieder benötigt.

Die COM1 Ausgabe benötige ich manchmal zur Fehlersuche. Überflüssig ist die nicht. Kann erst raus wenn das Projekt fertig ist.

Wegen dem Speicherbereich. Sollte mir das nicht der Compiler melden?

Übrigens habe ich das Problem gestern Abend gelöst. Steht im anderen Thread. Problem war die plötzlich fehlende Wartezeit vorm erneuten auslesens des MAX6675. Durch den Programmumbau mit Nutzung vom Timer C fiel wait_ms(500) weg. Was ich ja wollte. Der Effekt des wegfalles war jedoch nicht nachvollziehbar. Hat mehrere Tage gedauert um diesen Fehler zu finden.

Kannst Du mir vielleicht das Semikolon erklären im Beitrag vor Dir? Danke.

Tschau
Mr. Teflon
mr. teflon
 
Posts: 146
Joined: Fri Jan 03, 2014 1:48 pm

Postby mr. teflon » Thu Mar 03, 2011 12:00 am

Hallo Mail,

wegen dem Tool "MapViewer" ein Frage. Ich wollte mal zum Spass damit in mein Projekt schauen. Leider erhalte ich immer
00000102 file read error
Inspect Part: Illegal information

Egal welche .x30 Datei ich öffnen möchte, egal ob meine eigenen Projekte oder die Bsp. von der Buch CD. Immer der gleiche Fehler. Gibt es einen Trick?

Danke.

Tschau
Mr. Teflon
mr. teflon
 
Posts: 146
Joined: Fri Jan 03, 2014 1:48 pm

Postby mail » Fri Mar 04, 2011 12:00 am

Hallo Mr. Teflon

Am einfachsten Version MapViewer V3.01.02 nutzen

sonst in der Datei section.inc ganz am Ende die Zeilen ändern
.lwordstart
.id "#FFFFFFFFFFFFFF"
.ofsreg0FFH

auskommentieren
dafür neu
.lwordstart+0ff00000h
einfügen.

und neu compilieren.

Eventuell diese Änderung vor übertragen in Controller rückgängig machen.

M.f.G H.M.
mail
 
Posts: 4
Joined: Fri Jan 03, 2014 1:49 pm

PreviousNext

Return to Das R8C-Projekt

Who is online

Users browsing this forum: No registered users and 1 guest