mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Instruction Set für C


Autor: blub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich wollte mal fragen ob es auch sowas wie "Instruction Set" für C 
Befehle gibt oder ob ich mir die ASM Befehle ableiten muss.
Im Grunde interessiert mich wie lange der µC für einen gewissen 
Codeabschnitt braucht und wie viel CPU Last entsteht.

Wäre nett wenn mir jemand helfen könnte.

Autor: Lorenz .. (lorenz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Das kommt auf viele Faktoren an. Der verwendete Compiler optimiert je 
nach eingestelltem Grad unterschiedlich, so dass du da keine generellen 
Aussagen treffen kannst. Wenn du genau wissen willst wie lange eine 
Passage braucht: Schau im Output des Compilers nach, da stehen die 
ASM-Befehle drin die du dann mit den entsprechenden Zeiten aufsummieren 
kannst. So weißt du dann wie lange jede Sequenz genau braucht.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowas gibt es nicht und kann es nicht geben. Zumal das absolut gleich 
aussehende C-Statement abhängig von allerlei Randbedingungen mal 0 
Takte, mal 100 Takte dauern kann.

Wenn dich das exakt interessiert, dann wirst du kaum darum herum kommen, 
in den vom Compiler erzeugten Code reinzuschauen. Beim GCC wäre das LSS 
File dafür geeignet. Oder du misst die Zeit.

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Angenommen Du nutzt den GCC....
Du findest das ganze im Listingfile, das avr-objdump generieren kann.
Dort sind die C-Source Zeilen aufgeführt und dazu die Assembler-
anweisungen. Z.B. so:

avr-objdump -h -S executable.elf  > executable.lss

Man kann nicht pauschal sagen, was der Compiler daraus generiert,
da es von den Optimierungen abhängt. Wenn Du eine Optimierungssufe
wählst, dann mußt Du im Listig schon etwas aufpassen um den 
dazugehörigen
Assemblercode ausfindig zu machen. Geht aber.

Autor: blub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok danke schön das reicht mir ja auch schon wenn ich den asm code hab 
kann ich die zeit ja auch aus rechnen. und wie sieht es mit der cpu 
auslastung aus?

Autor: Ekschperde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LOL

Wie wärs mit 100%?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> und wie sieht es mit der cpu
> auslastung aus?

Ich lese die CPU-Auslastung gern mit Oszilloskop oder der 
Tastgradmessung des Multimeters aus. Dazu schalte ich zu Beginn jeder 
ISR einen Portpin ein, den ich am Ende der Mainloop vor dem Befehl SLEEP 
wieder ausschalte. Ich programmiere AVRs allerdings in ASM.

...

Autor: Joan P. (joan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hehe

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes Lux wrote:

> Ich programmiere AVRs allerdings in ASM.

Meinst du, in Cobol oder FORTH würde man das komplett anders lösen?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Hannes Lux wrote:
>
>> Ich programmiere AVRs allerdings in ASM.
>
> Meinst du, in Cobol oder FORTH würde man das komplett anders lösen?

Mit Sicherheit nicht. Ich wollte damit begründen, warum ich auf den 
anderen Teil der Frage (Liste der AVR-C-Befehle) nicht weiter eingehe.
Dann wollte ich mir damit auch die Nachfrage ersparen, mit welchen 
"AVR-C-Befehlen" man das realisiert. ;-)

Ich wollte damit keinesfalls etwas gegen C sagen, höchstens, dass ich zu 
doof dazu bin.

Vielleicht solltest Du beim Lesen meiner Texte aber einfach nur mal das 
Humor-Flag in Deinem SREG setzen und nicht jedes Wort auf die Goldwaage 
legen...

Beste Grüße,
Hannes

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du AVR Studio verwendest kannst du mit dem eingebauten Simulator 
genau anzeigen lassen wieviele Takte schon vergangen sind. Das kann dir 
viel Rechenarbeit ersparen.
Die Auslastung ist quasi immer 100%, da du ja immer was machst. Eine 
while(1) Schleife wartet ja nicht, sondern führt ständig Sprungbefehle 
aus.
Wenn du eine Schleife hast, in der 100 Additionen gemacht werden 
passiert das immer mit der maximalen Geschwindigkeit, braucht jedoch 
insgesamt 100 Takte (im Optimalfall) für einen Durchlauf. Wenn du eine 
Schleife hast in der 10 Additionen durchgeführt werden dauert das nur 10 
Takte, aber gerechnet wird dennoch mit der gleichen Geschwindikeit. Die 
Auslastung bleibt daher 100%, da er einfach nicht schneller rechnen 
kann. Man könnte die Auslastung mehr oder weniger nur Schätzen, indem du 
guckst wieviel Takte du mit sinnvollen Arbeiten machst (also alles außer 
while(1) wenn du so willst). Wenn du 1000 Takte wartest und nur 100 
Takte rechnest ist die Auslastung daher 10%. Da bei einem µC erstmal 
kein Betriebssystem drauf ist, das den zeitlichen Ablauf der Prozesse 
und Threads steuert, kann nur sequentiell gearbeitet werden. Ein 
betriebssystem würde hingegen einen anderen Prozess arbeiten lassen 
wärend der andere wartet.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes Lux wrote:

> Mit Sicherheit nicht. Ich wollte damit begründen, warum ich auf den
> anderen Teil der Frage (Liste der AVR-C-Befehle) nicht weiter eingehe.

Ach so...

> Vielleicht solltest Du beim Lesen meiner Texte aber einfach nur mal das
> Humor-Flag in Deinem SREG setzen und nicht jedes Wort auf die Goldwaage
> legen...

Danke, gleichfalls. ;-)  Ich hatte auch nur vergessen, den Smiley
dahinter zu setzen (bzw. hatte geglaubt, dass die Wahl zweier eher
exotischer Programmiersprachen dies implizit andeuten würde).

Die Programmiersprache C kennt übrigens den Terminus "Befehl" gar nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.