Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] Zugriff auf Dual Port RAM mit IN() und OUT()
peterchen72
myCSharp.de - Member



Dabei seit:
Beiträge: 66

Themenstarter:

[erledigt] Zugriff auf Dual Port RAM mit IN() und OUT()

beantworten | zitieren | melden

Ich möchte auf eine PCI-Karte zugreifen mit Read/Write bzw. In_8()/In() und Out_8()/Out(). Bisher habe ich unter C mit In_8( base_address) und Out_8 (base_address, value) gearbeitet.

Kann mir jemand einen kleinen Tipp geben, ich das mit C# mache?

Danke im Voraus.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von peterchen72 am .
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 5.742
Herkunft: Stuttgart

beantworten | zitieren | melden

Hallo,

möchtest du einen Treiber schreiben oder stellt der Treiber diese C Methoden zur Verfügung, die du jetzt in C# aufrufen willst?
private Nachricht | Beiträge des Benutzers
peterchen72
myCSharp.de - Member



Dabei seit:
Beiträge: 66

Themenstarter:

beantworten | zitieren | melden

Ich möchte selber einen Treiber für die Karte schreiben. Dazu benötige ich Funktionen, mit denen ich auf das Dual Port RAM zugreifen kann. Bei C sind in() und out() standardmäßig mit dabei (zumindest bei mir).

Ich suche also ähnliche Befehle wie in/out von C nun für C#.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von peterchen72 am .
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 5.742
Herkunft: Stuttgart

beantworten | zitieren | melden

Hallo,

"Treiber" in diesem Sinne kannst du nicht unter C# entwickeln - siehe dazu auch Treiber-Entwicklung

Die Grundfunktionen musst du also in C schreiben.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von winSharp93 am .
private Nachricht | Beiträge des Benutzers
peterchen72
myCSharp.de - Member



Dabei seit:
Beiträge: 66

Themenstarter:

beantworten | zitieren | melden

Verstehe ich das richtig: Ich schreibe mit C eine DLL mit den Funktionen in/out und binde diese DLL dann in mein C#-Projekt ein und dann funktionierts ??
private Nachricht | Beiträge des Benutzers
tscherno
myCSharp.de - Member

Avatar #avatar-2584.gif


Dabei seit:
Beiträge: 630
Herkunft: Nürnberger Land

beantworten | zitieren | melden

Ja genau, allerdings nicht so einfach wie beim einbinden von .NET DLLs:

http://www.microsoft.com/germany/msdn/library/net/SoArbeitetNETMitWin32UndCOMZusammen.mspx?mfr=true
http://www.pinvoke.net/
http://msdn.microsoft.com/msdnmag/issues/01/08/interop/
http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.marshal(VS.71).aspx
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von tscherno am .
To understand recursion you must first understand recursion
-
http://www.ilja-neumann.com
C# Gruppe bei last.fm
private Nachricht | Beiträge des Benutzers
hauptmann
myCSharp.de - Member



Dabei seit:
Beiträge: 704
Herkunft: Österreich/Kärnten

beantworten | zitieren | melden

Kernelmodetreiber für Win32 sind nicht gerade einfach zu programmieren.
TVicPort liefert dafür aber eine saubere Alternative über einen virtuellen Device Driver ...
Zitat
Verstehe ich das richtig: Ich schreibe mit C eine DLL mit den Funktionen in/out und binde diese DLL dann in mein C#-Projekt ein und dann funktionierts ??

Sofern diese Funktionen unter Win32 ohne Probleme gearbeitet haben, sollten sie auch in C# keine Probleme machen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von hauptmann am .
private Nachricht | Beiträge des Benutzers
peterchen72
myCSharp.de - Member



Dabei seit:
Beiträge: 66

Themenstarter:

beantworten | zitieren | melden

Danke für eure Hilfe.

Ich habe quasi eine Dummy-DLL erstellt, die die Funktionen auf das Dual-Port-RAM ausführt. Habe mir das schwieriger vorgestellt, aber globale Variablen in der DLL bleiben erhalten und damit auch mein Zeiger auf das Dual-Port RAM. Mit einer Funktion GetInputData() brauche ich dann nur noch über den globalen Zeiger der Dummy-DLL auf die Daten zugreifen. Ich habe das mit DLLIMPORT gemacht und das funktioniert problemlos.

Nur noch eine kurze Frage: Darf man in einer DLL globale Variablen verwenden, oder ist das schlechtes Design?
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8.746
Herkunft: Berlin

beantworten | zitieren | melden

Kannst du machen, aber damit verliert die DLL Multi-Threading-Fähigkeit, es sei denn, du synchronisierst den Zugriff auf die Variable. Gleiches gilt auch für statische Variablen innerhalb einer Funktion.
private Nachricht | Beiträge des Benutzers