Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: zusammengesetzte arithmetische Ausdrücke Kategorie: Programmierung C (von PeterS - 27.08.2009 11:55)
Als Antwort auf Re: zusammengesetzte arithmetische Ausdrücke von ER - 27.08.2009 8:40
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128, CC-Pro 32 Application Board, CC-Pro 128 Application Board, Pro-Bot128
> > > Hallo zusammen,
> > > bei meinen Aktivitäten zur Umsetzung meiner Programme von der CC1 auf die CC Pro
> > > bin ich auf etwas gesto�en, was sehr fragwürdig ist:
> > > Folgender Code lässt sich fehlerfrei compilieren.
> > > Die Funktion liefert die Werte 0x0A für OK oder 01 - Fehler zurück.
> > > Das Programm kommt aus der Schleife nicht mehr raus.
> > > Der arithmetische Ausdruck wird anscheinend nicht korrekt
> > > aufgelöst. Wird immer zu 1 berechnet.
> > >
> > > void DS2482WIRE_WAITIDLE(void)
> > > {
> > > DS2482WT:
> > > if ((DS2482GET_STATUS() & 1) > 0) goto DS2482WT;
> > > }
> > >
> > >
> > > Der Code funktioniert, wenn man die Berechung aus der Klammer
> > > herauslöst:
> > >
> > > void DS2482WIRE_WAITIDLE(void)
> > > {
> > > DS2482WT:
> > > buffer=DS2482GET_STATUS() & 1;
> > > if (buffer > 0) goto DS2482WT;
> > > }
> > >
> > > Was Ist da los? Also der B++ Compiler vom Stefan Tapertzhofen kann so etwas
> > > problemlos bearbeiten.
> > >
> > > mfg
> > > Ellen
> >
> > Hallo Ellen,
> >
> > ich kann das nicht bestätigen. Bei mir funktionieren beide Ausdrücke. Bitte gib doch auch die
> > Funktion DS2482GET_STATUS() an, vielleicht ist der Fehler da.
> >
> > Gruss Peter
>
>
> Hallo Peter,
> ok, hier der Code:
> Die Inhalte aus dem Status Register kommen korrekt über den I2C Bus.
> Das habe ich mittels LA überprüft �brigens komme ich sehr gut voran
> mit der Pro. Seit gestern laufen alle DS 1820 Kontrollroutinen.
> Die CC Pro ist erheblich schneller als die CC1. Das äu�erst sich darin dass
> die I2C Datenpakete fast ohne Pause aufeinander folgen. Beim Lesen vom 1 Wire
> Bus kann es deswegen zu Timingproblemen kommen, weil der 1 Wire Bus zu langsam
> ist. An einigen Stellen muss man die CC Pro ausbremsen mit 50 us.
> Dann läuft der Bus absolut stabil.
>
> GruÃ?
> Ellen
>  
>
> //-----------------------------------------------------
> //----------------- GET DS2482 STATUS -----------------
> //-----------------------------------------------------
> byte DS2482GET_STATUS(void)
> {
>
> I2C_Start();
> I2C_Write(ADDR);
> I2C_Write(SET_READ_POINTER);
> I2C_Write(STATUS_POINTER);
> I2C_Stop();
>
> I2C_Start();
> I2C_Write(ADDR+1);
> DATA=I2C_Read_NACK();
> I2C_Stop();
>
> return DATA;
> }
>

Hmm, schick mir doch bitte das Projekt an ccpro@gmx.de, vielleicht ergibt sich das Problem nur im
kompletten Programmcode.
 
Ich habe folgendes getestet:

byte DS2482GET_STATUS(void)
{
    return(0x0A);
}

void DS2482WIRE_WAITIDLE(void)
{
    DS2482WT:
    if ((DS2482GET_STATUS() & 1) > 0) goto DS2482WT;
}

Bei einem Aufruf von S2482WIRE_WAITIDLE() kommt die Funktion ohne Schleifendurchlauf direkt
zurück. Es wird hier korrekt ausgewertet.

Gruss Peter




    Antwort schreiben


Antworten:

Re: zusammengesetzte arithmetische Ausdrücke (von ER - 28.08.2009 16:02)