hallo, schreibe gerade ein bericht über ein praktikum . mein betreuer wies mich daraufhin, in meinem Bericht zu erklären wie es möglich ist 256KByte flash mit dieser 8Bit-Architektur zu adressieren . hab jetzt nochmal in datenblatt nachgesehen .. also dort steht nur das es halt einen 17Bit breiten Programmcouter gibt. Instruktionen sind min 16 Bit breit. d.h. 2^17 =~ 128K * 2Byte pro Instruktion = ~ 256 KByte . ist das alles. also ich mein die 17Bit müssen ja auch gehandled werden vom prozessor - wie funktioniert das ? das ich das noch ein bissl vertiefe in meinem bericht.
Du hast dir die ANtwort doch schon selbst gegeben:
>>einen 17Bit breiten Programmcouter
Es gibt auch spezielle Instruktionen SFRs zur Handhabung. Nur ein 17-Bit (bzw. 3-Byte-PC) genügt nicht; man muss ja auch Strünge ausführen können, d.h. dem PC neue Werte zuweisen. Weil ein (Doppel)Register nur 16 Bit halten kann, gibt's den EICALL Befehl, der mit EIND verwurstet wird, um bestimmte Sprünge/Calls machen zu können. Johann
Genau, der Programmzähler hat mit der linearen Ausführung ja nix am Hut: relative Sprünge funktionieren wie gehabt, genauso wie Rechnerei und 'Überspringbefehle'. Interessant wirds erst bei absoluten Sprüngen, aus der Verktortabelle raus zum Bleistift, oder bei indirekten. Dazu gibts dann entweder spezielle Sprungbefehle (rjmp -> jmp -> ejmp), die funktionieren auch wie gehabt, werden aber im Programmspeicher entsprechend länger, um alle Adressbits unterbringen zu können. Bei der indirekten Springerei reicht der Z-Zeiger auch nicht mehr aus, deshalb muss es irgendwo ein weiteres Adressregister geben, und wenns nur aus einem 'E'-Bit besteht.
Hi Der Befehlcode von Calls und Jumps kann eine 24Bit-Adresse aufnehmen. Bei AVRs mit >128 KByte Flash werden 3 Byte auf den Stack gelegt. >gibt's den EICALL Befehl, der mit EIND verwurstet >wird, um bestimmte Sprünge/Calls machen zu können. EICALL und EIJMP verwenden für die unteren 16 Bit Z und für die oberen das Register EIND. MfG Spess
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.