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 Felix, > > > <code> > > function getValue (byte arraywert[], byte posLow, byte posHigh) returns long > > { > > long wert; int i; //max. 32bit / 4 Byte > > wert=arraywert[posLow]; > > for i=posLow+1...posHigh > > {wert=wert or (arraywert[i] shl (i-posLow)*8);} > > return wert; > > }</code> > > Gut, Du hast eine universelle Funktion gebaut. > Die For-Schleife macht das aber unnötig langsamer. > Besser ist es, da es hier ja nur zwei sinnvolle Möglichkeiten gibt, > diese mit if zu unterscheiden. > Außerdem wird Deine Funktion Probleme mit negativen 24-Bit-Werten haben. > Denn, zum Zusammensetzen von einem Integer wird man die Funktion kaum benutzen, > da man so unnotig in Long-Werte benutzt. > Daher wäre ausführungstechnisch z.B. das schneller: > <code>function getValue (byte arraywert[], byte posLow, byte len) returns long > {// len=3 oder 4 > long wert; int i; //max. 32bit / 4 Byte > if len==3 > { > wert=((arraywert[poslow+2] and 0x80)!=0 shl 7) or (arraywert[poslow+2] and 0x7F); > return (arraywert[poslow+1] shl 8) or arraywert[poslow] or (wert shl 16); > } > if len==4 > { > wert=(arraywert[poslow+3] shl 8) or (arraywert[poslow+2] and 0x7F); > return (arraywert[poslow+1] shl 8) or arraywert[poslow] or (wert shl 16); > } > }</code> > > > > > Hiermit wandle ich andersrum: > > > > <code> > > function putValue (long wert, byte posLow, byte posHigh) > > { > > int i; > > for i=posLow...posHigh {Out_Array[i]=wert shr (i-posLow)*8;} > > }</code> > > > > Schade, dass keine Arrays zurückgegeben werden können, sodass <code>Out_Array[]</code> > > global sein muss... > > Natürlich kannst Du Arrays zurückgeben. > OK, nicht direkt zuückgebe, aber der Funktion als Referenz übergeben und so direkt bearbeiten: > > <code>function putValue (long wert, byte posLow, byte posHigh, byte Out_Array[]) > { > int i; > for i=posLow...posHigh {Out_Array[i]=wert shr (i-posLow)*8;} > } > ... > ... > byte Daten[4]; > ... > putValue(1234567,0,3,Daten); > </code> > > In "Daten[]" hast Du nun die Daten. ;-) > > MfG André H. >
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB