Seite 4 von 6
Re: Notation dll Deklaration
Verfasst: 11.11.2009 22:42
von ts-soft
six1 hat geschrieben: 
aber in meinem Delphi Programm muss ich auch keine Pointer übergeben, wenn ich die Ports abfrage... in PB schon

und jetzt?

Das @ vor dem Array kannste Dir in PB auch sparen, wird sowieso als Pointer übergeben
und jetzt?

Re: Notation dll Deklaration
Verfasst: 12.11.2009 00:59
von mk-soft
Hi six1,
auch von mir Herzlich Willkommen im Forum.
Das mit den Zeiger (Pointer) oder sogar Zeiger auf einen Zeiger ist manchmal etwas verwirrend. Ist bei Purebasic etwas an 'C' angelehnt.
Ein Zeiger anlegen ist z.B. "Global *Zeiger". Dann kann man sogar einen Zeiger auf Zeiger übergeben FunctionXYZ(@*Zeiger, ...), usw...
An besten mal bei Freak
http://freak.purearea.net/ unter Help das "Pointer Tutorial" mal anschauen.
Alles Gute
Michael
Re: Notation dll Deklaration
Verfasst: 12.11.2009 11:34
von six1
Boahh, voll drauf rein gefallen
Delphi Deklaration:
Code: Alles auswählen
function DoGetRS232Buffer(var RS232Buffer:array of byte; var RS232BufferLength:integer):integer; stdcall external AVR309DLL name 'DoGetRS232Buffer';
C Deklaration:
Code: Alles auswählen
int __stdcall DoGetRS232Buffer(uchar * RS232Buffer, int DummyInt, int * RS232BufferLength);
ich habe also gedacht, mach ich mal den "dummy.l" mit rein und siehe da
kaum macht man es richtig, schon geht's

Re: Notation dll Deklaration
Verfasst: 12.11.2009 19:28
von six1
...und das ein normales Byte signed ist, muss man auch erst mal "erfahren"

Re: Notation dll Deklaration
Verfasst: 12.11.2009 20:20
von Kaeru Gaman
das kannst du übrigens unsigned interpretieren, indem du es mit $FF ANDest und in einen größeren Container packst:
Re: Notation dll Deklaration
Verfasst: 12.11.2009 20:29
von six1
mit anderen Worten: wenn man ein signed in eine unsigned Variable übergibt, wird der Wert unsigned übernommen?
lustige Fallstricke
Ich hatte nur gemerkt, wenn ich Bit.7 eines Port setze, dass alle Pin's des Port auf 1 gehen...
das war dann der Zeitpunkt, mal in die Hilfe zu schauen... machen ja nur Weicheier

Re: Notation dll Deklaration
Verfasst: 12.11.2009 20:40
von Kaeru Gaman
wenn man ein signed in eine unsigned Variable übergibt, wird der Wert unsigned übernommen?
nein.
1. es gibt keine unsigned variablen in PB, außer die, die für Char-Manipulation gemacht sind.
also nur .a für ascii und .u für unicode, und .c was je nach verwendetem stringsystem eines der beiden ist.
2. das simple überführen in einen größeren Container würde logischer Weise auch nicht das Vorzeichen eliminieren, sonst wär das ja Müll.
das Vorzeichen bleibt erhalten, es wird von Bit7 auf Bit31 verlegt.
aber
die ausführung von & $FF bei Byte bzw. & $FFFF bei Word oder & $FFFFFFFF bei Long ermittelt den Wert
vorzeichenlos im betroffenen Register.
Dann kann man ihn in einen größeren Container packen, damit das Ex-Vorzeichenbit auch weiterhin als Wertebit interpretiert werden kann.
Re: Notation dll Deklaration
Verfasst: 12.11.2009 20:47
von six1

ok, zweiter Anlauf:
mein Problem war der Wert $ff im Byte. Hier zeigt das msb den negativen Wert an. Wenn also b.7 gesetzt ist, dann wird bei Übergabe in eine "größere" Variable lediglich deren msb gesetzt... klar
ich hatte einfach erwartet, dass 255 rein gehen, wo 255 drauf steht
Ich programmiere viel 8-Bit Microcotroller, da ist die Sache ganz klar. Die mögen unsigned Byte Werte

Re: Notation dll Deklaration
Verfasst: 12.11.2009 20:58
von Kaeru Gaman
es gehen natürlich 255 rein, nur du bekommst sie nicht angezeigt, wenn du sie von Byte aus in Text umwandeln läßt.
(jede Ausgabe ist ja eine Umwandlung in einen String)
du kannst im Grunde ganz normal rumdaddeln als wären die Variablen unsigned, nur bei Ausgabe oder Vergleichen muss man dran denken dass sie signed sind.
Re: Notation dll Deklaration
Verfasst: 12.11.2009 21:07
von six1

1 << 7 ergibt aber $ff und das ist dann nicht ganz egal. Wenn ich nach bit operationen das Byte übergebe und auf einmal alle Port Pin's angehen...