Not logged in. · Lost password · Register

All posts by joan (15)

topic: Snake - April 2009  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
ok danke :)
topic: Tankkontrolle - März 2010  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2729
ja stimmt der else zweig ist falsch danke :D .aber soll der abfluss nich stoppen wenn weniger als 20000 liter im tank sind um sich wieder aufzufüllen oder hab ich das falsch verstanden?
topic: Snake - April 2009  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2651
Kommentare und Verbesserungsvorschläge bzw Fehler bitte schreiben :D

  1. /* funktionendeklaration */
  2.  
  3. void init (void);
  4. void active_wait;
  5. volatile static uint8_t laenge = 1;
  6. volatile static uint16_t wartezeit = 5000;
  7.  
  8. /* ISR */
  9.  
  10. ISR(INT0_vect){// darf man hier die laenge direkt abziehen oder soll man mit z.b button = 1 arbeiten, gibt das hier später bei dem schlafmodus probleme?
  11.     if( laenge > 1){
  12.         --laenge;
  13.     }
  14. }
  15.  
  16.  
  17. /* main */
  18.  
  19. void main (void){
  20.     init();//passt dieser funktionsaufruf oder muss hier ein void in die klammer?
  21.     sei();
  22.  
  23.     while(1){
  24.         for(uint8_t i = 0; i < 6 ; i++){
  25.             show_Snake(i,laenge);
  26.             active_wait(wartezeit);
  27.         }
  28.  
  29.         laenge++;
  30.         cli();
  31.         if( laenge == 6) {
  32.             sleep_enable();
  33.             sei();
  34.             sleep_cpu();
  35.             sleep_disable();
  36.             cli();
  37.             laenge = 1;
  38.         }
  39.         sei();
  40.     }
  41. }
  42.  
  43.  
  44.  
  45. /* init*/
  46. void init (void){
  47.     DDRB |= 0x3f;//leds ausgang und alle aus
  48.     PORTB |= 0x3f;
  49.  
  50.     DDRD &= ~(1 << PD2);//darf man PD2 schreiben oder lieber 2
  51.     PORTD |= (1 << PD2);
  52.  
  53.     MCUCR |= ( 1 << ISC01);//fallende flanke steht nicht im text welche man verwenden soll
  54.     MCUCR &= ~ (1 << ISC00);
  55.  
  56.     GICR |= (1 << INT0);
  57. }
  58.  
  59. /* snake*/
  60.  
  61. void show_Snake( uint8_t pos, uint8_t len){
  62.     while( len > 0 ){
  63.         PORTB |= (1 << pos);
  64.         if( pos > 0){
  65.             --pos;
  66.         }else{
  67.             pos = 5;
  68.         }
  69.         --len;
  70.     }
  71. }
  72.  
  73.  
  74. /* wait */
  75.  
  76. void active_wait (volatile uint16_t len){
  77.     for( volatile uint16_t i = 0 ; i < len ; i ++)
  78.         ;
  79.     }
  80. }

// edit by DOM: Das nächste Mal bitte sämtlichen Code in die dafür vorgesehenen "code tags".
This post was edited on 2011-08-02, 23:36 by dom.
Edit reason: code tags hinzugefügt
topic: Snake - April 2009  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2725
ich hätte auch noch ein paar fragen zur angabe der aufgabe:

1. nach jedem durchlauf wächst die schlange um ein segment. ist hier ein durchlauf durch alle sechs leds gemeint also dass der kopf der schlange einmal um die sechs leds gewandert ist ?

2.was bedeutet allgemein (auch bei den anderen klausuren ) die ausführung stoppt heißt dass ich muss alle leds ausschalten und in den schlafmodus oder was sonst?
topic: Snake - April 2009  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2651
zeile 66 schaltest du alle leds an         PORTB &= ~(1<<a); ich denke du wirst sie in der init alle aushaben wollen oder ? sind active low.
topic: Snake - April 2009  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2651
zeile 78  zeichnest du denke ich ein schlangensegment zu viel. stell dir vor len = 4 dann zeichnest du für a = 0,1,2,3,4 fünf segmente wenn du das = entfernst müsste es passen.
topic: Snake - April 2009  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2651
zeile 77 verwendest du     PORTB = 0xff; ich denke mal du willst alle leds ausschalten allerdings greift du somit auf pins zu nämlich  pin 6,7,8 die gar nichts mit den leds zutun haben (zumindest nicht in der aufgabe). ich denke besser wäre hier wenn man die leds auf diese weiße ausschlatet PORTB |= 0x3f; dass sollte die ersten 6 bits von portb setzen.
topic: Snake - April 2009  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2651
ich denke du hast bei der active wait funktion das volatile vor dem uint16_t a = 0 vergessen und außerdem machst du einen schleifendurchlauf zuviel wenn du a<= len machst. Weil du ja genau len schleifendurchläufe machen sollst. also mal angenommen len = 3 dann machst du 0,1,2,3 also vier schleifendurchläufe wenn du das gleich zeichen weg machst müsste es stimmen.
topic: Tankkontrolle - März 2010  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2699
-ISR(INT0): ich verstehe nicht was falsch ist weil ich doch nur einen liter dazuzähle wenn der zufluss geöffnet ist und falls ich über das fassungsvermögen hinauskomme schließe ich das zuflussventil

-ISR(INT1): warum führt das zu einem kontinuierlichen interrupt ich wechsle doch bei jedem ausgelösten interrupt der quelle INT1 von offener abflusssperre zu geschlossener abflusssperre und umgekehrt. Sorry ich komm nicht drauf wo mein denkfehler liegt.

-ich lese PORTD unter interruptsperre aus weil sich ja sonst PORTD während des auslesens durch interrupt INT1 ändern könnte und ich so das falsche lese oder etwa nicht?

- ich dachte mir ich überprüfe so ob das 3. Bit an PORTD gesetzt ist. falls das zutrifft ist ja der abflusshahn offen steht in den informationen zur hardware. und solange der abflusshahn offen ist soll wasser abfließen.

- warum kann man es nicht mit PORTD auslesen?

Sorry steh vil. auf dem Schlauch aber ich verstehe es einfach gerade nicht.
topic: Tankkontrolle - März 2010  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2691
Ist leider nicht so gut wie die andere lösung aber ich wollte mal fragen wo hier noch überall fehler sind :)
Bitte um verbesserungsvorschläge und fehlersuche :D



  1. /* funktionendeklaration*/
  2.  
  3. void init();
  4. volatile static uint16_t liter = 0;
  5.  
  6. /* ISR */
  7.  
  8. ISR(INT0_vect){
  9.     if(liter >= 50000){
  10.         PORTD &= ~(1 << PD0);//Zufluss gesperrt
  11.     }
  12.     if(PORTD == PORTD | ( 1 << PD0){// wenn zufluss offen
  13.         liter++;
  14.     }
  15. }
  16.  
  17. ISR(INT1_vect){
  18.     PORTD ^= (1 << PD3);//toggelt abflusssperre
  19. }
  20.         
  21.  
  22. /* main */
  23.  
  24. void main(void){
  25.     init();
  26.     while(1){
  27.         cli();
  28.         while( PORTD == PORTD & ~(1 << PD3)){//abfluss gesperrt
  29.         sleep_enable();
  30.         sei();
  31.         sleep_cpu();
  32.         sleep_disable();
  33.         cli();
  34.     }
  35.     sei();
  36.  
  37.  
  38. /* abfluss überwachen */
  39.     cli();
  40.     while( PORTD == PORTD | (1 << PD3)){//abfluss offen
  41.         sei();
  42.         uint8_t zustand = PORTD
  43.         if( PORTD != zustand && liter >= 20000){
  44.             cli();
  45.             --liter;
  46.             sei();
  47.         }else{
  48.             cli();
  49.             PORTD &= ~(1 << PD3);
  50.             PORTD |=( 1<<PD=);
  51.             sei();
  52.         }
  53.     }
  54.     sei();
  55. }
This post was edited on 2011-08-02, 23:38 by dom.
Edit reason: code tags hinzugefügt
topic: Tankkontrolle - März 2010  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2688
ja auf den folien hab ich es durchgearbeitet aber ich habe nicht alles verstanden und ich habe gehofft jemande könnte es nochmal mit anderen worten formuliern.
topic: Tankkontrolle - März 2010  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2685
hi,
könnte jemand die Standardwarteschleife von mal genauer erklären. Sie wurde zwar schon von sicherha beantwortet aber ganz verstanden hab ich es noch nicht.
Vor allem die stelle nach sleep_disable();. Es ist mir schleierhaft warum man die interrupts mit cli() sperrt und dann mit sei() gleich wieder macht.
Die while schleife wird doch hier ohnehin verlassen da man sonst aus dem Befehl sleep_cpu nicht herauskommt.
Besten Dank schon mal :).

  1.     while (1) {
  2.         cli();
  3.         while (abgespert == 0) {
  4.             sleep_enable();
  5.             sei();
  6.             sleep_cpu();
  7.             sleep_disable();
  8.             cli();
  9.  
  10.         }
  11.         sei();
This post was edited on 2011-08-02, 23:40 by dom.
Edit reason: code tags
topic: Juli 2009- parameterübergabe über Stack (Aufgabe 3b)  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
In reply to post ID 2676
Ok danke.
Also nur diesen Teil des Stackaufbaus beschreiben.
Noch eine kleine zusätzliche Frage was ist diese ELF- Binary ?
topic: April 2009 multiple-choice  & Gültigkeit von Variablen  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
Subject: April 2009 multiple-choice  & Gültigkeit von Variablen
Hier noch einige fragen:
   1.Aufgabe 1a April 2009: ich denke die zweite antwort ist richtig allerdings wird hier behauptet der speicherplatz einer static lokalen variablen(b) ist von Programmstart bis
                                     Programmende angelegt. In der Folie 10-3 ist die lebensdauer allerdings von der ersten Verwendung bis zum Programmende angegben.
                                     Jetzt bin ich nicht sicher was stimmt und was nicht?

  2.Aufgabe 1d April 2009: Ich denke die dritte antwort ist richtig zumindest der erste Teil den Teil mit segmention fault verstehe ich nicht und bin froh über aufklärung.:)
                                    Natürlich würde ich auch gern wissen ob die dritte antwort passt.

 3. Aufgabe 3c Juli 2009 : in der aufgabe wird von 4 gültigkeitsbereichen gesprochen. Außerdem soll Gültigkeit gleich der Sichtbarkeit sein. Dann hat man doch nur 3 Bereiche
                                   ( alle lokalen variablen , modullokale (also globale static) und echt globale Variablen) weil ja die sichtbarkeit von allen lokalen Variablen gleich ist
                                    nämlich von der Definiton bis Blockende oder etwa nicht ?


im voraus schon mal vielen Dank. :)
topic: Juli 2009- parameterübergabe über Stack (Aufgabe 3b)  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
joan
Member since Apr 2011
15 posts
Subject: Juli 2009- parameterübergabe über Stack
Kurze Verständnisfrage:

ist diese Parameterüberabe über den Stack das gleiche wie der Stack Aufbau in den Vorlesungsfolien oder haben wir das in unserer Vorlesung nicht behandeld ?
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