Gast
#3107922
Hi, ich habe zwei Fragen zur AVR-GCC Speicherverwaltung (bezieht sich auf die Version im AtmelStudio 6). Beispielcode:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
1) Die Variable t2 wird im Programmspeicher angelegt, also dort, wo auch er "normale" Code liegt. t1 wird im RAM angelegt. Nun ist der RAM aber ein flüchtiger Speicher, kann also Inhalte nicht ohne Versorgungsspannung vorhalten. Außerdem können die Inhalte im RAM modifiziert werden (solange sie nicht als konstant deklariert sind). Bei einem Neustart soll jedoch wieder der Ursprungswert verwendet werden. Theoretisch muss also der Inhalt bei jedem Programmstart erneut in den RAM kopiert werden. Und damit das möglich ist, muss der Inhalt auch irgendwo persistent abgelegt werden, was nur ebenfalls im Programmspeicher (Flash) oder im EEPROM möglich ist. Werden die Inhalte wie von mir vermutet beim Start kopiert? Belegen somit alle RAM Variablen auch zusätzlich Platz im Flashspeicher? 2) Soweit ich es verstehe arbeitet der Compiler bei der Verwendung des __flash Attributs automatisch die entsprechenden Zugriffe ein, die auch in der pgmspace.h definiert sind. Dies kann er aber doch nur, solange er auch weiß, um was es sich handelt. Habe ich nun eine Funktion wie anyStringFunction(char*), kann diese Funktion doch nicht "wissen", ob der Parameter ein Zeiger auf eine RAM- oder eine Programmspeicheradresse ist, oder? Was passiert in diesem Fall? Ist es möglich eine Funktion zu schreiben, die mit t1 und t2 arbeiten könnte? Danke im Voraus! --- Threadtitel bereinigt. -rufus