www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Danke, Atmel, für EIMSK und EICRA


Autor: verzweifler (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Do nich füüür, wie der Hamburger sagt,

dann OUT EIMSK,rr zuzulassen, aber nur STS EICRA,rr ist schon große 
Klasse.

Ja, ja ich weiß, man kann sich ein Makro schreiben oder ganz hinten im 
Datenblatt nachgucken, aber ich meine es gehört vorne rein, und genau da 
wo man es braucht...

Danke jedenfalls für 6 Stunden verzweifelte Fehlersuche, warum INT0 
nicht auslöst. Das wird mir nicht wieder passieren. Und dank Google und 
Suchfunktion vielleicht jmndn. anderen auch nicht, der das dann hier 
findet.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
verzweifler schrieb:
> Ja, ja ich weiß, man kann sich ein Makro schreiben oder ganz hinten im
> Datenblatt nachgucken

Oder einfach in C programmieren, dann kümmert sich der Compiler.


Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
P.S.:
Was war denn an der Fehlermeldung:
"error: Operand 1 out of range: 0x69"
so unklar, daß es 6 Stunden gedauert hat?


Peter

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>dann OUT EIMSK,rr zuzulassen, aber nur STS EICRA,rr ist schon große
>Klasse.

Bei einer Fehlermeldung sollte man eigentlich stutzig werden.

MfG Spess

Autor: verzweifler (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Habe mich wohl nicht klar genug ausgedrückt und ja auch nicht gesagt, 
dass es nicht meine Blödheit ist.

Ich hatte die Variante: beides, mit STS EICRA und STS EIMSK.

Es gibt aber KEINE Fehlermeldung bei STS EIMSK,rr.
Da ist ja auch nichts falsch dran, nur es fehlt ein Offset von 0x20.

Die Fehlermeldung gibt es nur bei OUT EICRA,rr. Das hatte ich nicht.

Das mit C ist dann aber wohl eher ein Witz.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
verzweifler schrieb:

> Das mit C ist dann aber wohl eher ein Witz.

Eigentlich nicht.
genau deshalb programmieren hier viele C: damit man sich genau um 
solchen Scheiss nicht kümmern muss und trotzdem performancemässig 
ziemlich nahe an dem drann ist, was ein guter Assemblerprogrammierer 
auch hin kriegt. Einen kleinen Penalty zahlt man, aber der ist es wert.

Autor: verzweifler (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Bei zeitkritischen Anwendungen (im 500 ns Bereich) ist C für mich leider 
keine Alternative, wenn ich nicht weiss, was der Compiler draus macht. 
Jedesmal in den LST file zu gucken, ist auch nicht sinnfüllend. Also 
bleibe ich bei ASM, habe erfreuliche 32 Register und kann mit MOV a,b 
innerhalb von 50 ns ein byte wegspeichern und wiederholen. Das ist doch 
eigentlich toll.

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Dafür wurde inline-ASM erfunden. Den komplexen Teil machst du in C, das 
performancekritische in ASM.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

verzweifler schrieb:

> Ich hatte die Variante: beides, mit STS EICRA und STS EIMSK.
>
> Es gibt aber KEINE Fehlermeldung bei STS EIMSK,rr.
> Da ist ja auch nichts falsch dran, nur es fehlt ein Offset von 0x20.
>
> Die Fehlermeldung gibt es nur bei OUT EICRA,rr. Das hatte ich nicht.

naja, ich nehme eigentlich immer erstmal OUT xxx,rr und schau mir dann 
das Gemecker an.
Sonst schau ich schon aus Faulheit erstmal in meine alten Sourcen, ob 
ich sowas schonmal für diesen AVR benutzt habe und kopiere die Stelle 
dann gleich und passe an.

Gruß aus Berlin
Michael

Autor: [Frank] (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dafür eignen sich sehr einfach die IO-Makros (AVR001), die je nach 
IO-Adresse eben die notwendigen Instruktionen einsetzen.

Autor: C-Verweigerer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dafür eignen sich sehr einfach die IO-Makros (AVR001), die je nach
> IO-Adresse eben die notwendigen Instruktionen einsetzen.

Dann kann man ja gleich C benutzen. :-/

Ich halte ein ausgedrucktes Register-Summary für sinnvoll. Das dient 
auch gleich noch als Inhaltsverzeichnis (Seiten-Referenz) auf das PDF, 
falls noch Fragen zu den Registern und ihren Bits geklärt werden müssen.

Autor: icke (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Der Tenor der Nörgler stößt mir etwas auf, aber ich muss mich auch 
anschließen, daß man das Datenblatt sinnvoller aufbauen könnte. Was aber 
auf eigentlich jedes Datenblatt zutrifft, oder? ;-)
Die c-Ignoranz der, ja was eigenltich 'Verweigerer' triffts ja nicht 
wirklich, finde ich aber irgendwie fast amüsant.
Können ja hoffentlich nur Bastler sein, denn wer würde im beruflichen 
Bereich unnötige (ja unnötige, denn ein ganzes Programm wird schwerlich 
soooo zeitkritisch werden können, wohl eher an mieserabler Planung 
leiden) Mühen auf sich nehmen und dabei noch als Assembler Hecht 
fühlen...

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
verzweifler schrieb:
> Danke jedenfalls für 6 Stunden verzweifelte Fehlersuche, warum INT0
> nicht auslöst. Das wird mir nicht wieder passieren. Und dank Google und
> Suchfunktion vielleicht jmndn. anderen auch nicht, der das dann hier
> findet.

Hey, danke! Genau daran habe ich gerade auch gesessen.

Autor: Viktor (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
googlesuche: "avr eimsk"
und dieser Thread ist das erste Ergebnis. ;-D
hatte gerade das gleiche Problem.
Funktionierte trotz fehlerfreiem kompilieren nicht, weder im Simulator 
noch im µC, daher möchte ich ein "Dankeschön" an den Autor richten.

Lieben Gruß

Autor: npn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Viktor schrieb:
> googlesuche: "avr eimsk"
> und dieser Thread ist das erste Ergebnis. ;-D

Hätte mich auch gewundert, wenn es Google nach 5 Jahren nicht in seine 
Suchergebnisse aufgenommen hätte... :-))

Autor: Peter Dannegger (peda)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
;----------------------  macros for extended IO access -------------------
.macro  xout
.if  @0 > 0x3F
  sts  @0, @1
.else
  out  @0, @1
.endif
.endmacro
;---------------------------
.macro  xin
.if  @1 > 0x3F
  lds  @0, @1
.else
  in  @0, @1
.endif
.endmacro
;---------------------------
.macro  xlpm
.if FLASHEND > 0x7FFF
  elpm  @0, @1
.else
  lpm  @0, @1
.endif
.endmacro
;------------------------------------------------------------------------

Autor: Pedda (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Ist jetzt nicht dein ernst, oder?
Wer soll sich denn so einen Makrofu... merken?

Ne, dann lieber C und den Optimierter auf warp.

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.