Forum: Mikrocontroller und Digitale Elektronik AVR Studio Simulation aktiv


von Gad Z. (gad)


Lesenswert?

Hallo zusammen,
ich benutze AVR Studio 4 und habe ein Problem mit der Simulation.
Ich habe in meinem Programm einen TWI Bus.
In der Simulation bleibt das Programm immer beim Initialisieren des TWI 
hängen weil sich der Status nicht ändert (weil ja garkein physikalischer 
Bus vorhanden ist).
Kann ich irgendwie abfragen im Programm abfragen, ob das Programm in der 
Simulation läuft oder in realen Microprozessor?

von stefan us (Gast)


Lesenswert?

Du könntest durch Soft-TWI antesten, ob ein bekanntes Gerät am TWI Bus 
antwortet. Im Emulator wird das nicht der Fall sein.

von Gad Z. (gad)


Lesenswert?

Ja das könnte ich vielleicht.
Dachte es gäbe eine einfache Variante das herauszufinden.

von spess53 (Gast)


Lesenswert?

Hi

Schon mal die Known Issues (Simulator Hilfe) gelesen?

Unsupported modules

Simulation of TWI, USI and analog peripheral is not yet implemented. All 
instructions, interrupts and other peripherals are supported. See the 
Simulator Modules for more information.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Keine Ahnung ob das noch funktioniert.
Mit den älteren Versionen vom AVR Studio (nicht Atmel Studio) konnte man 
mit dem HAPSIM dem Simulator prima nicht vorhandene Hardware 
vortäuschen.

http://www.helmix.at/hapsim/

von Gad Z. (gad)


Lesenswert?

spess53 schrieb:
> Hi
>
> Schon mal die Known Issues (Simulator Hilfe) gelesen?
>
> Unsupported modules
>
> Simulation of TWI, USI and analog peripheral is not yet implemented. All
> instructions, interrupts and other peripherals are supported. See the
> Simulator Modules for more information.

Ich will ja garnicht TWI simulieren.
ich will nur im Programmcode eine Unterscheidung machen, ob das Programm 
in der realen hardware oder im Simulator läuft.
Dann kann ich im Simulationsbetrieb die Aufrufe der nicht simulierbaren 
Module abschalten.

von c-hater (Gast)


Lesenswert?

Gad Zinkler schrieb:

> Dachte es gäbe eine einfache Variante das herauszufinden.

Man definiert einfach ein entsprechendes Symbol, ähnlich wie das 
verbreitet verwendete DEBUG-Symbol. Das kann man dann überall im 
Programm problemlos abfragen und entsprechenden Code erzeugen.

Natürlich gibt es dann letztlich zusätzlich zu den üblichen Debug- und 
Releasebuilds noch ein drittes Build. Blöderweise wird das von den 
üblichen IDEs nicht so einfach unterstützt, dafür ist schon ein wenig 
mehr Handarbeit erforderlich.

Aber von den Build-Problemen mal ganz abgesehen: Man muß natürlich sehr 
genau wissen, was man da im Detail tut, damit der erfolgreiche Lauf 
eines SimDebug-Builds im Simulator noch irgendeine Aussagekraft für die 
Lauffähigkeit des Releasebuilds auf bare metal besitzt...

In C, besonders wenn "C" eigentlich nur deshalb benutzt wird, um 
zusammengeklauten, nicht verstandenen Code fremder Leute benutzen zu 
können, wird das meistens eher nix werden...

Ich rechne dich zu dieser Kategorie, denn Leute die wirklich C können, 
wären sicher auch ohne ein Posting in einem Forum von ganz allein auf 
diese sehr naheliegende Idee gekommen...

von Gad Z. (gad)


Lesenswert?

Karl Heinz schrieb:
> Keine Ahnung ob das noch funktioniert.
> Mit den älteren Versionen vom AVR Studio (nicht Atmel Studio) konnte man
> mit dem HAPSIM dem Simulator prima nicht vorhandene Hardware
> vortäuschen.
>
> http://www.helmix.at/hapsim/

Danke für den Tip.
Zum Glück benutze ich noch AVR Studio 4.18 und der Simulator unterstützt 
bis V4.19 :-)

Habe den hapsim installiert und gestartet.
Allerdings kann ich kein Device auswählen weil die Liste leer ist.
Woran kann das liegen?

von Gad Z. (gad)


Lesenswert?

c-hater schrieb:
> Gad Zinkler schrieb:
>
>> Dachte es gäbe eine einfache Variante das herauszufinden.
>
> Man definiert einfach ein entsprechendes Symbol, ähnlich wie das
> verbreitet verwendete DEBUG-Symbol. Das kann man dann überall im
> Programm problemlos abfragen und entsprechenden Code erzeugen.
>
> Natürlich gibt es dann letztlich zusätzlich zu den üblichen Debug- und
> Releasebuilds noch ein drittes Build. Blöderweise wird das von den
> üblichen IDEs nicht so einfach unterstützt, dafür ist schon ein wenig
> mehr Handarbeit erforderlich.
>
> Aber von den Build-Problemen mal ganz abgesehen: Man muß natürlich sehr
> genau wissen, was man da im Detail tut, damit der erfolgreiche Lauf
> eines SimDebug-Builds im Simulator noch irgendeine Aussagekraft für die
> Lauffähigkeit des Releasebuilds auf bare metal besitzt...
>
> In C, besonders wenn "C" eigentlich nur deshalb benutzt wird, um
> zusammengeklauten, nicht verstandenen Code fremder Leute benutzen zu
> können, wird das meistens eher nix werden...
>
> Ich rechne dich zu dieser Kategorie, denn Leute die wirklich C können,
> wären sicher auch ohne ein Posting in einem Forum von ganz allein auf
> diese sehr naheliegende Idee gekommen...

da muss ich dich leider enttäuschen, ich gehöre nicht zu dieser 
Kategorie.
Habe allerdings ganz vergessen das es hier viele gibt die nur in C 
programmieren und das mit geklauten Programmcodes.
ich programmiere alles selbst und zwar in Assembler!
Von daher weiss ich ganz genau, welche Stellen meines Codes beim 
Simulator ausgelassen werden sollen.

Dann werde ich mir halt eine Hilfsvariable machen und compiliere dann 
das Programm einmal zum simulieren und einmal für die richtige Hardware.
So eine Hilfsvariable habe ich ohnehin schon um zu unterscheiden,
ob ich Bootloader oder Firmware oder beides compilieren will.
Also ansich nichts neues für mich, ich wollte es nur hier umgehen...

von c-hater (Gast)


Lesenswert?

Gad Zinkler schrieb:

> da muss ich dich leider enttäuschen, ich gehöre nicht zu dieser
> Kategorie.

Da hast du was falsch verstanden. Das wäre für mich keinesfalls eine 
Enttäuschung, sondern eher ein Licht am Ende eines Tunnels...

> ich programmiere alles selbst und zwar in Assembler!
> Von daher weiss ich ganz genau, welche Stellen meines Codes beim
> Simulator ausgelassen werden sollen.

Sehr gut.

> Dann werde ich mir halt eine Hilfsvariable machen

Hier befallen mich allerdings schon wieder die ersten Zweifel. Was um 
alles in der Welt ist in Asm eine "Variable"??? Sicher nicht das, was 
ich meine (und was man sinnvollerweise benutzen würde).

Also sowas:

.equ SIMDEBUG=1
oder für's Release
.equ SIMDEBUG=0

Und das ist dann eben nicht variabel, weder zur Compilezeit und schon 
garnicht zur Laufzeit. Zur Laufzeit ist es idealerweise nichtmal mehr 
vorhanden...

Wenn man z.B. will, daß im Simulator die Meßwerte einer ADC von PINA 
kommen (um diesen mit Stimulidaten füttern zu können), im Release aber 
von ADCH, dann schreibt man:

.IF SIMDEBUG
  in reg,PINA
.ELSE
  in reg,ADCH
.ENDIF

Da ist nix variabel. Am ehesten entspricht das Symbol SIMDEBUG noch 
einer Konstanten, denn man kann es im Code auch als solche verwenden.

Es ist aber keine echte Konstante, denn im fertigen Code kommt sie u.U. 
(z.B. bei obigem Beispiel) überhaupt nicht mehr vor. Sie ist also nur 
während des Übersetzens des Codes existent. Sowas nennt man eine 
"Entwurfszeitkonstante". Und die stellt bezüglich aller ihrer 
Eigenschaften so ziemlich das genaue Gegenteil zu einer Variablen dar...

von Gad Z. (gad)


Lesenswert?

c-hater schrieb:
> Hier befallen mich allerdings schon wieder die ersten Zweifel. Was um
> alles in der Welt ist in Asm eine "Variable"??? Sicher nicht das, was
> ich meine (und was man sinnvollerweise benutzen würde).
>
> Also sowas:
>
> .equ SIMDEBUG=1
> oder für's Release
> .equ SIMDEBUG=0
>
> Und das ist dann eben nicht variabel, weder zur Compilezeit und schon
> garnicht zur Laufzeit. Zur Laufzeit ist es idealerweise nichtmal mehr
> vorhanden...
>
> Wenn man z.B. will, daß im Simulator die Meßwerte einer ADC von PINA
> kommen (um diesen mit Stimulidaten füttern zu können), im Release aber
> von ADCH, dann schreibt man:
>
> .IF SIMDEBUG
>   in reg,PINA
> .ELSE
>   in reg,ADCH
> .ENDIF
>
> Da ist nix variabel. Am ehesten entspricht das Symbol SIMDEBUG noch
> einer Konstanten, denn man kann es im Code auch als solche verwenden.
>
> Es ist aber keine echte Konstante, denn im fertigen Code kommt sie u.U.
> (z.B. bei obigem Beispiel) überhaupt nicht mehr vor. Sie ist also nur
> während des Übersetzens des Codes existent. Sowas nennt man eine
> "Entwurfszeitkonstante". Und die stellt bezüglich aller ihrer
> Eigenschaften so ziemlich das genaue Gegenteil zu einer Variablen dar...

Oh man du bist ja so schlau... Entschuldigung das ich fälschlicherweise 
eine "Entwurfszeitkonstante" als Variable bezeichnet habe.
Trotzdem weiss ich sehr wohl mit solchen Konstanten umzugehen. Habe ja 
nicht erst seit heute folgenden Code in meinem Program

.IF EN_FIRMWARE == 1
;boot loader into boot section
.org  NRWW_START_ADDR
.include "Boot.asm"
.ENDIF

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.