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.