In C erkennen, dass man im Simluator ist

OP #2016400
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
#2016422
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.
OP #2016546
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.
#2016572
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".
Angehängte Dateien:
Gast #2016630
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
#2016652
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren