Hallo,
ich habe eine Frage bez. zu den Variablen. Wenn ich eine Variable im
Programm deklariere (z.B. int a = 0;), wird diese Variable im RAM
abgelegt?
Und wenn ich im Programm bestimmte Variablen im RAM Speicher genau
positionieren möchte, welche Adresse sollte ich wählen? Könnte ich
dadruch nicht eine Variable, die automatisch im RAM abgelegt ist, damit
überschreiben???
Danke!
Grüße,
FrageMan
FrageMan wrote:
> ich habe eine Frage bez. zu den Variablen. Wenn ich eine Variable im> Programm deklariere (z.B. int a = 0;), wird diese Variable im RAM> abgelegt?
Unter Umständen: ja. Unter andere Umständen lebt sie nur in einem
Register, und wieder andere Variablen brauchst du zwar zum Verständnis
deines C-Codes, der Compiler braucht sie aber rein gar nicht. Dann
wird es sie auch im fertigen Code nicht mehr geben.
(Das alles setzt natürlich eingeschaltete Optimierungen voraus.)
> Und wenn ich im Programm bestimmte Variablen im RAM Speicher genau> positionieren möchte, [...]
...dann hast du einen Denkfehler. Beschreibe lieber dein Problem
stattdessen, und es wird sich eine bessere Lösung dafür finden, davon
bin ich überzeugt.
Das Problem ist, dass mein Programm zusammen mit einem anderen Programm
kombiniert werden soll. Beide Programme werden unabhängig von einander
und von verschiedenen Leuten programmiert. Wenn beide Programmteile
zusammengefügt werden, entsteht ein einziges Programm, wo der einer Teil
auf die Funktionen des anderen Teils zugreift und Variablen übergibt.
Die Übergabe der Variablen geschieht über die Adresse der Variable.
Es gibt eine Funktion, der eine Offset-Adresse übergeben wird und dann
liest die Funktionen 8 Variablen die im Speicher nacheinander abgelegt
sind (Adressen: Offset + 1, Offset + 2, ..., Offset + 8)
Wie kann man das realisieren? Wie groß muss die Offsetadresse sein?
FrageMan wrote:
> Wie kann man das realisieren?
Dafür gibt es verschiebliche Objektcodemodule, die der Linker dann
zusammen fügt.
Alles andere ist ein Ratespiel. Kann sein, dass es funktioniert,
aber es gibt auch niemanden, der laut aufschreit, wenn du die
Zuweisungsbereiche überschreitest.
Wenn's partout auf diese Weise statt als Objektcode sein muss, dann
wohl am ehesten mit einem zugeschnittenen Linkerscript, bei dem der
Kommunikationsbereich in einer separaten section landet. Dann kann
zumindest der Linker noch den section overlap feststellen.
warum keine gemeinsame header datei, wo die variablen und funktionen als
extern drin stehen und auf einer von beiden seiten wird sie dann
implementiert der linker baut es dann zusammen
Seid ihr sicher, dass ihr das so kompliziert lösen müsst? Man kann durch
aus mit verschiedenen Leuten verschiedene Komponenten eines einzigen
Programms entwicheln. Teilt auf, wer welche Funktionen schreibt und
kopiert dann eure Dateien in einen Ordner, kompiliert das ganze und
schon habt ihr ein fertiges Program.
Hallo,
da der OP ja nicht schreibt, auf welchem System und mit welchen weiteren
Randbedingungen das implementiert werden soll, werfe ich mal das
Stichwort 'Interprozesskommunikation' in die Diskussion. Da wäre dann
Shared Memory eine Realisierung von gemeinsamen Variablen an bekannten
(relative zum Segmentanfang) Adressen. Immerhin ist ja von zwei
Programmen (im engeren Sinne ?) die Rede...
Oder man implementiert es in Form von Threads, sofern die
System-Umgebung das unterstützt.
Für den AVR schließe ich mich den Ratschlägen hier an, nicht zu
kompliziert machen.
Gruß
Hermann-Josef
Also ich würde da an IO Register denken, die ja ne feste Adresse haben
und einzeln angesprochen werden können, zum beispiel GPIOR0, 1 oder wie
sie heißen. Dort passen schon z.b. 16 bit, so das sich ein Pointer
übergeben ließe. So sollten auch beliebig große Structs gemeinsam
benutzbar sein, oder? Kenn mich mit c noch nicht so aus, mach ich einen
Denkfehler?