2016-08-27 1 views
0

Ich habe keinen RAM mehr und muss meinen nicht-kritischen Geschwindigkeitscode in Flash umwandeln. Müssen Sie den Linker "Attribut" -Befehl kennen, um Flash auszuwählen.Was ist Linker-Attribut-Befehl, um Code in Flash statt RAM zu setzen?

Ich benutze mbed online IDE für NUCLEO (STM32) f091RC zu bauen.

Aber vielleicht verwendet mbed eine gemeinsame Attributeinstellung für Flash.

Ich kann keine Hilfe auf mbed Linker finden.

+0

Ich habe keine Erfahrung mit _embed online IDE_ aber wie ich alle Funktionen verstehen standardmäßig platziere, um zu blinken. Die meisten Compiler haben spezielle Attribute für Design-Code, der aus dem RAM ausgeführt wird. Und es braucht spezielle Ladeprogramme, um Teile Ihrer kompilierten Firmware beim Booten vom Flash in den RAM zu verschieben - solche Funktionen können von einigen Compilern automatisch erstellt werden. Sind Sie sicher, dass Ihr Code im RAM funktioniert? – imbearr

Antwort

0

Ich kenne Ihre Linker-Dateistruktur nicht, aber die wahrscheinlichste ist, dass Sie. Textabschnitt haben, der in FLASH geschrieben wird (99% sicher). Wenn Sie Abschnitt Ihrer Funktion zwingen wollen, müssen Sie dieses Attribut verwenden, kurz vor Deklaration und Definition:

#define FLASH_FUNC __attribute__ ((long_call, section (".text"))) 

und es wie folgt verwenden: __attribute__ ((long_call, section (".text"))) Sie auch einen Makro dies so machen

in h-Datei:

FLASH_FUNC void MyFoo(void); 

int C-Datei

FLASH_FUNC void MyFoo(void) 
{ 
    //foo 
} 
Verwandte Themen