mikrocontroller.net

Forum: Compiler & IDEs AVR Studio & gcc - Simulationsproblem


Autor: Christoph H. (hurrican)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mit avr-gcc (WINAVR-20070525) im Studio (v4.13) ein Programm 
geschrieben was u.a. zwei Eingänge abfragt, ob diese NICHT gesetzt sind. 
Die EIngänge sind mit Pull-Up (PORTD=0x40, PORTB=0x01).
 if (!(PORTD & (1<<PD6)) && !(PORTB & (1<<PB0)))
{
...
} 
Das Problem ist, dass bei der Simulation diese Abfrage immwer false 
ergibt, wenn die Eingänge low sind. Wenn ich aber schreibe
 if ((PORTD & (1<<PD6)) && (PORTB & (1<<PB0)))
{
...
} 
um abzufragen, ob diese gesetzt sind, funktionierts (wenn sie auch 
gesetzt sind:).
Seltsamerweise ist auch der Assemblercode richtig. Hier mal ein 
Ausschnitt aus dem list-File:
if (!(PORTD & (1<<PD6)) && !(PORTB & (1<<PB0)))      //(!INPUT1 && !INPUT2)                          
 522:  96 9b         sbic  0x12, 6  ; 18
 524:  1e c0         rjmp  .+60       ; 0x562 <main+0xac>
 526:  c0 9b         sbic  0x18, 0  ; 24
 528:  1c c0         rjmp  .+56       ; 0x562 <main+0xac>
....//hier gehts dann weiter, wenn die Eingänge nicht gesetzt sind
{ 
nur in der Simulation funktionierts nicht.

Was mach ich da falsch? Was macht AVR-Studio/gcc falsch?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich schätze mal du hast den De Morgan ausser acht gelassen

  ! ( a && b )   <==>   !a || !b

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, du redest von Eingängen, liest aber die PORTx-Register aus. Solltest 
du nicht eher von PINx lesen?

Mit Code in #defines solltest du übrigens sehr vorsichtig sein, da du 
dem Compiler damit Code zuschiebst, den du so nicht geschrieben hast. 
Ich sag' nur
#define sum a+b
if (sum * 3 == 9) {...}

Jedenfalls fehlt bei deinen Makros schonmal je eine schliessende 
Klammer.

@Peter:

Ich sehe nicht ganz, was du damit sagen willst, der Code ist doch sonst 
richtig.


EDIT: Was ist denn hier passiert, da war doch eben noch ein zweiter 
Beitrag von Christoph?!

Autor: Christoph H. (hurrican)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, das Problem hat sich gelöst.
Hab den guten alten Anfängerfehler gemacht und die Ports und nicht die 
Pins abgefragt:)

Trotzdem DANKE

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.