Not logged in. · Lost password · Register

All posts by Femto (3)

topic: Oktober 2008 Lauflicht  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
Femto
Member since Jul 2012
3 posts
Subject: Oktober 2008 Lauflicht
Hallo,

ich habe mich mal an der Programmieraufgabe versucht, vielleicht könnt ihr ja mal drüber schauen, ob euch irgendwas auffällt.

  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include <avr/sleep.h>
  4. #include <stdint.h>
  5.  
  6. static void init (void);
  7. static void wait (uint16_t interval);
  8. static volatile uint8_t speed = 5;
  9.  
  10. ISR(INT0_vect) {
  11.    if(speed<10) {
  12.       speed++;
  13.       }
  14.    }
  15.  
  16. void main(void) {
  17.  
  18.    init();
  19.    sei();
  20.  
  21.  while(1) {
  22.       uint16_t warten=0;
  23.       while(speed>0) {
  24.          
  25.          for(uint8_t i=0; i<8; i++) {
  26.             PORTA |= (1<<i); // active high, oder?
  27.             warten=speed*1000;
  28.             wait(warten);
  29.             speed--;             
  30.             }
  31.       }
  32.  
  33.    cli();
  34.    while(speed==0) {
  35.       sleep_enable();
  36.       sei();
  37.       sleep_cpu();
  38.       cli();
  39.       sleep_disable();
  40.       }
  41.    sei();
  42.    }
  43. }
  44.  
  45. static void init (void) {
  46.  
  47.    PORTA = 0x00; //sind ja active high oder?
  48.    DDRA = 0xff;
  49.    DDRD &= ~(1<<PD2);
  50.    PORTD |= (1<<PD2);
  51.    GICR |= (1<<INT0);
  52.    MCUCR |= (1<<ISC01);
  53.    MCUCR &= ~(1<<ISC00);
  54.    
  55. }
  56.  
  57. static void wait(uint16_t interval) {
  58.    for(volatile uint16_t i=0; i<interval; i++) {
  59.    }
  60. }
topic: MC Fragen  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
Femto
Member since Jul 2012
3 posts
In reply to post ID 4694
Ahh ok, dann hatte ich das verwechselt.

Danke für die schnelle Hilfe!
topic: MC Fragen  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
Femto
Member since Jul 2012
3 posts
Subject: MC Fragen
Hallo,

nachdem ich mir ein paar Altklausuren angeschaut habe, war ich mir bei manchen MC Fragen nicht sicher, vielleicht könnt ihr mir ja weiterhelfen:

März 2010:

b) Welche der folgenden Aussagen zur Sichtbarkeit von Variablen ist
richtig?
❏ Globale static-Variablen sind in allen Programmteilen immer direkt
zugreifbar.
❏ Eine lokale static-Variable ist nur innerhalb der Funktion, in der sie definiert
wurde, sichtbar.
❏ Lokale static-Variablen sind aus anderen Modulen nur dann zugreifbar, wenn sie
ausserdem als "extern" deklariert wurden.
❏ Wenn eine globale und eine lokale Variable gleichen Namens existieren, dann
hat die globale Variable Vorrang.

Ich glaube, es ist das zweite, sie ist zwar bis Programmende im Speicher, aber nur in der Funktion sichtbar, oder?

c) Was ist ein Stack-Frame?
❏ Der Speicherbereich, in dem der Programmcode einer Funktion
abgelegt ist.
❏ Ein spezieller Registersatz des Prozessors zur Bearbeitung von Funktionen.
❏ Ein Fehler, der bei unberechtigten Zugriffen auf den Stack-Speicher entsteht.
❏ Ein Bereich des Speichers, in dem u.a. lokale automatic-Variablen
einer Funktion abgelegt sind.

Hier tippe ich auf das vierte, da ja laut Skript lokale Variablen dort abgelegt werden, oder hab ich das falsch verstanden?

April 2009:

a) Was ist der Unterschied zwischen den wie folgt in einer Funktion foo
(lokal) definierten Variablen?
void foo() {
int a;
static int b;
❏ Die Variable a ist nur für Funktionen in der Datei zugreifbar, in der foo definiert
ist, während auf b auch von Funktionen in anderen Modulen des Programms
zugegriffen werden kann.
❏ Der Speicherplatz der Variablen a wird jeweils beim Aufruf der Funktion foo
angelegt und beim Verlassen wieder freigegeben, während der Speicherplatz der
Variablen b von Programmstart bis -ende verfügbar ist.
❏ Die Variable b ist nur für Funktionen in der Datei zugreifbar, in der foo definiert
ist. Funktionen in anderen Modulen des Programms können prinzipiell auf a
zugreifen, hierzu muss a aber in dem entsprechenden Modul mit einer extern-
Deklaration bekannt gemacht werden.
❏ Da der Speicherplatz der Variablen b für die gesamte Ausführungszeit des Programms
reserviert ist, darf es in anderen Funktionen keine weitere Variable mit
dem Namen b geben. Bei a gilt diese Einschränkung nicht.

Hier meine ich, dass es das zweite ist. Das erste kann es eig nicht sein, da es durch das static ja nur modulweit sichtbar ist, für Antwort drei müsste a ja global definiert sein und vier macht meiner Meinung nach auch keinen Sinn...

Oktober 2008:

c) Welche Aussage zu virtuellen Adressräumen ist richtig?
❏ Die Umrechnung von virtuellen Adressen in physikalische Adressen
erfolgt einmal beim Laden des Programms.
❏ Die Umrechnung von virtuellen Adressen in physikalischen Adressen wird zur
Laufzeit durch eine spezielle Hardwareeinheit durchgeführt.
❏ Auf einem Rechner mit nur einer CPU müssen virtuelle Adressen nicht in physikalische
Adressen umgewandelt werden, da sie nur innerhalb eines Prozesses
gelten und immer nur ein Prozess ausgeführt werden kann.
❏ Verwendet man einen Zeiger in C, so kann man über das Schlüsselwort static
festlegen, ob die virtuelle oder die physikalische Adressen darin gespeichert
wird.

Das zweite kann ich schon mal ausschließen, da die Umrechnung ja mittels Software funktioniert. Ich vermute, dass es das erste ist, kann die anderen aber auch nicht 100%ig ausschließen.

Vielleicht habt ihr ja noch ein paar Hinweise für mich  :-)
Close Smaller – Larger + Reply to this post:
Special characters:
Go to forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen