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.
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
P.S.: Was war denn an der Fehlermeldung: "error: Operand 1 out of range: 0x69" so unklar, daß es 6 Stunden gedauert hat? Peter
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
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.
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.
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.
Dafür wurde inline-ASM erfunden. Den komplexen Teil machst du in C, das performancekritische in ASM.
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
Dafür eignen sich sehr einfach die IO-Makros (AVR001), die je nach IO-Adresse eben die notwendigen Instruktionen einsetzen.
> 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.
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...
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.
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ß
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... :-))
1 | ;---------------------- macros for extended IO access ------------------- |
2 | .macro xout |
3 | .if @0 > 0x3F |
4 | sts @0, @1 |
5 | .else |
6 | out @0, @1 |
7 | .endif |
8 | .endmacro |
9 | ;--------------------------- |
10 | .macro xin |
11 | .if @1 > 0x3F |
12 | lds @0, @1 |
13 | .else |
14 | in @0, @1 |
15 | .endif |
16 | .endmacro |
17 | ;--------------------------- |
18 | .macro xlpm |
19 | .if FLASHEND > 0x7FFF |
20 | elpm @0, @1 |
21 | .else |
22 | lpm @0, @1 |
23 | .endif |
24 | .endmacro |
25 | ;------------------------------------------------------------------------ |
Ist jetzt nicht dein ernst, oder? Wer soll sich denn so einen Makrofu... merken? Ne, dann lieber C und den Optimierter auf warp.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.