Hallo, ich hab echt versucht das ganze zu googeln, aber mir ist immer noch nicht klar warum ich z.B. zu SRAM Adressen 0x800000 dazu addieren muss. Ich weiß nur, dass es an der Harvardarchitektur liegt, aber mehr schon auch nicht. Kann mir das einer erklären, oder einen erklärenden Link spendieren? :)
Der Offset, den du addieren musst, ist vom Systemaufbau abhängig. Genausogut kann das SRAM bei 0x000000 liegen und (z. B.) der Flash bei 0x100000. Was hier geschieht, nennt sich Address-Mapping. Intern wird das SRAM und der Flash dann auch ganz normal von 0x0000 beginnend adressiert. Die zusätzlichen "oberen" Bits bei der Adressierung (z. B. 0x80 in 0x800000) erlauben es aber, über einen Dekoder (einfache kombinatorische Logig) einen bestimmten Speicherbaustein zu selektieren. So wird z. B. bei einer Adresse, die mit 0x00 beginnt der Flash angesprochen und bei einer Adresse beginnend mit 0x80 das SRAM. Übrigens hat das nach meiner Auffassung aber nichts mit Harvard/von Neumann zu tun. mfg Reinhard
Mit Harvard hat das insofern zu tun, als die GCC binutils traditionell von einer Von-Neumann-Architektur mit einem einzelnen Gesamtadressraum ausgehen. Da dies auf AVR nicht zutrifft, werden die 3 Adressräume für ROM,RAM,EEPROM willkürlich an 3 verschiedenen Stellen in einem erfundenen Gesamtadressraum plaziert. Zu einem Problem kann es also kommen, wenn die AVRs irgendwann mehr als 2GB ROM enthalten (ATgiga44 oder so).
Hallo, A. K. wrote: > Zu einem Problem kann es also kommen, wenn die AVRs irgendwann mehr als > 2GB ROM enthalten (ATgiga44 oder so). wenn schon dann 4GB, mit 2GB wäre es ein ATgiga24... ;-) Gruß aus Berlin Michael
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.