Forum: Compiler & IDEs einfaches programm


von Till H. (mohman)


Lesenswert?

hallo zusammen, ich bin neu auf dem gebiet "c" und habe ein kleines 
erstes programm geschrieben! wie auch sonst funzt das nicht richtig! ich 
kann ausgänge setzten aber iwie kann ich das PIN-register nicht auslesen 
oder hab es falsch konfiguriert!

ich arbeite mit avrstudio und avr-gcc!...makefile hab ich nicht selber 
erstellet, sondern nur bei avrstudio die konfiguarion der "cpu und takt 
vorgenommen" liegt hier der fehler !?

code:
#include <avr/io.h>

int main(void)
{
DDRC |= (1<<DDC2) | (1<<DDC3) |(1<<DDC4) |(1<<DDC5);
DDRB &= ~(1<<DDB0);
if (PINB &(1<<PINB0))
{
PORTC |= (1<<PC2);
}
else
{
PORTC &= ~(1<<PC2);
}
}

ich hoffe ihr könnt mir helfen :)
Dankeschön :)

von holger (Gast)


Lesenswert?

Dein Programm ist GANZ schnell zuende wenn es keine
mainloop gibt:
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
 DDRC |= (1<<DDC2) | (1<<DDC3) |(1<<DDC4) |(1<<DDC5);
6
 DDRB &= ~(1<<DDB0);
7
8
 while(1) // do forever
9
  {
10
   if (PINB &(1<<PINB0))
11
    {
12
     PORTC |= (1<<PC2);
13
    }
14
   else
15
    {
16
     PORTC &= ~(1<<PC2);
17
    }
18
  }
19
}

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Ohne genau zu wissen was du erreichen willst, versuchs mal mit ner 
Endlosschleife in der du die Abfrage und das Setzen machst, sonst läuft 
es nur einmal durch.

PS: Ein "return 0" am Ende ist auch nicht verkehrt.

EDIT: Da war einer schneller...

von Till H. (mohman)


Lesenswert?

hey danke für die schnellen antworten :)
macht sinn ;) werd das gleich mal testen

von Till H. (mohman)


Lesenswert?

Hallo nochmal! jetzt funktioniert alles soweit :)
eine frage hätte ich aber noch...
ist die vorgehensweise   while(1) eine gänige lösung !?
gibt es andere möglichkeiten !?

MfG :)

von Karl H. (kbuchegg)


Lesenswert?

Till Hagemann wrote:
> Hallo nochmal! jetzt funktioniert alles soweit :)
> eine frage hätte ich aber noch...
> ist die vorgehensweise   while(1) eine gänige lösung !?

Ist völlig normal.
Dein Programm darf nie aufhören. Was soll auch der µC sonst tun, wenn er
* zwar noch Strom hat
* aber kein Programm mehr dass er abarbeiten soll

von Christoph M. (fakulatus)


Lesenswert?

Na ja, jeder Prozessor braucht einen Loop (while(1) )
Im Unterschied zu einem PC der mehrere Prozesse hat, ist ein uC auf 
einen einzigen Prozess beschränkt, also genau derjenige, der du 
geschrieben hast.

Falls das Programm irgendwann zu Ende ist, weiss der Prozessor nicht 
mehr was er tun soll, also läuft er mal quer über den ganzen Speicher, 
was irgendwelche ungewünschte Aktionen oder Absturz zur Folge haben 
kann. (Bei einem PC kehrt der Prozessor wieder zum Betriebssystem 
zurück, also hat er noch andere Aufgaben die er erledigen muss)

Bei deinem Programm lag das Problem an einem anderen Ort: Deine 
if-Abfrage wurde nur einmal durchlaufen, und zwar genau beim Aufstarten 
des Prozessors. Eine spätere Änderung am PINB0 hatte somit keine 
Auswirkungen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.