www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C: Yagarto RAM-Functions erzeugen - wie?


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo NG,

weiß jemand zufällig, wie ich C-Funktionen deklariere, dass diese ins 
SRAM kopiert werden und dann dort ausgeführt werden? Im EEPROM herrschen 
scheinbar merkliche 1,5 Waitstates. (AT91SAM7S).

Vielen Dank schon mal,
Peter

Autor: kopfnuss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einem geeigneten Linkerscript die Adressen zuweisen.

-->GNU-ld Manual.

kopfnuss

Autor: kopfnuss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... und ausserdem dem Startup Code eine Relozierungsprozedur,
die die betreffenden Routinen aus dem Flash in´s RAM kopiert,
zufügen.


kopfnuss

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Suche nach "ramfunc"

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe nun folgendes getestet:

main.c:

#define RAMFUNC _attribute_ ((long_call, section (".ramsection")))
void myFunction(void) RAMFUNC;

void myFunction(void)
{
  ...
}

sam7s256_rom.ld:

.data : {
        __data_load = LOADADDR (.data);
        __data_start = .;
        KEEP(*(.jcr))
        *(.got.plt) *(.got)
        *(.shdata)
        *(.data .data.* .gnu.linkonce.d.*)
        . = ALIGN (4);
        *(.ramsection)
        _edata = .;
    } >RAM AT>ROM

Allerdings bringt der Compiler ne Fehlermeldung:

src/main.c:451:6: error: conflicting types for 'myFunction'

Hat bitte noch jemand einen Tip?

Danke!
Peter

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define RAMFUNC   __attribute__ ((section(".ramsection")))

void RAMFUNC myFunction(void)
{
}

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Markus Müller:

Vielen Dank,

scheint zu klappen :-)

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.