Forum: Compiler & IDEs Simulationsproblem über Konsole


von Daniel B. (zehplusplus)


Lesenswert?

Ich will eine Zeiterfassung für eine Rennstrecke schreiben 
(Start/Zielzeiten). Bevor ich mir das teure Equipment leiste, will ich 
eigentlich vorher das ganz Programm mal über ne Konsole testen. Wie kann 
ich das denn simulieren? Oder kann ich sogar den Controler selbst 
simulieren? Das AVR-GCC Tutorial gibt da leider auch nichts drüber her.

von Noname (Gast)


Lesenswert?

Hier http://www.mikrocontroller.net/articles/AVR-Simulation findest Du 
Infos über Simulatoren.

von Daniel B. (zehplusplus)


Lesenswert?

Hab mich jetzt für den Simulator im AVR Studio entschieden. Zuerst 
wollte ich mal den Simulator testen, mit folgendem Programm:

#include <avr/io.h>

int main(void)
{
  int a,b,c=0;
  a=0;
  b=5;
    while (a<b)
    {
    a++;
    c=a+b;
  }
}
Ich habe mir (ab der while Schleife) in jede Zeile nen Break-Point 
gesetzt, allerdings reagiert der Debugger nicht auf diese. Der gelbe 
Pfeil springt direkt auf die letzte Zeile. Why?

von Floh (Gast)


Lesenswert?

Optimierung an?
Der Compiler könnte die Schleife entfernen, da das Ergebnis von c 
vorrausgesagt werden kann.

von Daniel B. (zehplusplus)


Lesenswert?

Auch wenn ich die Zeile für die c-Berechnung ausblende, passiert das 
Gleiche... Wie schalte ich die Optimierung aus?

von Daniel B. (zehplusplus)


Lesenswert?

Ist es denn möglich, den gelben Pfeil auf eine Zeile zu setzen?

von Karl H. (kbuchegg)


Lesenswert?

mach halt irgendwas mit dem Ergebnis, so dass es nicht wegpoptimiert 
werden kann. Zb auf einem Port ausgeben. Dein Programm ist mommentan 
ziemlich sinnlos, der Compiler merkt das und optimiert so ziemlich alles 
weg.

Den Pfeil kannst du nicht dorthinsetzen, weil von deinem Programm in der 
Ausführung nichts mehr übrig bleibt.

1
#include <avr/io.h>
2
3
int main(void)
4
{
5
  int a,b,c=0;
6
7
  DDRB = 0xFF;   // kompletrten Port D auf Ausgang setzen
8
9
  a=0;
10
  b=5;
11
12
  while (a<b)
13
  {
14
    a++;
15
    c=a+b;
16
17
    PORTD = c;   // und c auf dem Port D ausgeben
18
  }
19
}

Jetzt kann er zumindest nicht mehr alles wegoptimieren, weil die Ausgabe 
auf dem Port erfolgen MUSS.

Entweder das oder du schaltest die Optimierung ab.

von Daniel B. (zehplusplus)


Lesenswert?

Ok, das funzt mit dem debuggen. Und wie Optimierung will ich definitiv 
ausgeschaltet haben, wie geht das?

von Karl H. (kbuchegg)


Lesenswert?

Eigentlich willst du die Optimierung beim realen Programmieren nicht 
abgeschaltet haben.

Aber seis drum. Welche Entwcklungsumgebung verwendest du?
Im AVR-Studio stellst du die Optimierung bei den Projekt-Optionen auf 
-O0 (das ist (Ohhh null)

von Daniel B. (zehplusplus)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Eigentlich willst du die Optimierung beim realen Programmieren nicht
> abgeschaltet haben.

Das stimmt, aber zum debuggen ist es für mich als Anfänger auch ok.

> Welche Entwcklungsumgebung verwendest du?

AVr Studio 5. Habe die Einstellungen gefunden.

DANKE VIELMALS

von Daniel B. (zehplusplus)


Lesenswert?

Zum eigentlichen Thema zurück: Kann ich ne Ausgabe über Konsole 
generieren? Mit simplen printf scanf Befehlen?

von Karl H. (kbuchegg)


Lesenswert?

Nein

von Karl H. (kbuchegg)


Lesenswert?

Und lies dir das AVR-GCC-Tutorial durch.
Ein µC, wie der AVR, programmiert sich ein wenig anders als dein Desktop 
PC.

Insbesondere, für den Anfang, willst du nicht int verwenden, wenn du mit 
einem uint8_t auch durchkommst.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:

> Den Pfeil kannst du nicht dorthinsetzen, weil von deinem Programm in der
> Ausführung nichts mehr übrig bleibt.

Ganz am Rande: Das hat eigentlich nix miteinander zu tun:

Ob der Code optimiert wurde oder nicht — solange die entsprechende 
Debug-Infos

1) erzeugt werden

und

2) adäquat vom Debugger verarbeitet werden

kann man Pfeil auch dorthin setzen, wo der Code wegoptimiert ist (weil 
die entsprechende Debug-Info nämlich noch da ist und ausgewertet wird). 
Oder man kann sich den Wert wegoptimierter Variablen anzeigen lassen.

1) ist für GCC der Fall — vorausgesetzt, man bedient ihn richtig

2) ist für den AVR-Studio-Debugger offenbar nicht gegeben.
   Was verwundert, da die neue 5-er Version doch sooo viel
   Neuerungen bringen soll...

von Wolfgang (Gast)


Lesenswert?

Daniel Brunn schrieb:
> Das stimmt, aber zum debuggen ist es für mich als Anfänger auch ok.

Dann solltest du allerding alles mit delay_us() und delay_ms() mit 
größter Vorsicht genießen. Die mögen gar nicht, wenn die Optimierung 
abgeschaltet ist (siehe Kommentar in delay.h).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.