Laden...

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

Erstellt von peterchen72 vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.397 Views
P
peterchen72 Themenstarter:in
66 Beiträge seit 2006
vor 16 Jahren
[erledigt] Zugriff auf Dual Port RAM mit IN() und OUT()

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.

5.742 Beiträge seit 2007
vor 16 Jahren

Hallo,

möchtest du einen Treiber schreiben oder stellt der Treiber diese C Methoden zur Verfügung, die du jetzt in C# aufrufen willst?

P
peterchen72 Themenstarter:in
66 Beiträge seit 2006
vor 16 Jahren

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#.

5.742 Beiträge seit 2007
vor 16 Jahren

Hallo,

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

Die Grundfunktionen musst du also in C schreiben.

P
peterchen72 Themenstarter:in
66 Beiträge seit 2006
vor 16 Jahren

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 ??

H
704 Beiträge seit 2003
vor 16 Jahren

Kernelmodetreiber für Win32 sind nicht gerade einfach zu programmieren.
TVicPort liefert dafür aber eine saubere Alternative über einen virtuellen Device Driver ...

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.

[last.fm](http://www.last.fm/user/hauptmanAlpha/)
P
peterchen72 Themenstarter:in
66 Beiträge seit 2006
vor 16 Jahren

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?

S
8.746 Beiträge seit 2005
vor 16 Jahren

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.