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


von Peter (Gast)


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
von kopfnuss (Gast)


Lesenswert?

Mit einem geeigneten Linkerscript die Adressen zuweisen.

-->GNU-ld Manual.

kopfnuss
von kopfnuss (Gast)


Lesenswert?

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


kopfnuss
von holger (Gast)


Lesenswert?

Suche nach "ramfunc"
von Peter (Gast)


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
von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

1
#define RAMFUNC   __attribute__ ((section(".ramsection")))
2
3
void RAMFUNC myFunction(void)
4
{
5
}
von Peter (Gast)


Lesenswert?

@Markus Müller:

Vielen Dank,

scheint zu klappen :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.