Hallo, bin gerade beim ATmega2560. Gibt es eine einfache Erklärung warum die unteren Register von 0x00 bis 0x3F noch eine 2. Adresse mit einen Offset von 0x20 haben? Warum haben die eine 2. Adresse und alle anderen ab 0x60 nicht? Warum gibt es diese Unterscheidung bzw. dieses Offset überhaupt? Ab 0x15 bis 0x3F sind es ja keine I/O Register mehr. So zum Verständnis gefragt.
Veit D. schrieb: > Gibt es eine einfache Erklärung warum die unteren Register von 0x00 bis > 0x3F noch eine 2. Adresse mit einen Offset von 0x20 haben? Ja: das sind einfach zwei unterschiedliche Adressbereiche. Der eine ist der IO-Adressbereich, der geht von 0 bis 63 (0x3F). Mehr Platz ist in den entsprechenden Befehlen (IN/OUT) einfach nicht, dafür sind sie schnell. Für die ursprünglichen AVRs genügte dieser Bereich, aber in dem Maße, wie die Peripherie wuchs, reichte es irgendwann nicht mehr. Die IO-Bereiche waren allerdings beim AVR schon immer auch in den normalen Speicherbereich gemappt und von da aus zugreifbar, dann halt mit 2 Takten Zugriffszeit. Allerdings hatte man sich beim Design dazumals entschlossen, auf den Speicheradressen 0 bis 31 die CPU-Register zu spiegeln, deshalb taucht die Peripherie dort erst ab Adresse 32 (0x20) auf. Das ist just der Offset, den du siehst. Da das Einblenden der CPU-Register in den Speicherbereich keinen wirklichen praktischen Nutzen hat, hat man dies beim Xmega dann aufgegeben, dort sind beide Adressen gleich.
:
Bearbeitet durch Moderator
Hallo, Dankeschön. Dann muss ich nur mit den Offsetadressen (wenn soweit vorhanden) arbeiten. Das erleichtert vieles im Umgang damit.
Wenn du nicht gerade in Assembler programmieren willst, musst du dich eigentlich gar nicht drum kümmern. Die symbolischen Namen werden vom C-Compiler passend automatisch umgesetzt.
Jörg W. schrieb: > Wenn du nicht gerade in Assembler programmieren willst, musst du dich > eigentlich gar nicht drum kümmern. Die symbolischen Namen werden vom > C-Compiler passend automatisch umgesetzt. Üblicherweise ist das korrekt. Ich habe bisher erst einmal absichtlich den Registerzugriff über RAM ld/st Befehle genutzt: eine Assemblerimplementierung für Shuffling und Dummy S-Box lookups (DPA Countermeasure) für AES. Da gab es eine map mit den zufälligen/gemischten Registeradressen zum Umbenennen. War das effizienteste, das mir für diesen Zweck eingefallen ist. :-)
Hallo, der Grund warum ich Adressen hinterlegen möchte ist dem damaligen Thema geschuldet. Beitrag "[AVR] Unerwarteter Compilerfehler mit constexpr"
Das gleiche Problem hast du auch bei einigen AVRs (z.B. Attinys) mit dem Flash: das ist zusätzlich in den Daten-Adressbereich gemappt - FlashAdr 0 entspricht DatenAdr 0x8000 usw. Je nachdem wie du drauf zugreifst (z.B. LD vs LPM) musst du unterschiedliche Adressen benutzen.
Veit D. schrieb: > Gibt es eine einfache Erklärung warum die unteren Register von 0x00 bis > 0x3F noch eine 2. Adresse mit einen Offset von 0x20 haben? Weil das halt das Mapping des IO-Space in den SRAM-Space ist. Darunter liegt das "Registerfile", also das Mapping der MCU-Register in den SRAM-Space. Das ist im allgemeinen ziemlich nutzlos und wurde deswegen in späteren AVR8-Cores auch entsorgt. > Warum haben > die eine 2. Adresse und alle anderen ab 0x60 nicht? Weil halt der IO-Space nur 0x40 Adressen umfasst. Alle Register, die hier nicht reingepaßt haben, sind halt nur im SRAM-Space erreichbar. > Ab 0x15 bis 0x3F sind es ja > keine I/O Register mehr. Doch, natürlich. Es ist nur nicht mehr jede IO-Instruktion mehr darauf anwendbar. Oder anders ausgedrückt: auch der IO-Space ist nochmals segmentiert, einige Instruktionen (in, out) können jede Adresse im IO-Space ansprechen, andere hingegen (sbi, cbi, sbis, sbis) sind auf einen Teil davon beschränkt. Die Grenze ist übrigens 0x1f, nicht 0x15... Liest du einfach mal die "instruction set reference", dann wird klar, woher diese Beschränkungen kommen...
Jörg W. schrieb: > Da das Einblenden der CPU-Register in den Speicherbereich keinen > wirklichen praktischen Nutzen hat Bei Controllern ohne zusaetzlichen RAM (ATtiny11/12) war das durchaus nuetzlich, um mit Zeiger-Register und ld/st ueber ein Datenfeld iterieren zu koennen.
Arne schrieb: > Jörg W. schrieb: >> Da das Einblenden der CPU-Register in den Speicherbereich keinen >> wirklichen praktischen Nutzen hat > > Bei Controllern ohne zusaetzlichen RAM (ATtiny11/12) war das durchaus > nuetzlich, um mit Zeiger-Register und ld/st ueber ein Datenfeld > iterieren zu koennen. Ach. Das brennt mir schon seit der Antwort von Jörg auf der Seele. Sei umarmt, Bruder im Geiste. :-) Ich selbst habe etwas Ähnliches in einem Programm gemacht, um die Register zu sichern und wieder zu laden. Effektiv ist das natürlich einige Takte langsamer, zumal man das R30 und R31 sowie ein weiteres Register dennoch mit PUSH/POP behandeln muss. Aber der Code war dann doch ein klitzekleines Bisschen kleiner als 32 PUSH/POPs. Naja. Ist Offtopic, aber ich habs mir von der Seele geschrieben. :-)
Arne schrieb: > Bei Controllern ohne zusaetzlichen RAM (ATtiny11/12) war das durchaus > nuetzlich OK, stimmt, aller Anfang war ja der AT90S1200. Aber danach hätte man das Feature auch wirklich sang- und klanglos in der Versenkung verschwinden lassen können.
Arne schrieb: > Jörg W. schrieb: >> Da das Einblenden der CPU-Register in den Speicherbereich keinen >> wirklichen praktischen Nutzen hat > > Bei Controllern ohne zusaetzlichen RAM (ATtiny11/12) war das durchaus > nuetzlich, um mit Zeiger-Register und ld/st ueber ein Datenfeld > iterieren zu koennen. Ja, es gab glaub mal eine Appnote, die das nutze, um einen Ringpuffer in den Registern zu implementieren. Jörg W. schrieb: > Aber danach hätte man das Feature auch wirklich sang- und klanglos in > der Versenkung verschwinden lassen können. Ich fand dieses Feature immer irgendwie cool, wenn auch zugegebenermaßen eher nutzlos. Das war einfach was besonderes, das nicht jeder hat. :)
Rolf M. schrieb: > Das war einfach was besonderes, das nicht jeder hat. OK, das ist wahr. :-) Allerdings ist der Ärger, den dadurch die Verschiebung zwischen Memory und IO addresses für die Tools produziert hat, leider in keinem Verhältnis zum marginalen Nutzen, den das bei den allerersten AVRs mal gehabt hat. Sowohl GCC als auch avr-libc enthalten einige Verrenkungen, um trotzdem eine sinnvolle symbolische Abstraktion der IO-Register zu ermöglichen.
Jörg W. schrieb: > Allerdings ist der Ärger, den dadurch die Verschiebung zwischen Memory > und IO addresses für die Tools produziert hat, leider in keinem > Verhältnis zum marginalen Nutzen, den das bei den allerersten AVRs mal > gehabt hat. Sowohl GCC als auch avr-libc enthalten einige Verrenkungen, > um trotzdem eine sinnvolle symbolische Abstraktion der IO-Register zu > ermöglichen. Wenn das wirklich so wäre, würde irgendwas mit der Sprache nicht stimmen. In Assembler ist das wirklich trivial abzubilden. Da aber C glücklicherweises auch nur ein gepimpter Macroassembler ist, sollte es auch in C keine wirklich tiefgreifenden Verrenkungen bedeuten. Und tut es auch nicht... Eine andere Sache ist die Segmentierung des IO-Space, also die Tatsache, dass es IO-Space erster und zweiter Klasse gibt. DAS ist schon etwas aufwendiger zu behandeln, auf jeden Fall für den Codegenerator. Sehr wahrscheinlich geht es bei den von dir ermittelten "Verrenkungen" im wesentlichen eher um dieses Problem...
c-hater schrieb: > In Assembler ist das wirklich trivial abzubilden. Abhängig vom verwendeten Befehl (IN/OUT vs. LD*/ST*) eine unterschiedliche Adresse zu benutzen, ist in Assembler einfach abzubilden? Also
1 | IN R24, PINA |
wird (bspw.) assembliert als
1 | IN R24, 0x19 |
während
1 | LDR R24, PINA |
übersetzt wird zu
1 | LDR R24, 0x39 |
?
Jörg W. schrieb: > Abhängig vom verwendeten Befehl (IN/OUT vs. LD*/ST*) eine > unterschiedliche Adresse zu benutzen, ist in Assembler /einfach/ > abzubilden? Nein, natürlich nicht. Das Problem ist: du zäumst das Pferd von der falschen Seite auf. Das Problem, vor dem ein Compiler steht, (oder auch das Macro eines Assemblers) ist ein ganz anderes, nämlich: Entscheide für einen beliebigen IO-Zugriff, ob er sich über In/Out erledigen läßt oder ob lds/sts verwendet werden muß. Vorgabe ist also die Adresse, nicht die Operation. Und das ist wirklich einfach, entsprechende Asm-Makros wurden hier schon mehrfach gepostet. Und natürlich macht das auch dein geliebter C-Compiler effektiv exakt so... Aber ich kann natürliche gerne noch einmal meine ganz persönlichen Asm-Makros posten, damit selbst du (vielleicht irgendwann) weißt, worüber wir hier eigentlich reden... .MACRO UIN .IF @1 < $40 in @0,@1 .ELSE lds @0,@1 .ENDIF .ENDMACRO .MACRO UOUT .IF @0 < $40 out @0,@1 .ELSE sts @0,@1 .ENDIF .ENDMACRO Das ist doch wirklich trivialster Scheiß. Ich hätte dich für kompetenter gehalten... Das Problem ist eben nur, dass sich das nur für in/out so einfach abhandeln läßt. Es gibt ein Register als Quelle oder Ziel, und eine Adresse, auf die es lesend oder schreibend zuzugreifen gilt. Und welche Opcode zu verwenden ist, kann problemlos aus der Adresse abgeleitet werden. Bei den anderen Operationen im IO-Space (also die möglicherweise verwendbaren Assembler-Operationen sbi, cbi, sbis, sbic) ist das aber leider nicht so. Die lassen sich nur unter Verwendung eines zusätzlichen MCU-Registers abbilden, wenn das Target halt nicht im IO-Space unterhalb 0x20 liegt, in dem eine direkte Abbildung auf eben diese Instruktionen möglich ist. Kurzfassung: du hast keine Ahnung, wovon du redest (aber offensichtlich einen Haufen Arschkriecher, die dich bewertungstechnisch trotzdem gut aussehen lassen wollen). Mir sträuben sich die Nägel, wenn ich solche Bewertungen sehe (zum Glück schaue ich sie mir nur selten an, weil meist nur als Gast unterwegs...). Ich hoffe, dir ist wohl bei dieser penetranten Massage des Analgangs... Bedenklich finde ich allerdings, dass du auch Moderator bist. Moderator ohne hinreichende Kompetenzen in der Sache kann eigentlich nur falsch sein...
c-hater schrieb: > Moderator ohne hinreichende Kompetenzen in der Sache kann eigentlich nur > falsch sein Hauptsache, du hast Kompetenz. Eigentlich wollte ich was erwidern, aber nach dem Lesen dieses Satzes lasse ich dein Pamphlet ohne weiteren Kommentar so stehen.
Könnte bitte einer der Herren Moderatoren den obigen flatus von c-hater löschen?
Jörg W. schrieb: > Eigentlich wollte ich was erwidern, aber nach dem Lesen dieses Satzes > lasse ich dein Pamphlet ohne weiteren Kommentar so stehen. Mir wäre es lieber, du würdest dich irgendwie zu den besprochenen Sachverhalten äußern. Das Gehakele um irgendwelche "Meinungen" ist absolut huppse. Das nützt niemandem. Am Ende zählt nur eins: Fakten.
c-hater schrieb: > Mir wäre es lieber, du würdest dich irgendwie zu den besprochenen > Sachverhalten äußern. Nicht mit dem unsinnigen Ton, den du da anschlägst. Da ich aber selbst in die Diskussion involviert bin, werde ich das natürlich nicht löschen. Wenn es also gelöscht wird, dann weil auch andere Moderatoren der Meinung sind, dass dieser Tonfall einfach in diesem Forum unangebracht ist.
Jörg W. schrieb: > Nicht mit dem unsinnigen Ton, den du da anschlägst. Ich?! Ich versuche ständig, die Diskussion in sachliche Bahnen zu lenken, allen Meinungs-Scheiß daraus zu entfernen. Ich versuche auch, dich zu Äußerungen in der Sache zu bewegen, zu sachlichen Erwiderungen auf die von mir vorgebrachten sachlichen Argumente. Also irgendwas läuft hier definitiv schief...
Hallo, ich muss auch dazu was sagen an c-hater. Du bleibst eben gerade jetzt NICHT mehr sachlich in deinen Äußerungen. Sachlich wäre gewesen alle Beleidigungen rauszulassen. Sachlich wäre gewesen wenn du mit deiner Kompetenz, die dir sicherlich niemand streitig macht, dich nur auf das Thema der Adressenunterscheidung zu konzentrieren. Du hast es doch mit deinem Wissen gar nicht nötig andere zu beleidigen. Schreib einfach wie es nach deiner Meinung nach richtig ist oder wie es laut deiner Meinung einfacher ist und gut ist. Manchmal liegen zwischen vermeintlich unterschiedlichen Meinungen nur falsch formulierte Sätze, weil alle eigentlich irgendwie das Gleiche meinen, sich aber unterschiedlich ausdrücken. Im Grunde machst du dir deine Kompetenz mit deinen Beleidigungen im gleichem Atemzug zu Nichte. Das muss doch nicht sein.
Veit D. schrieb: > Im Grunde machst du dir deine Kompetenz mit deinen > Beleidigungen im gleichem Atemzug zu Nichte. Das muss doch nicht sein. Kompetenz hin oder her. Der Typ ist ein Psychopath, hochgradig krank. Ist ja nicht seine erste Entgleisung hier... Ja lieber c-hater, Du mußt jetzt ganz tapfer sein: Du bist ein armes Schwein
Veit D. schrieb: > ich muss auch dazu was sagen an c-hater. > Du bleibst eben gerade jetzt NICHT mehr sachlich in deinen Äußerungen. > Sachlich wäre gewesen alle Beleidigungen rauszulassen. Grundsätzlich stimme ich dir zu. Die Sache ist nur: Welcher Beleidigungen habe ich mich denn eigentlich schuldig gemacht? Ich kann keine sehen. Könntest du sie spezifizieren, sozusagen als neutraler Beobachter?
Mitleset schrieb: > Ja lieber c-hater, Du mußt jetzt ganz tapfer sein: Du bist ein armes > Schwein Mag sein, wenn's dich glücklich macht. Allerdings weiß ich im Gegensatz zu dir nachweisbar, wovon ich rede, wenn ich rede...
c-hater schrieb: > Ich?! > > Ich versuche ständig, die Diskussion in sachliche Bahnen zu lenken, > allen Meinungs-Scheiß daraus zu entfernen. Ich versuche auch, dich zu > Äußerungen in der Sache zu bewegen, zu sachlichen Erwiderungen auf die > von mir vorgebrachten sachlichen Argumente. > > Also irgendwas läuft hier definitiv schief... Naja, wirklich jeder sagt dir hier, dass du dich im Ton vergriffen hast. Und du kommst immer noch nicht auf die Idee, dass deine Wortwahl vielleicht nicht doch ungünstig war? c-hater schrieb: > Welcher > Beleidigungen habe ich mich denn eigentlich schuldig gemacht? Also das hier: c-hater schrieb: > Kurzfassung: du hast keine Ahnung, wovon du redest (aber offensichtlich > einen Haufen Arschkriecher, die dich bewertungstechnisch trotzdem gut > aussehen lassen wollen). Mir sträuben sich die Nägel, wenn ich solche > Bewertungen sehe (zum Glück schaue ich sie mir nur selten an, weil meist > nur als Gast unterwegs...). Ich hoffe, dir ist wohl bei dieser > penetranten Massage des Analgangs... Kann durchaus als Beleidigung aufgefasst werden. Und das willst du nicht erkannt haben? Wer genau soll dir das jetzt glauben? However, hier jetzt weiter zu diskutieren bringt herzlich wenig, deine sachbezogenen Ausführungen erscheinen mir richtig. Überdenke einfach nur bei deinen nächsten Posts doch mal die Wortwahl, lass die unterschwelligen Vorwürfe, egal gegen wen, einfach weg und du wirst sehen, du bekommst auch mehr Antworten ;)
M. K. schrieb: > deine sachbezogenen Ausführungen erscheinen mir richtig Selbst das sind sie nicht, aber darüber rede ich mit ihm erst dann, wenn er einsieht, dass solch eine Wortwahl nicht ins Forum gehört. Ich hatte es ihm schon einmal geschrieben: die Akzeptanzgrenze für das Forum ist nicht, ob bereits eine strafrechtlich relevante Beleidigung vorliegt. Eine vernünftige Diskussion erfordert, dass man sich deutlich unterhalb dieser Grenze auszudrücken gewillt ist. Sich selbst grenzenlose Kompetenz zuzuschreiben und andere der völligen Inkompetenz zu bezichtigen, ist sowieso eine schlechte Basis für jegliche Diskussionen.
c-hater schrieb: > > Grundsätzlich stimme ich dir zu. Die Sache ist nur: Welcher > Beleidigungen habe ich mich denn eigentlich schuldig gemacht? > > Ich kann keine sehen. Könntest du sie spezifizieren, sozusagen als > neutraler Beobachter? Hallo, weil du nachgefragt hast, bekommste natürlich eine Antwort. Wir reden vom Posting vom 7.04.20 22:44 Uhr. Du beginnst absolut sachlich. Alles i.O. Unterhalb vom Makro erscheint dieser Satz. > Ich hätte dich für kompetenter gehalten... Nicht schön, aber wenn man nicht dünnhäutig ist, kann man das bewußt überlesen und gut ist. Kleine Stichelei - geschenkt. Dann gehts wieder sehr sachlich weiter. Am Ende teilst du ohne erkennbaren Grund leider gegen Jeden aus. > (aber offensichtlich einen Haufen Arschkriecher, Hier gegen alle Forenteilnehmer. > Ich hoffe, dir ist wohl bei dieser penetranten Massage des Analgangs und hier gegen Jörg direkt Hättest du die letzten beiden "Sätze" einfach weggelassen, wäre in meinen Augen alles okay gewesen. Meistens hilft es einfach einen Tag später zu antworten. Also die Antwort lesen und nicht sofort darauf zu reagieren. Gelingt vielleicht nicht immer, aber immer öfters wäre gut. :-) Das wäre meine neutrale Einschätzung zum Thema.
Beitrag #6213050 wurde von einem Moderator gelöscht.
Moby schrieb im Beitrag #6213050:
> Auch das ist eine Beleidigung.
Also ich hätte da jetzt eher auf einen kranken Menschen getippt ;) :D
M. K. schrieb: > Also ich hätte da jetzt eher auf einen kranken Menschen getippt Stimmt schon, aber diese Einschätzung steht eher einem Arzt zu denn einem Forenteilnehmer.
Jörg W. schrieb: > Stimmt schon, aber diese Einschätzung steht eher einem Arzt zu denn > einem Forenteilnehmer. Das ist richtig, aber im Kontext hier sollte man nicht alles so wortwörtlich oder gar persönlich nehmen. Alles easy ;)
Beitrag #6213888 wurde von einem Moderator gelöscht.
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.