2016-04-07 10 views
0

Wie hoch ist die Lebensdauer von konstanten Variablen im Mikrocontroller? Sind die const-Variablen vor der Runtime oder zur Runtime zugeordnet?lebensdauer der konstanten variablen?

void main() 
{ 
    const x=5; 
    while(1) 
    { } 

} 
+0

kann es von den Compiler- und Compiler-Flags abhängen. Ihr Beispielcode ist ein toter Code, so dass keine Konstante zugewiesen wird, da nichts geschieht (wenn Sie Optimierungen verwenden). Es gibt keine feste Antwort, weil die Spezifikation diese Art von Dingen nicht diktiert, noch sollte es. –

+0

für Ihr spezielles Ziel mit Ihrem spezifischen Compiler mit Ihren Lieblingsoptionen, kompilieren Sie dann zerlegen Sie, um zu sehen, was passiert ist. Das ist die einzige Antwort. –

Antwort

1

Es hängt vom Compiler ab.

Normalerweise werden Konstanten im Programmspeicher abgelegt. Nach dem Kompilieren sind Konstanten in der HEX-Datei eingebaut.

Zum Beispiel Microchip C18 und XC32 Compiler hat unterschiedliche Handhabung. Während C18 const ROM mit C32 hat, müssen Sie -membedded-data Flag verwenden, um anzugeben, wie und in ROM-Konstanten platziert werden.

+0

Ich meine, wenn Sie den Code auf dem Ziel .. brennen, da die Rolle des Compilers endete, nachdem die endgültige Datei (.elf) gebracht. –

+1

Fehler werden immer im ROM (Programmspeicher) gespeichert. Was bedeutet, in Ihre HEX-Datei eingebettet (Sie können nach ihnen suchen). Die Speicherbelegung erfolgt während des Kompilierungs-/Verbindungsprozesses, was wahrscheinlich die Antwort auf Ihre Frage ist. Was ich damit meinte, ist, dass man in manchen Fällen je nach Plattform einen Compiler "zwicken" kann, um den genauen ROM-Bereich für Konstanten zu setzen. Zum Beispiel erlaubt der C18-Compiler das Spezifizieren von Speicherqualifikationsmerkmalen wie '' 'nahe''' oder' 'far''' für jede von Ihnen deklarierte Konstante. Auf diese Weise können Sie den Programmspeicher besser organisieren und häufig verwendete Konstanten zum Beispiel in der Nähe von Segmenten beibehalten. –

Verwandte Themen