| Re: zusammengesetzte arithmetische Ausdrücke Kategorie: Programmierung C (von ER - 27.08.2009 8:40) | ||
| Als Antwort auf Re: zusammengesetzte arithmetische Ausdrücke von PeterS - 26.08.2009 17:43 | ||
| ||
|
> > 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; } | ||
Antwort schreiben Antworten: | ||
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

