Nej, fråga på bara... jag tyckte bara frågorna var lite jobbiga att förstå (varför du ville ha svar på dem, nästan hypotetiska frågor).. Men jag förstår att du försöker lära dig.
Försök utgå från det praktiska behovet, och lär dig lite i taget... Det kan vara svårt att försöka ta in för mycket på en gång.
Nu vet inte jag vad 'memorymaps' betyder... du har väl programmerat i en annan miljö tidigare.. Men egentligen fungerar minnesaccessen så här i en AVR:
Spara och läsa data i
SRAM med instruktioner som LDS, STS, LD Y+,Rd...
Läsa data ur
programminnet (flash) med LPM (Load Program Memory location) (och mer sällan - lagra data i flashminnet med SPM)
Skriva och läsa
EEPROM fungerar på ett annat sätt. EEPROM'et behandlas som en 'extern' enhet odär du använder särskilda I/O-register för att sätta adressen (EEPROM-adressregistret), skriva eller läsa data (EEPROM dataregistret) och kontrollera status (EEPROM statusregistret).... Så det går inte att nå EEPROM-data direkt med en instruktion som med SRAM.
Däremot, i programmeringsmiljön (AVR GCC) kan man adressera de tre minnesområdena direkt genom segment-direktiv (.DESG, .ESEG, .CSEG)... där kan du lägga variabler eller labels som pekar på särskilda adresser i de olika minnena. Men det är du själv som senare måste skilja de olika variablerna/pekarna åt, till vilket minne de ska används.
AVR Assembler User Guide
4-14 Development Tools User Guide
4.5.10 ESEG - EEPROM
Segment
The ESEG directive defines the start of an EEPROM Segment. An Assembler file can
consist of several EEPROM Segments, which are concatenated into one EEPROM
Segment when assembled. The BYTE directive can not be used within an EEPROM
Segment. The EEPROM Segments have their own location counter which is a byte
counter. The ORG directive (see description later in this document) can be used to
place constants at specific locations in the EEPROM memory. The directive does not
take any parameters.
Syntax:
Kod: Markera allt
.ESEG
Example:
.DSEG ; Start data segment
vartab: .BYTE 4 ; Reserve 4 bytes in SRAM
.ESEG
eevar: .DW 0xff0f ; Initialize one word in
; EEPROM
.CSEG ; Start code segment
const: .DW 2 ; Write 0x0002 in prog.mem.
mov r1,r0 ; Do something