Forum: Compiler & IDEs In C erkennen, dass man im Simluator ist


von Andree S. (amshh)


Lesenswert?

Moin,

die Suche brachte mich nicht weiter ... also daher jetzt hier folgende 
Frage:

Ich benutze (seit wenigen Tagen, bin also noch recht grün) WINAVR GCC im 
AVRStudio 4. Wenn ich dort den Simulator benutze und im Programm 
Zeitschleifen habe, dauert das natürlich ziemlich lange. Der Simulator 
ist verständlicherweise im RUN-Mode nicht so schnell wie das Ziel-System 
(ATmega48). Daher ändere ich, wenn ich simulieren will, vorher einige 
Werte bzw. setze sie zurück, wenn ich das Programm in den Atmega 
übertragen will.

Gibt es eine Möglichekit (#ifdef ???) im GCC zu erkennen, ob man im 
Simulator ist ? Dann könnte ich nämlich davon abhängig die Werte für 
beide Arten einstellen. Und würde nicht jedesmal dumm schauen, wenn im 
Zielsystem nichts funktioniert, weil ich vergessen habe, die Werte 
wieder umzusetzen.

Vielen Dank

Gruß aus Hamburg
Andree

von Karl H. (kbuchegg)


Lesenswert?

Andree Stolze schrieb:

> Gibt es eine Möglichekit (#ifdef ???) im GCC zu erkennen, ob man im
> Simulator ist ?

Nein.
Denn wenn das Programm compiliert wird, steht ja noch nicht fest wo es 
läuft.
Und ein Simulator soll sich möglichst identisch zur realen Hardware 
verhalten

> Dann könnte ich nämlich davon abhängig die Werte für
> beide Arten einstellen. Und würde nicht jedesmal dumm schauen, wenn im
> Zielsystem nichts funktioniert, weil ich vergessen habe, die Werte
> wieder umzusetzen.

du kannst dir ja selber ein #define machen und alle Dinge davon abhängig 
machen. Dann ist es mit dem auskommentieren eines #define getan um den 
Code umzustellen. Automatisch gehts dann zwar immer noch nicht, aber 
zumindest deutlich angenehmer.

von Andree S. (amshh)


Lesenswert?

Hallo,

vielen Dank erstmal.

>Nein.
>Denn wenn das Programm compiliert wird, steht ja noch nicht fest wo es
>läuft.
>Und ein Simulator soll sich möglichst identisch zur realen Hardware
>verhalten

Nein, natürlich nicht. Aber es hätte ja sein können, dass der 
Studio-Simulator beim Start irgend etwas setzt, das man hätte abfragen 
können.

>du kannst dir ja selber ein #define machen und alle Dinge davon abhängig
>machen. Dann ist es mit dem auskommentieren eines #define getan um den
>Code umzustellen. Automatisch geht

Das ist allerdings ein Vorschlag, auf den ich auch selbst hätte kommen 
können .... :-(( Danke !

A.

von Michael H. (michael_h45)


Angehängte Dateien:

Lesenswert?

Informier dich doch mal über Proteus ISIS.

Ist ein Schaltungssimulator, der ein Plugin fürs AVR-Studio mitbringt.
Du kannst deine komplette Schaltung inklusive AVR aufbauen und dann aus 
dem AVR-Studio per Proteus voll debuggen.
Sprich: Breakpoints, Register lesen, Variablen beobachten, Single Step, 
uswusf.

Zusätzlich kann Proteus Breakpoints einbauen. Z.B. wenn eine Spannung 
überschritten, eine Zeit abgelaufen oder der Wert einer Variable 
verändert ist.

Uswusf.
Ein geniales Tool, das den vollen Funktionsumfang in der Demo 
mitbringt. Allerdings kann man nicht speichern. Den PC also nicht 
ausschalten, sondern nur in Powerdown fahren und das Problem ist 
"umgangen".

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael H. schrieb:
> Informier dich doch mal über Proteus ISIS.

Das hat doch aber mit seinem Problem nun rein gar nichts zu tun.
Die vorhandenen Warteschleifen brauchen dann trotzdem noch ewig.

von Mirko (Gast)


Lesenswert?

Du kannst ja einen nicht benutzten I/O Pin abfragen - in der Schaltung 
ist er auf Masse, im Simulator legst du ihn (virtuell) auf High.

Dann kann dein Programm entsprechend reagieren.

Viele Grüße,

Mirko

von Michael H. (michael_h45)


Lesenswert?

Jörg Wunsch schrieb:
> Das hat doch aber mit seinem Problem nun rein gar nichts zu tun.

Naja, das "rein gar nichts" will ich mal bestreiten.
- Der TO will simulieren, sonst hätte er die Schaltung aufgebaut.
- Der Simulator im AVR-Studio ist weit von Echtzeit weg. Proteus kann 
Echtzeit. Die Vermutung, dass eine reale Warteschleife in Echtzeit 
abwartbar ist, ist nicht verwegen.

Ja, meine Antwort hat wenig mit dem Betreff zu tun, ich bin aber 
trotzdem der Meinung, dass sie dem TO helfen kann.

von Peter D. (peda)


Lesenswert?

Michael H. schrieb:
> - Der Simulator im AVR-Studio ist weit von Echtzeit weg.

Das kannste aber laut sagen.

Ein uralter 8051-Simulator, war zwar in DOS, lief aber schon auf nem 
100MHz Pentium in Echtzeit (8051 bei 12MHz).
Warum das heutzutage bei 3GHz nicht mehr gehen soll, ist mir ein Rätsel.


Peter

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Michael H. schrieb:

> - Der Simulator im AVR-Studio ist weit von Echtzeit weg.

Wieso? Er braucht eben echt Zeit zum Simulieren ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael H. schrieb:
> Proteus kann
> Echtzeit.

Nun, dann hättest du vielleicht genau dieses Feature in deinem Beitrag
nennen sollen, statt allerlei Dinge, nach denen der OP nicht gefragt
hatte. ;-)  Ist natürlich richtig, auf diese Weise kann man das
Problem durchaus auch lössen.

von Michael H. (michael_h45)


Lesenswert?

Ja, da muss ich dir Recht geben. Ich bin nur immer wieder mal (zu) 
begeistert von dem Tool.

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.