Not logged in. · Lost password · Register

All posts by 5er (5)

topic: Tankkontrolle - März 2010  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
5er
Member since Apr 2011
5 posts
Erstmal Danke fürs Anschauen.
Denke die drei Sachen waren falsch?:
In da init hab ich vergessen PORTD als Ausgang zu setzen.
  1. DDRD|=(1<<0);
in Zeile 50: Des zweite bit muss 1 seins, nicht das niedrigste.  
  1.  } else if (vorher == 0 && ((PIND & (1 << 1)) == (1<<1)) {   //oder !=0

In Zeile 62 hab ich vergessen die Interrupts wieder einzuschalten.


Glaub die fehler hät ich nach fünf mal lesen nich gefunden ;)
topic: Printf-März2010  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
5er
Member since Apr 2011
5 posts
In reply to post ID 2638
Erstmal Danke fürs anschauen.
Muss mich erstmal entschuldigen, hab total verplant das ich die Aufgabe ganz normal Compilieren hätte können.  :rolleyes:
 
Ich hab irgendwie falsch gedacht und habe die Variablen wie globale Variablen behandelt. Was natürlich quatsch ist.
Die Fehler die er angezeigt hat, waren alle Fehler beim Abschreiben wie Kommasetzung oder dirent mit zwei r usw.
Jetzt die hoffentlich richtigere Version.
  1. /*
  2. * printf.c
  3. *
  4. *  Created on: 29.07.2011
  5. *      Author: Manuel
  6. */
  7.  
  8. #define _GNU_SOURCE
  9. #include <stdio.h>
  10. #include <sys/types.h>
  11. #include <errno.h>
  12. #include <dirent.h>
  13. #include <sys/param.h>
  14. #include <unistd.h>
  15. #include <sys/stat.h>
  16. #include <stdlib.h>
  17. #include <stdint.h>
  18.  
  19. int main (int argc,char *argv []){
  20.     DIR *ordner;
  21.     struct dirent *dir;
  22.     struct stat attribute;
  23.     uint16_t size;
  24.     uint8_t raeg;
  25.     uint8_t nraeg;
  26.  
  27.  
  28.     if(argc!=2){
  29.         perror("falsche Argumentenzahl");
  30.         exit(EXIT_FAILURE);
  31.  
  32.     }
  33.     if(chdir(argv[1])==-1){
  34.         perror("chdir");
  35.         exit(EXIT_FAILURE);
  36.     }
  37.  
  38.     ordner=opendir(".");
  39.     if(ordner==NULL){
  40.         perror("opendir");
  41.         exit(EXIT_FAILURE);
  42.     }
  43.  
  44.     while(errno=0,dir=readdir(ordner)){
  45.         if(*(dir->d_name)=='.'){
  46.             continue;
  47.         }
  48.         if(stat(dir->d_name,&attribute)==-1){
  49.             perror("stat");
  50.             exit(EXIT_FAILURE);
  51.         }
  52.         if(S_ISREG(attribute.st_mode)==1){
  53.             raeg++;
  54.             size+=attribute.st_size;
  55.         }else{
  56.                         nraeg++;
  57.                 }
  58.  
  59.         }if(errno!=0){
  60.         perror("(readdir");
  61.         exit(EXIT_FAILURE);
  62.     }
  63.  
  64.  
  65.     printf("Directory%s :\n",argv[1]);
  66.     printf("%d reguläre Dateien,%d sonstige Dateien,Gesamtspeicherbedarf %d\n",raeg,nraeg,size);
  67.  
  68. }
This post was edited 2 times, last on 2011-07-30, 16:07 by 5er.
topic: Printf-März2010  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
5er
Member since Apr 2011
5 posts
Subject: Printf-März2010
Und nochmal was.
Kommentare und korrektur erwüncht ;)

  1. /*
  2. * printf.c
  3. *
  4. *  Created on: 29.07.2011
  5. *      Author: Manuel
  6. */
  7.  
  8. int main (int argc,char *argv []){
  9.     static DIR *ordner;
  10.     static struct dirrent *dir;
  11.     static struct stat attribute;
  12.     static uint16_t size;
  13.     static uint8_t raeg, nraeg;
  14.  
  15.  
  16.     if(argc!=2){
  17.         perror("falsche Argumentenzahl");
  18.         exit(EXIT_FAILURE);
  19.  
  20.     }
  21.     if(chdir(argv[1]==-1)){
  22.         perror("chdir");
  23.         exit(EXIT_FAILURE);
  24.     }
  25.  
  26.     ordner=opendir(".");
  27.     if(ordner==NULL){
  28.         perror("opendir");
  29.         exit(EXIT_FAILURE);
  30.     }
  31.  
  32.     while(errno=0,dir=readdir(ordner)!=NULL){
  33.         if(*(dir->d_name=='.')){
  34.             continue;
  35.         }
  36.         if(stat(dir->d_name,&attribute)==-1){
  37.             perror("stat");
  38.             exit(EXIT_FAILURE);
  39.         }
  40.         if(S_ISREG(attribute.st_mode)==1){
  41.             raeg++;
  42.             size*=attribute.st_size;
  43.         }else(nraeg++);
  44.  
  45.         printf("Directory%s :",argv[1]);
  46.         printf("%d reguläre DAteien,%d sonstige Dateien,Gesamtspeicherbedarf %d",raeg,nraeg,size);
  47.     }if(errno!=NULL){
  48.         perror("(readdir");
  49.         exit(EXIT_FAILURE);
  50.     }
  51.  
  52.  
  53.     printf("Directory%s :",argv[1]);
  54.     printf("%d reguläre DAteien,%d sonstige Dateien,Gesamtspeicherbedarf %d",raeg,nraeg,size);
  55.  
  56. }
This post was edited on 2011-07-29, 17:31 by 5er.
topic: Tankkontrolle - März 2010  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
5er
Member since Apr 2011
5 posts
Subject: Tankkontrolle - März 2010
Einfach mal zum drüberschauen.
alles was auf da angabe steht hab ich nicht mehr dazu geschrieben

  1. /*
  2. * Tankkontrolle.c
  3. *
  4. *  Created on: 29.07.2011
  5. *      Author: Manuel
  6. */
  7.  
  8. static volatile uint8_t abgespert = 0;
  9. static volatile uint16_t fill = 0;
  10.  
  11. ISR( INT1_vec) {
  12.     abgespert + 1;
  13.     abgespert %= 2;
  14.     //0 zu 1 oder 1 zu 0
  15. }
  16. ISR( INT0_vec) {
  17.     fill++;
  18.     if (fill >= FILL_MAX) {
  19.         PORTD &= ~(1 << 0);
  20.     }
  21. }
  22.  
  23. void main(void) {
  24.  
  25.     init();
  26.  
  27.     while (1) {
  28.         cli();
  29.         while (abgespert == 0) {
  30.             sleep_enable();
  31.             sei();
  32.             sleep_cpu();
  33.             sleep_disable();
  34.             cli();
  35.  
  36.         }
  37.         sei();
  38.                 //status vorher merken um pegelwechsel zu registrieren
  39.         static uint8_t vorher = 0;
  40.         if (PIND & (1 << 1) = !0) {
  41.             vorher == 1;
  42.         }
  43.  
  44.         while (abgespert == 1) {
  45.             if (vorher == 1 && (PIND & (1 << 1)) == 0) {
  46.                 cli();
  47.                 fill--;
  48.                 sei();
  49.                 vorher = 0;
  50.             } else if (vorher == 0 && (PIND & (1 << 1)) == 1) {
  51.                 cli();
  52.                 fill--;
  53.                 sei();
  54.                 vorher = 1;
  55.             }
  56.                         //zufluss öffnen
  57.             cli();
  58.             if (fill <= FILL_MIN) {
  59.                 PORTD |= (1 << 0);
  60.  
  61.             }
  62.  
  63.         }
  64.     }
  65. }
  66.  
  67. void init(void) {
  68.     //des was schon in da angabe steht
  69.     MCUCCR |= (1 << ISC00);
  70.     MCUCCR |= (1 << ISC01);
  71.  
  72.     MCUCCR |= (1 << ISC10);
  73.     MCUCCR &= ~(1 << ISC11);
  74.  
  75.     GICR |= ((1 << INT1) | (1 << INT0));
  76.     cli();
  77.     PORTD |= (1 << 0);
  78. }
This post was edited on 2011-07-29, 17:30 by 5er.
topic: Welche Aussage zum Thema virtueller Adressraum ist richtig? Juli - 2009  in the forum: 2. Semester Grundlagen der systemnahen Programmierung in C
5er
Member since Apr 2011
5 posts
Subject: Welche Aussage zum Thema virtueller Adressraum ist richtig? Juli - 2009
d) Welche Aussage zum Thema virtueller Adressraum ist richtig?
❏ Die Umrechnung von virtuellen zu physischen Adressen erfolgt
beim Übersetzen durch den Compiler.   ->woher soll der kompiler wissen auf welchem pc das programm ausgeführt wird
❏ Dieselbe virtuelle Adresse kann in verschiedenen Prozessen auf unterschiedliche
physische Adressen abgebildet werden. bin nich sicher, dachte das die einzelnen Prozesse eigene Adressräume haben ob das bein physischen adressraum dann auch so ist weiß ich nicht
❏ Virtuelle Adressen entsprechen Variablennamen in einem C-Programm. In Zeigern
werden dagegen physische Adressen gespeichert, mit denen man die
Abbildung umgehen kann. ->eher nicht da zeiger auch auf virtuelle Speicheradresse zeigen
❏ Die Abbildung von virtuellen auf physische Adresse erfolgt während der Programmlaufzeit
durch eine spezielle Softwarekomponente ->bin mir nich sicher hab bei wiki gefunden dass das Memory Management Unit die abbildung macht, is aber doch hardware keine Softwarekomponente

Vieleicht könntet ihr ja mal was dazu sagen. Ich komm nich drauf was richtig ist.
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