Hur mycket går det att slakta i denna kod?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
1802
Inlägg: 6835
Blev medlem: 6 februari 2009, 13:52:28

Re: Hur mycket går det att slakta i denna kod?

Inlägg av 1802 »

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.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Hur mycket går det att slakta i denna kod?

Inlägg av snigelen »

Det är inget skräp. Det är avbrottsvektorer fyllda med vettigt innehåll, genererat av en kompilator (avr-gcc).
Nerre
Inlägg: 27233
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Hur mycket går det att slakta i denna kod?

Inlägg av Nerre »

1802 skrev:Nerre: Nu är ju avrstudio 4 speciell för deras prossesorer. Jag tycker den borde göra det automagiskt.
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.

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).
1802
Inlägg: 6835
Blev medlem: 6 februari 2009, 13:52:28

Re: Hur mycket går det att slakta i denna kod?

Inlägg av 1802 »

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å.
Nerre
Inlägg: 27233
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Hur mycket går det att slakta i denna kod?

Inlägg av Nerre »

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.
1802
Inlägg: 6835
Blev medlem: 6 februari 2009, 13:52:28

Re: Hur mycket går det att slakta i denna kod?

Inlägg av 1802 »

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?
Användarvisningsbild
Icecap
Inlägg: 26651
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hur mycket går det att slakta i denna kod?

Inlägg av Icecap »

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å.
1802
Inlägg: 6835
Blev medlem: 6 februari 2009, 13:52:28

Re: Hur mycket går det att slakta i denna kod?

Inlägg av 1802 »

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.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hur mycket går det att slakta i denna kod?

Inlägg av jesse »

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:

Bild

Sedan är det bara att välja kapitel efter vilken enhet du vill veta mer om.
1802
Inlägg: 6835
Blev medlem: 6 februari 2009, 13:52:28

Re: Hur mycket går det att slakta i denna kod?

Inlägg av 1802 »

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.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hur mycket går det att slakta i denna kod?

Inlägg av jesse »

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
1802
Inlägg: 6835
Blev medlem: 6 februari 2009, 13:52:28

Re: Hur mycket går det att slakta i denna kod?

Inlägg av 1802 »

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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur mycket går det att slakta i denna kod?

Inlägg av sodjan »

> Nu vet inte jag vad 'memorymaps' betyder...

"Karta över minnet" ? :-)
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hur mycket går det att slakta i denna kod?

Inlägg av jesse »

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 :D )

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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur mycket går det att slakta i denna kod?

Inlägg av sodjan »

> men om det hade någon mer specifik betydelse, tekniskt sett...?

Nej, det betyder just "en karta över minnet"...
Skriv svar