Hur mycket går det att slakta i denna kod?
Re: Hur mycket går det att slakta i denna kod?
Om man då kollar programmet ledblink i början av tråden. Är skräpet i början något som programmet självprogrammerar vi körning? "0c 94 68 00" upprepat ett antal ggr.
Re: Hur mycket går det att slakta i denna kod?
Det är inget skräp. Det är avbrottsvektorer fyllda med vettigt innehåll, genererat av en kompilator (avr-gcc).
Re: Hur mycket går det att slakta i denna kod?
Varför det? Som AndLi skrev: använder du inga interrupt så kan du låta koden starta från 0x0000. Om avrstudio skulle göra det automatiskt skulle man ju tappa ett gäng bytes även om man inte använder dem.1802 skrev:Nerre: Nu är ju avrstudio 4 speciell för deras prossesorer. Jag tycker den borde göra det automagiskt.
Assembler använder man när man vill ha full koll, då vill man inte att nåt sker automatiskt (för då har man inte längre full koll).
Re: Hur mycket går det att slakta i denna kod?
snigelen: Jag kollar i filen Blinking_LED.lss och tolkar det första i koden som att den modifierar "avbrottsvektorerna". Det ser inte vettigt ut med "0c 94 68 00" upprepat flera ggr. Men det kan vara så.
Re: Hur mycket går det att slakta i denna kod?
Normalt lägger kompilatorn in ett "return" på alla avbrottsvektorer som inte har nån kod kopplad till sig. Detta eftersom kompilatorn kan inte vara helt säker på att du inte aktiverar nåt interrupt som hoppar till den vektorn, och ligger det då ingen return-kod där så kraschar antagligen programmet.
Re: Hur mycket går det att slakta i denna kod?
Varför ligger avbrottsvektorerna i början? Kan de flyttas? Har det nått att göra med "seropageadressing" att göra? För att exekvera snabbare?
Re: Hur mycket går det att slakta i denna kod?
Det är hårdvaran som är skapat så för att dom som designade kretsen ansåg att det var rätt sätt att göra det på. Inget att göra åt annat än att lära sig och acceptera att läget är så.
Re: Hur mycket går det att slakta i denna kod?
Vad jag kan se har kretsen jag håller på med (ATmega16u4) 3 typer av minne. Flash, sram och eeprom. Hur når jag dem? Är det 3 memorymaps? Eller fler? Flash borde vara där mitt program hamnar. Är nån av de 3 i/o adressena? Som når jag med in och out.
Re: Hur mycket går det att slakta i denna kod?
Vad är meningen med den här tråden, egentligen?
Det finns tusentals exempel på hur man använder EEPROM i en AVR (googla!) och vill du ha mer specifik information om detaljer så finns databladen. Det känns som en väldigt märklig diskussion där TS gissar en massa saker och sedan frågar om det 'stämmer'. Det är väl bättre att ta reda på fakta direkt istället, genom att läsa någon bra tutorial?
En av de bättre sidorna om AVR assembler är denna: Beginners Programming in AVR Assembler
Och när det gäller minnenas organisation och adressering så är det det första man får läsa om man kollar in Atmel's officiella AVR Assembler User Guide. Den kan na förresten ladda ner och ha som referens, så är det bara att läsa när det uppstår frågor.
Processorns arkitektur beskrivs även grafiskt i alla datablad, ungefär så här:

Sedan är det bara att välja kapitel efter vilken enhet du vill veta mer om.
Det finns tusentals exempel på hur man använder EEPROM i en AVR (googla!) och vill du ha mer specifik information om detaljer så finns databladen. Det känns som en väldigt märklig diskussion där TS gissar en massa saker och sedan frågar om det 'stämmer'. Det är väl bättre att ta reda på fakta direkt istället, genom att läsa någon bra tutorial?
En av de bättre sidorna om AVR assembler är denna: Beginners Programming in AVR Assembler
Och när det gäller minnenas organisation och adressering så är det det första man får läsa om man kollar in Atmel's officiella AVR Assembler User Guide. Den kan na förresten ladda ner och ha som referens, så är det bara att läsa när det uppstår frågor.
Processorns arkitektur beskrivs även grafiskt i alla datablad, ungefär så här:

Sedan är det bara att välja kapitel efter vilken enhet du vill veta mer om.
Re: Hur mycket går det att slakta i denna kod?
jesse: I skolan hade man lärare, att fråga om man fattat vad man läst. Till det funkar inte google. Och hur trr du jag fick fatt i mitt pdf datablad? Denna tråd har lärt mig mycket. Jag hoppas att fler lärt sig nått.
Re: Hur mycket går det att slakta i denna kod?
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.
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
Re: Hur mycket går det att slakta i denna kod?
jesse: snigelen's bild ovan är en utmärkt memorymap
På en C64 Ligger det mesta mellan $0000-$ffff smidigt. Men även den har ex "font rom" i annat lager.

Re: Hur mycket går det att slakta i denna kod?
> Nu vet inte jag vad 'memorymaps' betyder...
"Karta över minnet" ?
"Karta över minnet" ?

Re: Hur mycket går det att slakta i denna kod?
Ja, eller , ja , jo... men om det hade någon mer specifik betydelse, tekniskt sett...? Men jag lämnar det.
Om man vill fördjupa sig i hur en AVR är konstruerad så ska man leta upp ett exemplar av boken "Mikroprocessorteknik" av Per Foyer.
De första 76 sidorna handlar allmänt om processorer och processorarkitekturer, så att man får koll på begreppen (Jag hoppade över det mesta av den delen, kanske därför jag undrade över 'memorymaps' förut
)
Sedan följer ett antal sidor specifikt om AVR-arkitekturen, följt av hur ALU-enheten fungerar (Aritmetic Logic Unit - själva 'hjärtat' i processorn') och vilka instruktioner som finns till den. Totalt ägnas omkring 135 sidor åt AVR assembler, mycket välstrukturerat och lättläst. Rekommenderas till alla som vill lära sig allt om hur en 8-bitars AVR fungerar.
Om man vill fördjupa sig i hur en AVR är konstruerad så ska man leta upp ett exemplar av boken "Mikroprocessorteknik" av Per Foyer.
De första 76 sidorna handlar allmänt om processorer och processorarkitekturer, så att man får koll på begreppen (Jag hoppade över det mesta av den delen, kanske därför jag undrade över 'memorymaps' förut

Sedan följer ett antal sidor specifikt om AVR-arkitekturen, följt av hur ALU-enheten fungerar (Aritmetic Logic Unit - själva 'hjärtat' i processorn') och vilka instruktioner som finns till den. Totalt ägnas omkring 135 sidor åt AVR assembler, mycket välstrukturerat och lättläst. Rekommenderas till alla som vill lära sig allt om hur en 8-bitars AVR fungerar.
Re: Hur mycket går det att slakta i denna kod?
> men om det hade någon mer specifik betydelse, tekniskt sett...?
Nej, det betyder just "en karta över minnet"...
Nej, det betyder just "en karta över minnet"...