Forum: Mikrocontroller und Digitale Elektronik Programm läuft niccht Atmega 64


von Lisa (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Freunde

Ich habe einen Problem und brauche dringend Hilfe, da ich leider allein 
nicht weitergekommen bin.
ich habe einen kleinen Programm für mein atmega 64 geschrieben und 
versuche dies über den debugger zum laufen zu  brigen, geht leider 
nicht.
mein programm sollte so laufen. Die erste if schlöeife prüft ob alle 
eingäne in Port A eine 1 haben, und in der lzwiten if schleide wird 
geprüft, ob PA7 und PA6, PA5, PA4 high sind und die ändern low haben.
leider geht der debugger nie in der ersten schleife rein sonden nimmt 
immer die Else. über den debugger versuche ich die den Zustand von PINA 
( PORTA Data direction register den zustasnd zu ändern)
was mache ich hier falsch, bitte um Hilfe (programm siehe Anhang)

von jemand (Gast)


Lesenswert?

IF -sind keine Schleifen.

von jemand (Gast)


Lesenswert?

Warum steht beim ersten IF "=!" und beim zweiten IF "!=" ?

von Lisa (Gast)


Lesenswert?

Ja sorry das ist eine Anweisung, aber deine Antwort bringt auch keine 
Hilfr mit

von Paul H. (powl)


Lesenswert?

Also ein bisschen Mühe beim Schreiben hättest du dir schon geben können. 
Ich find das irgendwie respektlos wenn man hier einfach nur irgendwie 
was hinschmiert und dann Hilfe erwartet. Nicht mal Tippfehler 
korrigierst du.

In der ersten if steht, wie jemand schon festgestellt hat, ein =!, das 
macht keinen Sinn.

von Lisa (Gast)


Lesenswert?

Paul Hamacher schrieb:
> Also ein bisschen Mühe beim Schreiben hättest du dir schon geben
> können.
> Ich find das irgendwie respektlos wenn man hier einfach nur irgendwie
> was hinschmiert und dann Hilfe erwartet. Nicht mal Tippfehler
> korrigierst du.
>
> In der ersten if steht, wie jemand schon festgestellt hat, ein =!, das
> macht keinen Sinn.

Da gebe ich dir schon recht, aber mein Compiler zeigt garkein Fehler, 
deswegen bin ich darauf garnicht gekommen.

von Paul H. (powl)


Lesenswert?

Man kann in C sehr viel falsch machen ohne dass der Compiler meckert ;) 
die doppelten Klammern in den if-Abfragen kannst du dir übrigens auch 
sparen, ist aber kein Fehler.

von Jonas B. (jibi)


Lesenswert?

>Ja sorry das ist eine Anweisung

Nö auch nicht. Und es bringt REIN GAR NICHTS bei solch einfachen 
Aufgaben nach der Lösung zu fragen, dann hängst du bei der nächsten 
Aufgabe wieder fest...

Im übrigen hier kannst du anfangen nach Fehlern zu suchen:

>Warum steht beim ersten IF "=!" und beim zweiten IF "!=" ?

Gruß Jonas

von Peter II (Gast)


Lesenswert?

Lisa schrieb:
> Da gebe ich dir schon recht, aber mein Compiler zeigt garkein Fehler,
> deswegen bin ich darauf garnicht gekommen.

dann schalte alle Warnungen ein, dann sollte schon etwas kommen.

von Lisa (Gast)


Lesenswert?

Peter II schrieb:
> Lisa schrieb:
>> Da gebe ich dir schon recht, aber mein Compiler zeigt garkein Fehler,
>> deswegen bin ich darauf garnicht gekommen.
>
> dann schalte alle Warnungen ein, dann sollte schon etwas kommen.

wie schalte ich alle Warnungen an?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lisa schrieb:
> wie schalte ich alle Warnungen an?

-Wall -Wextra

von Rebi (Gast)


Lesenswert?

=! ist eine zuweisung, damit weisst du den Wert nicht DiodeOkPortA dem 
StatusPortA zu, da in einem if keine zuweisungen erlaubt sind sollte es 
eine Warning geben und darum ist es nicht gegangen.

Der Befehl =! macht sinn wenn du in wie folgt anwendest.

bool y = false;
int x = 2;

if( x == 2)
{
y =! y
}

Damit setzt du y auf true.

von Lisa (Gast)


Lesenswert?

Iich habe die von euch gefundene Fehler korrigiert jetzt läuft alles, 
aber wie kann ich alle Warnung einschalten, die antwort von Jörg habe 
ich leider nicht verstanden und die google Suche dazu ergab nicht

von Peter II (Gast)


Lesenswert?

Rebi schrieb:
> da in einem if keine zuweisungen erlaubt sind sollte es
> eine Warning geben und darum ist es nicht gegangen.

warum sollte das in C nicht erlaubt sein?
1
if ( a=!b ) {
2
}

ist zu zulässig, und auch eventuell sogar sinnvoll.

von Rebi (Gast)


Lesenswert?

Peter II schrieb:
> ist zu zulässig, und auch eventuell sogar sinnvoll.

In ihrem Fall ist es nicht sinnvoll da sie eine Bedingung will, habs ein 
bisschen komisch Formuliert. Für eine Bedingung ist es nicht erlaub, so 
meinte ich.

Welches Studio verwendest du?
Erscheinen die Warnings beim ersten mal und dann nicht mehr?

von Karl H. (kbuchegg)


Lesenswert?

Rebi schrieb:
> Peter II schrieb:
>> ist zu zulässig, und auch eventuell sogar sinnvoll.
>
> In ihrem Fall ist es nicht sinnvoll da sie eine Bedingung will, habs ein
> bisschen komisch Formuliert. Für eine Bedingung ist es nicht erlaub, so
> meinte ich.

Bitte verwende hier nicht die Phrase "nicht erlaubt". Das ist 
missverständlich. Denn syntaktisch ist an
1
   if( a =! b )
2
     ...

nichts auszusetzen. Es ist ein wenig seltsam formatiert. Geübtere 
Programmierer würden wahrscheinlich
1
   if( a = !b )
2
     ...
schreiben. Aber aus Sicht der C-Syntax ist da alles in Ordnung. Es ist 
erlaubt. Ob es das ist, was der Programmierer wollte, ist eine andere 
Frage.

Das das nicht das ist, was Lisa eigentlich wollte, ist uns allen klar. 
Aber du machst es mit einem 'nicht erlaubt' nicht besser. Denn das 
suggeriert, dass hier eigentlich ein Syntaxfehler vorliegen würde, der 
vom Compiler nicht gemeldet wird. Und das stimmt ganz einfach nicht.

von Karl H. (kbuchegg)


Lesenswert?

Paul Hamacher schrieb:
> Man kann in C sehr viel falsch machen ohne dass der Compiler meckert ;)
> die doppelten Klammern in den if-Abfragen kannst du dir übrigens auch
> sparen, ist aber kein Fehler.

Die doppelten Klammern sind genau der Grund, warum der gcc bei
1
   if( ( a =! b ) )
2
     ...
keine Zuweisungswarnung bringt. Sie signalisieren dem Compiler: Du ich 
wollte da wirklich eine Zuweisung machen.
Würde man die doppelten Klammern rausnehmen, kommt auch die 
entsprechende Warnung.

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.