Member since Oct 2012
2 posts
|
![]()
Subject: MC Fragen
Habe mal ein paar Fragen zu den MC Aufgaben, bin mir da bei manchen Antworten nicht sicher:
Klausur März 2013 1e) Welche Aufgabe erfüllt der C-Prozessor? *Er bindet mehrere.o-Dateien zusammen *Er lös beim Binden die Referenzen zwischen Programm und Bibliotheken auf *Er entfernt vor dem Kompilieren ungenutzte Variablen aus dem Programm *Er führt textuelle Ersetzungen im C-Code durch, die sich durch Makrodefinitionen steuern lassen Würde jetzt mal sagen Antwort 2 oder 4 ? 1f) Wie viele Bytes belegt die folgende Struktur im Speicher eines AVR Mikrocontrollers: union { struct{ uint8_t lo,hi; }; uint16_t r16; } reg;
1g) Welche aussage zu Variablen in C ist richtig?
würde sagen antwort 4 ist richtig !? Klausur Juli 2012 1a) Welche Aussage zu Zeigern ist richtig?
Da würde ich jetzt mal sagen es müsste Antwort 2 sein?! Vielen Dank im Voraus |
Member since Sep 2014
7 posts
|
![]()
1e) 4. übernimmt eig. der Präprozessor. Daher wohl 2.
1g) Ja, 4. ist richtig. a) Ja 2. ist richtig. Zeiger haben immer eine Größte von 4 Bytes,- somit unabhängig vom Datentyp auf den sie zeigen. |
Member since May 2011
41 posts
|
![]()
1e) einen "C-Prozessor" gibt es nicht. Wenn es der Präprozessor ist, stimmt 4. Das zweite, auflösen von Referenzen auf Bibliotheken macht (genauso wie 1. binden von o-dateien) der Linker(=Binder). Ungenutzte Variablen werden erst während dem Kompilieren (zwischen Präprozessor und Linker/Binder) entfernt.
1f) bei einer union liegen alle Variablen im selben Speicherbereich, quasi übereinander. Eine Union ist deshalb immer so groß wie die größte vorkommenden Einzelvariable. Die beiden Einzelvariablen sind hier ein 16-bit Integer und eine Structure mit 2x8 Bit, also auch 16 Bit. Deshalb belegt die union "reg" 16 Bit. Wäre r16 vom typ uint32_t, wäre die ganze union 32 Bit groß, ebenso wenn die beiden "Teilvariablen" lo und hi im struct jeweils 16 Bit groß wären. Wäre lo 8 Bit und hi 16 Bit, wäre die gesamte union 24 Bit groß. Langer Rede kurzer Sinn: 16 Bit, 2 Byte, 1. Antwort. Für die Klausur hier aufpassen mit Bits und Bytes (eine int16-Variable belegt 16 _Bit_, das sind 2 _Byte_ (1 Byte=8 Bit). 1g)Ja, 4 ist richtig, wegen Bereichsüberlauf. Die erste ist falsch, kommt auf Compiler und Architektur an (deshalb sollt ihr auch die expliziten Deklarationen verwenden, also in16_t etc). Die zweite ist auch falsch, das Vorzeichenbit geht von den 8 Bit weg, sodass nur noch 7 Bit für die eigentliche Zahlt zur Verfügung stehen. Die dritte ist natürlich falsch, man kann Variablen mit anderen Werten als 0 initialisieren. 1a) Die zweite ist richtig, allerdings können Zeiger unterschiedlich groß sein, je nach Architektur. Also z.B. auf einem AVR-Mikrcontroller und auf einem x86-PC unterschiedlich groß, auf einem AVR aber immer gleich groß. Nur bin ich mir nicht sicher, dass es 4 Byte sind. Eigentlich bin ich mir fast sicher, dass es nicht 4 Byte sind, eher weniger. |
Member since Sep 2014
7 posts
|
![]()
Mhm, im Skript fand ich zu den Pointer nun auch nichts. Google liefert mir da verschiedener Antworten. Teilweise wird das dann abhängig vom Prozessor gemacht, 32 bzw. 64bit Prozessor, bzw. von einer IDE (sofern eine verwendet wird..)
|
Member since May 2011
79 posts
|
![]()
In reply to post #3
Der AVR addressiert den RAM mit 16-Bit (maximal 64 KiB), dementsprechend sind Zeiger 2 Byte groß. |
Powered by the Unclassified NewsBoard software, 20110527-dev,
© 2003-8 by Yves Goergen