Array Pointer

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

fuc.. hamma nit...

abgesehen davon, wie man das füllen will, klar kann man mogeln:

Code: Alles auswählen

Structure Extended
  Low.l
  Mid.l
  Hi.w
EndStructure

; Alternativ
;Structure Extended
;  Low.q
;  Hi.w
;EndStructure

Structure PDLLParams
  S.Extended[99]
EndStructure

Define PINPUT.PDLLParams
Define POUTPUT.PDLLParams
...magste fürn anfang nich was einfacheres proggen... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
mknjc
Beiträge: 217
Registriert: 09.09.2006 12:59

Beitrag von mknjc »

Nee eigentlich nicht.

Aber kannst du mir sagen wie ich das dann verwende?

Ich hab jetzt

Code: Alles auswählen

Structure Extended 
    Low.l 
    Mid.l 
    Hi.w 
EndStructure 

Structure PDLLParams 
    s.Extended[99] 
EndStructure 

Define PINPUT.PDLLParams 
Define POUTPUT.PDLLParams

ProcedureDLL Calculate(PINPUT.PDLLParams,POUTPUT.PDLLParams)
POUTPUT\s = POUTPUT\s[0]
EndProcedure
Doch da spuckt mir der Compiler ein Syntax Error aus. :(

Mfg mknjc
Ich nutze PureBasic 4.02 unter Linux und Windows.

Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

gleitkomma auch noch? so ein mist..
dann kannste vergessen, die mit einfachen mitteln zu emulieren.
(gleitkomma = float, PB hat 32bit = float und 64bit = double)

schön, dass Delphi so nen Typ hat,
möglicherweise entspricht das der Größe mit der die FPU einer 64bit CPU rechnet,
aber in PB ist das mit halbwegs vertretbarem aufwand unmöglich zu emulieren.
du musst ja die I/O deiner Funktion auch verarbeiten können,
und dafür bräuchtest du procedures, die 80bit-gleitkomma-arythmetic beherrschen...

[edit]
klar, bei POUTPUT\s = POUTPUT\s[0] ist der syntax error..

was willst du denn eigentlich machen? wozu brauchst du das?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

zwei Pointer auf Arrays gibt und ich aus dem einen lesen muss und ins andere schreiben muss
was ungefähr mußt du denn machen?
my pb stuff..
Bild..jedenfalls war das mal so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich meine, die kernfrage ist, ob es diese DLL sein muss...

das schreiben/lesen auf den Extended-Typ ist in PB praktisch unmöglich.*


damit meine ich, mit vertretbarem aufwand.
wie gesagt, wenn jemand eine 80bit-float-Lib hat/proggen will,
ist auch das lösbar, aber ob es praktisch und performant ist,
ist eine weitere frage...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
mknjc
Beiträge: 217
Registriert: 09.09.2006 12:59

Beitrag von mknjc »

Erstmal möchte ich schaffen dass wenn an einem Pin des Bauteils Spannung anlege der dauzugeschaltete Pin am Ausgang die selbe Spannung besitzt.

Später soll es dann m eine Speichereinheit erweitert werden so das ein CMOS IC 4094 herraus kommt (Besonderes Schiebergister).

Da das IC mit Digitalpegeln arbeitet könnte ich doch einfach nur überprüfen ob 0 oder ein ander Bitwert in der Variable ist?

Ich habe mal den kompletten Teil der Anleitung hochgeladen und werde den Quellcode auch aktuell auf dem Server haben.

http://markuskn.homeip.net/Schieberegister/

In der Hilfe findet sich auch ein Dephi Beispiel Quelltext

[Ironie]
Wenn mir jemand dabei hilft das Programm auf PureBasic zu bauen hätte ich damit schonmal keine Probleme.
[/Ironie]

Mfg mknjc
Ich nutze PureBasic 4.02 unter Linux und Windows.

Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

:D nett, dass du ironie-tags gesetzt hast...

also, mein tip fürs erste:
da
a) der datenaustausch mit einer DLL per Extended-Type "unrealistisch" ist
und
b) dein schieberegister bestimmt auch mit anderen Datentypen als 80bit-float klarkommt,

poste das ganze mal neu formuliert im Bereich "Hardware",
da findest du am ehesten Kollegen, die bock auf sowas haben. ;)

ernsthaft,
das ansprechen externer hardware ist für ein paar Kollegen ein echtes Steckenpferd,
und eigentlich sollte es machbar sein in PB mit datentypen, die PB auch verwalten kann.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Hab mal wieder nicht alles durchgelesen, aber wer Prozeduren zum
Konvertieren von 80bit Floats und Doubles möchte:

Code: Alles auswählen

Procedure DoubleToExtended(d.d, *out)
  !FLD qword[p.v_d]
  !MOV Eax, [p.p_out]
  !FSTP tword[Eax]
  ProcedureReturn
EndProcedure

Procedure ExtendedToDouble(*in, *out.Double)
  !MOV Eax, [p.p_in]
  !FLD tword[Eax]
  !MOV Eax, [p.p_out]
  !FSTP qword[Eax]
EndProcedure



d.d = 213.1564
f.d = 0
*mem = AllocateMemory(10)
DoubleToExtended(d, *mem)
ExtendedToDouble(*mem, @f)
Debug f
Wenns nicht hilft, Pech <)
Antworten