Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo Roman, > > > ich habe drei (byte,int,long) Hilfsfunktionen geschrieben, die das Addieren von > > werten ermöglichen, aber gerade die int funktioniert nicht: > > > > function addint (int addr, int data) { > >    int value; > >    value = readint(addr)* data; > >    if (value < (0x8000)) { > >       writeint(addr, value); > >    } else { > >       writeint(addr, 0x8000); > >    } > > } > > Die  IF-Abfrage kann nicht funzen, da 0x8000 als -32768 gelesen wird. > Es gibt jedoch keine kleinere Integerzahl als -32768. > Ich nehme an, daß Du so einen Überlauf abfangen willst und nur pos. Werte > zulassen willst, und im Fehlerfall -32768 ins EEProm geschrieben werden soll. > Die Abfrage kannst Du dann auf zwei Weisen durchführen: > 1. logisch: > if value and 0x8000 // Wenn Integerwert negativ > 2. Vergleich > if value < 0 // Wenn Integerwert negativ > > > > Ich habe bemerkt, dass der lesevorgang auch abgebrochen > > werden kann, falls das eeprom nicht antwortet: > > ... > >   loop > >   { > >    if i2c.start(eepromaddr) break; > >    if i>=100 return 0; > >    i=i+1; > >    sleep 1; > >   } > > ... > > > > kann man das abstellen, oder ist das gerade der Fehler!? > > Bei meinem Programm greifen regelmäßig mehrere Threads > > auf das eeprom zu. > > Nein, das darf man nicht "abstellen", da sonst das Programm an diese > Stelle stehen bleiben kann. > Diese Schleife ist notwendig, da das EEProm eine gewisse Zeit benötigt, > um Daten zu schreiben und in dieser Zeit nicht reagiert. Dies kann einige ms dauern. > Wenn das EEProm nach 100 Durchläufen nicht mehr reagiert, kann es nur > defekt oder nicht angeschlossen sein. > Auch, wenn mehrere Threads auf das EEProm zugreifen, darf es durch das > Capture keine Probleme geben. > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB