AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein virtuelle adressen in physikalische adressen umwandeln
Thema durchsuchen
Ansicht
Themen-Optionen

virtuelle adressen in physikalische adressen umwandeln

Ein Thema von ToniR · begonnen am 10. Jun 2005 · letzter Beitrag vom 14. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
ToniR

Registriert seit: 10. Jun 2005
Ort: Bruckmühl
3 Beiträge
 
Delphi 7 Enterprise
 
#1

virtuelle adressen in physikalische adressen umwandeln

  Alt 10. Jun 2005, 18:55
Hallo!

Ich habe das Problem, dass ich die Adresse eines Buffers in meiner Delphi-Anwendung an ein PCI-Gerät übergeben muss, dass daraufhin die Daten in diesem Buffer in kleinen Häppchen ausliest. Dazu muss ich aber die echte physikalische Adresse des Buffers übergeben und nicht die virtuelle Adresse, die ich von der WinAPI-Funktion GlobalAlloc(GMEM_FIXED, ...) bekomme.

Ich habe schon verzweifelt nach einer einfachen Lösung für mein Problem gesucht, bin bis jetzt aber nicht fündig geworden.

Vielleicht kann mir ja hier jemand weiterhelfen.

Viele Dank im Voraus

ToniR
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: virtuelle adressen in physikalische adressen umwandeln

  Alt 11. Jun 2005, 20:26
Also ich weiß ja nicht von welchem Zielbetriebssystem wir hier reden, aber der korrekte Weg führt in jedem Fall über einen Treiber. Wobei es verschiedene I/O-Formen (unbuffered, etc) gibt. Der Treiber kümmert sich dann normalerweise um den Rest (z.B. korrekte Adressierung). Übrigens, entgegen allgemeiner Befürchtungen, wird die Performance von dem extra Layer (Treiber) nicht beeinträchtigt - oder zumindest nur sehr unwesentlich.

Kannst du ein wenig mehr Informationen geben?!

Achso, Nachtrag:
An die physikalische Adresse kommst du normalerweise nur mit dem Zugriff, den ein Treiber dir bietet (in NT ist das sehr strikt getrennt). Der Treiber wiederum sollte es dir ermöglichen eine virtuelle Adresse innerhalb deines Prozesses zu erhalten, die "auf den physischen Teil" zeigt. Das funktioniert mit MmMapIoSpace(). Schau dir dazu am besten das DDK mal an. Das gibt es IMO auch online bei MSDN.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: virtuelle adressen in physikalische adressen umwandeln

  Alt 11. Jun 2005, 20:37
also bei drag & drop geht das ganze mit
GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE (also nicht fixed)
und anschließend
"GlobalLock"
schau dir dazu aber die Hilfe an...

Drag&Drop Beispielquelltext (zum senden einer solchen Message)
http://www.delphipraxis.net/internal...=333892#333892
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: virtuelle adressen in physikalische adressen umwandeln

  Alt 11. Jun 2005, 21:06
Hi SirThornberry,

sei mir nicht böse, aber ich habe das Gefühl, du hast die Frage nicht verstanden. Das was du mit Windows (egal von welchem Heap du reservierst) bekommst ist immer virtueller Speicher im Usermode.

Gruß,
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: virtuelle adressen in physikalische adressen umwandeln

  Alt 11. Jun 2005, 21:12
hmm, jetzt wo du's "sagst" - > stimmt. ich weiß ja aber auch nicht in wie weit das ansteuern über einen treiber läuft. Vielleicht läuft es ja über die Einbindung einer DLL und dementsprechend würde es damit funktionieren.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: virtuelle adressen in physikalische adressen umwandeln

  Alt 11. Jun 2005, 21:17
Zitat von SirThornberry:
hmm, jetzt wo du's "sagst" - > stimmt. ich weiß ja aber auch nicht in wie weit das ansteuern über einen treiber läuft. Vielleicht läuft es ja über die Einbindung einer DLL und dementsprechend würde es damit funktionieren.
Also ob du einen Treiber über eine weitere Abstraktionsschicht (DLL) ansprichst bleibt dir meist überlassen, wenn du denn die IOCTLs kennst, mit denen man den Treiber ansteuern kann
  Mit Zitat antworten Zitat
ToniR

Registriert seit: 10. Jun 2005
Ort: Bruckmühl
3 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: virtuelle adressen in physikalische adressen umwandeln

  Alt 12. Jun 2005, 11:16
Hallo Olli,

das Betriebssystem ist WinXP, aber der Aufwand, mich in die Treiber-Programmierung einzuarbeiten, war mir bis jetzt zu groß, da ich ja lediglich einmal die physikalische Adresse meines Buffers benötige. Aber so wie es scheint, bleibt mir wohl nix anderes übrig. Ursprünglich dachte ich mal, dass da ein einfacher API-Call genügen würde, aber Windows ist da wirklich sehr restriktiv (wohl zurecht).

Falls doch noch jemand einen "einfacheren Weg" kennt, wäre ich jedenfalls sehr, sehr dankbar!

Gruß

ToniR
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#8

Re: virtuelle adressen in physikalische adressen umwandeln

  Alt 12. Jun 2005, 12:09
Hast PN von mir
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: virtuelle adressen in physikalische adressen umwandeln

  Alt 12. Jun 2005, 12:38
Moin!

Das auslesen der lokalen Deskriptortabelle sollte nicht privilegiert sein, daher könnte er es sich darüber selber ermitteln wo die physikalische Adresse liegt.

MfG
Muetze1
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#10

Re: virtuelle adressen in physikalische adressen umwandeln

  Alt 12. Jun 2005, 13:04
Kannst du das mal genauer spezifizieren. Ich sehe noch nicht, wo man mit der LDT weiterkommt. Habe mir eben nochmal ein Kapitel eines Assemblerbuches zu Gemüte geführt und sehe noch keinen Sinn in der Aussage.


Mit Gruß und Bitte um Aufklärung,
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz