Not logged in. · Lost password · Register

Baum
Member since Jul 2013
8 posts
Subject: Klausur Juli 2010
Könnte das jemand korrigieren? :)

  1. /*Funktionsdeklarationen, globale Variablen, etc.*/
  2. static void init(void);
  3. static void wait(void);
  4. static void cb(void);
  5. volatile uint8_t hoechstwert;
  6. volatile uint8_t taster;
  7.  
  8. /*Funktion main*/
  9. void main(void){
  10.  
  11.     /*Aufruf der Hardware Initialiserung und Initialisierung der Callback-Funktion*/
  12.     init();
  13.     registerCallbackButton0(cb);
  14.    
  15.    
  16.     /*Initialisierungsphase*/
  17.     while(1){
  18.    
  19.         for(uint8_t i = 1; i<9; i++){         
  20.             PORTC &= ~(1<<i-1);   
  21.             wait()
  22.             if(taster ==1) {
  23.                 hoechstwert =i;
  24.                 break;
  25.             }
  26.         }
  27.         if(taster ==1) break;
  28.         cli();
  29.         PORTC = 0xff;
  30.         sei();   
  31.    
  32.     }
  33.     taster =0;
  34.    
  35.     /*Wuerfelphase*/
  36.     while(1){
  37.         for(uint8_t i = 1; i<=hoechstwert; i++){
  38.             PORTC = ~(1<<(i-1));
  39.             if(taster==1) break;
  40.             if(i == hoechstwert) hoechstwert = 1;
  41.         }
  42.        
  43.         cli();
  44.         taster = 0;
  45.         while(taster!= 1){
  46.             sei();
  47.             sleep_cpu();
  48.             cli();
  49.         }
  50.         taster = 0;
  51.         sei();
  52.     }   
  53. }
  54. /*Ende der Funktion main*/
  55.  
  56. /*Initialisierungsfunktion*/
  57. static void init(void){
  58.     DDRC = 0xff;
  59.     PORTC = 0xff;
  60.     sei();
  61.     sleep_enabble();
  62. }
  63.    
  64. /*Wartefunktion*/
  65. static void wait(void){
  66.     for(volatile uint16_t a = 0; a<1000; a++){}
  67. }
  68.  
  69. /*Callbackfunktion*/
  70. static void cb(void){
  71.     taster = 1;
  72. }
morty
SPiC-Meister
(Moderator)
Member since May 2011
331 posts
Warum machst du nur die Funktionen static und nicht auch die Variablen?

28,30: Warum sperrst du da die Interrupts?
17-32: Mit einer if-Abfrage  wärst auch mit einer Schleife hingekommen, dann hättet dir das doppelte break gespart und wenn du die while-bedingung noch genutzt hättest, hättest auch das break weglassen können.
37-41: Das funktioniert zwar, aber ich glaubt das wäre mit einer while einfacher als mit einer for.

Der Rest sieht auf die Schnelle ok aus.

P.s.: Solltest du deinen Code korrigieren, bitte mach einen neuen Post, damit andere meinen Kommentar nachvollziehen können.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Special characters:
Go to forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen