mikrocontroller.net

Forum: Compiler & IDEs Memory Sections im AVR Studio


Autor: Dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also ich bekomm es einfach nicht hin ... wahrscheinlich bin ich 
schlichtweg zu blöd dafür.

Ich will im Flash ein Bereich für Konstanten reservieren, der an einer 
ganz bestimmten Stelle steht. Habs nun in erster Linie mit den Memory 
Settings im AVR-Studio versucht, aber meine Angaben werden ganz munter 
ignoriert. ... nachschauen tue ich mit dem Debugger AVR-Studio 4.13 
Build 528.

Ich versteh die Welt nicht mehr ...

MfG

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

; Flash-Segment:
.cseg

; Start-Adresse des Blocks:
.org 0x123

; Datenbytes:
.db 1, 2, 3, 4, 5
; Worte:
.dw 123, 456, 789


Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dummy wrote:

> Habs nun in erster Linie mit den Memory
> Settings im AVR-Studio versucht, aber meine Angaben werden ganz munter
> ignoriert. ... nachschauen tue ich mit dem Debugger AVR-Studio 4.13
> Build 528.

Was genau bedeutet denn "ignoriert"?
Bei 4.14 werden aus den Angaben unter "Memory Settings" jedenfalls 
korrekte Linker-Options erzeugt. Man muss nur beachten, dass bei "Memory 
Type" Flash Wort-Adressen einzutragen sind.

Autor: Dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, entschuldigung ... ich versuch das Problem in C zu lösen.

das ganze müsste dann über _attribute_ ((section (".MySection"))) 
funktionieren. Nur wie gesagt, ich kann unter den Memory Settings 
MySection definieren wie ich will, die Ignoranz seitens des Compilers 
bleibt.

MfG

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal, was genau bedeutet "ignoriert"?
Poste doch mal die ausgeführte Linker-Kommandozeile.

Autor: Dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In dem Debugger des AVR-Studios kann man sich doch den Inhalt des 
Programmspeichers, des RAMs, usw. anzeigen lassen. Dort lässt sich die 
Variable, die in meine Section lege aber nicht finden.

Was meinst Du mit Linker-Kommandozeile? Wo finde ich die? Meinst Du das 
Map-File?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dummy wrote:
> In dem Debugger des AVR-Studios kann man sich doch den Inhalt des
> Programmspeichers, des RAMs, usw. anzeigen lassen. Dort lässt sich die
> Variable, die in meine Section lege aber nicht finden.

Das kann aber mehrere Ursachen haben, z.B. auch ein simpler 
Schreibfehler bei dem, was du unter "Memory Settings" eingetragen hast.

> Was meinst Du mit Linker-Kommandozeile? Wo finde ich die? Meinst Du das
> Map-File?

Im Build-Window gibt es mehrere Zeilen, die mit "avr-gcc.exe" beginnen. 
Poste die letzte von diesen.

Autor: Dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die letzte zeile heisst

avr-gcc.exe -mmcu=attiny2313  -Wl,-section-start=TestSec=0x200 main.o 
-o tiny2313.elf

Word-Adresse hab ich 0x0100 ... folglich ist die ByteAdresse 0x200. Das 
sitmmt also.

Das programm schaut so aus
#include <avr/io.h>
#include <avr/boot.h>
#include <avr/pgmspace.h>




  const char PROGMEM str0[4] = "1234";
  const char __attribute__ ((section (".TestSec"))) str1[4] = "5678";


int main(void)
{
  DDRB = 0xFF;
  unsigned char cnt;


  while(1)
  {
    cnt = 10;
    PORTB = pgm_read_byte(&str0[3]);

    while(cnt != 0)
      cnt--;


    cnt = 10;
    PORTB = pgm_read_byte(&str1[3]);

    while(cnt != 0)
      cnt--;
  }
}


Ich hab es jetzt mal durchlaufen lassen, und er gibt über PortB die 
richtigen Wert aus. Nur sehe ich nicht ob es an der richtigen Adresse 
steht.

Autor: Dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahhh, die str1 steht unmittelbar hinter dem Programmcode an Word-Adresse 
0x6A

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ... -Wl,-section-start=TestSec=0x200 ...

Siehst du, deine Einträge werden nicht ignoriert. ;-)

Aber laut Sourcecode heißt die Section ".TestSec", dann musst du sie 
auch so bei den "Memory Settings" eintragen.

Autor: Dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muff, der Punkt war das Problem ... ich dacht, das gehört zu irgendeinem 
KeyWord oder soetwas. Wer denkt denn daran ... muff.

Hab vielen dank, jetzt klappt es.

MfG

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.