Nicht angemeldet. · Kennwort vergessen · Registrieren

ivo
Mitglied seit 10/2012
2 Beiträge
Betreff: 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;

  • 2Bytes
  • 4Bytes
  • 16Bytes
  • 32Bytes



1g) Welche aussage zu Variablen in C ist richtig?
  • Variablen vom Typ int haben auf allen Hardware-Plattformen dieselbe Größe
  • Eine int8_t Variable braucht mehr Speicher als eine uint8_t Variable,weil zusätzlicher Platz für das Vorzeichen-Bit benötigt wird
  • Alle variablen werden bei ihrer Deklaration mit dem Wert 0 initiallisiert
  • Wenn man bei einer int8_t Variable zum Wert 127 eins dazu addiert , hat sie den Wert -128

würde sagen antwort 4 ist richtig !?

Klausur Juli 2012

1a) Welche Aussage zu Zeigern ist richtig?
  • Ein Zeiger darf nie auf seine eigene Speicheradresse verweisen
  • Der Speicherbedarf eines Zeigers ist unabhängig von der Größe des Objekts,auf das er zeigt
  • Ein zeiger kann zur Manipulation von schreibgeschützen Datenbereichen verwendet werden
  • Zeiger vom Typ(void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind

Da würde ich jetzt mal sagen es müsste Antwort 2 sein?!

      Vielen Dank im Voraus
Chrysalis19
Mitglied seit 09/2014
7 Beiträge
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.
killermiller
Mitglied seit 05/2011
41 Beiträge
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.
Dieser Beitrag wurde am 24.07.2015, 17:53 von killermiller verändert.
Chrysalis19
Mitglied seit 09/2014
7 Beiträge
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..)
Raim
GSPiC-Guru
Mitglied seit 05/2011
79 Beiträge
Antwort auf Beitrag #3
Zitat von killermiller:
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.

Der AVR addressiert den RAM mit 16-Bit (maximal 64 KiB), dementsprechend sind Zeiger 2 Byte groß.
Schließen Kleiner – Größer + Auf diesen Beitrag antworten:
Prüfcode: VeriCode Gib bitte das Wort aus dem Bild ins folgende Textfeld ein. (Nur die Buchstaben eingeben, Kleinschreibung ist in Ordnung.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Weitere Zeichen:
Gehe zu Forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen