Kithara »USB Toolkit«
Das »USB Toolkit« ist ein Werkzeug, mit dem Sie komfortabel USB-Treiber für Windows entwickeln oder fremde USB Hardware ansprechen, ohne sich in die aufwendige Kernel-Programmierung einarbeiten zu müssen.
Dafür arbeitet der Entwickler von der gewohnten Programmierumgebung aus, es werden die Programmiersprachen C/C++, Delphi und C# direkt unterstützt. Das »USB Toolkit« stellt einen generischen Treiber für USB-Geräte bereit. Durch Editieren einer Textdatei ist er einfach konfigurierbar und der Anwendungsprogrammierer kann bequem darauf zugreifen.
- Kommunikation mit USB Geräten über USB 1.1 und USB 2.0 von der Anwendungs- oder Kernel-Ebene
- Low-, Full-, High-Speed
- Control-, Bulk-, Interrupt-, Isochron-Transfer
- Unterstützt Geräte mit mehreren Interfaces und mehreren Konfigurationen
- Reaktion auf alle Plug&Play und Power-Management-Ereignisse
- Reaktion auf eintreffende Daten direkt auf der Kernel-Ebene möglich
- Sende- und Empfangsroutinen können direkt aus Echtzeitkontext heraus gerufen werden
- Bereitstellung eines Windows-Programmier-Interfaces für Gerätekommunikation (ReadFile, WriteFile, DeviceIoControl)
- Beliebige Gerätenamen, z.B. für virtuelle Schnittstellen
- Nutzung der Kernel-Ebene unterstützt C/C++ oder Delphi (Win32 native)
- Unterstützt die folgenden Betriebssysteme: Windows 7, Vista, Server 2003, XP, und 2000
- Beschreibung
- Eigenschaften
- Beispiele
- FAQ
- Hardware
Das Base Module ist die Grundlage der gesamten »RealTime Suite«.
Erzeugen Sie alle benötigten Ressourcen, die zum Beispiel für die Kommunikation zwischen Anwendung und Kernel-Ebene sorgen!
Das Base Module stellt Funktionen zur Verwaltung des Kernel-Treibers bereit. Die »RealTime Suite« kann dabei von mehreren Programmen gleichzeitig verwendet werden.
Das Base Module enthält Funktionen zur Erzeugung und Verwaltung folgender Ressourcen:
- Shared Memory
- Daten- und Message-Pipes für schnellen Datenaustausch
- Event-Objekte
- CallBack-Funktionen
- Threads
- Quick-Mutexe
Im Base Module befinden sich mehrere Funktionen, die dem Absetzen von Meldungen an den »Kernel Tracer« dienen. Das erleichtert die Fehlersuche und ist auch für Profiling-Aufgaben einsetzbar.
Beachten Sie auch das Kernel Module, das weitere allgemein gültige Funktionen bereitstellt und für den Zugang zur Kernel-Ebene unverzichtbar ist.
Das Base Module ist immer erforderlich.
- Allgemeine Funktionen
- Öffnen/Schließen des Kernels
- Versionskontrolle, Treiber-Konfiguration
- Threads
- Erzeugen von Threads
- Ermitteln/Setzen beliebiger Stufen der absoluten Thread-Priorität
- Shared Memory
- Shared Memory speziell für Datenaustausch
- geschützt vor Festplatten-Auslagerung (fest im Speicher)
- mehrere Bereiche mit jeweils bis zu über 60 MByte
- Pipes
- Lock-freie und schnelle Daten- und Message-Pipes
- ermöglicht komfortablen und synchronisierten Datenaustausch in beliebiger Richtung zwischen Kernel und Anwendung
- keine weitere Synchronisation benötigt (auch auf Multi-Core-CPUs)
- Signalisierung
- Event-Objekte: Setzen, Rücksetzen und Pulsen aktiviert Anwendungs-Thread
- Callback-Ausführung von Anwendercode auf Kernel- oder Anwendungsebene
- Versenden von Windows-Messages
- Quick-Mutexe
- Schnelle Synchronisation ("Mutex" = Mutual Exclusion)
- Multiprozessortauglich
- Device-Information
- Ermittlung der Geräteinformationen von PCI-, USB-, COM-, HID-Devices etc.
- Debug-Unterstützung
- Absetzen formatierter Text-Meldungen von der Kernel-Ebene aus
- Kompatibel zum »Kernel Tracer« für Profiling und Fehlersuche
Das Base Module stellt vielfältige Werkzeuge bereit, z.B. Shared Memory für den Datenaustausch zwischen Anwendung und Kernel:
err = KS_createSharedMem(
&pAppPtr, // Application-Adresse
&pSysPtr, // Systemadresse des Speichers
"MySharedMem", // Global gültiger Name
40 * MegaBytes, // Länge in Bytes
0); // Flags, hier 0
Zur Vereinfachung für regelmäßigen Datenaustausch ist eine Daten-Pipe ideal, die intern ebenfalls auf Shared Memory basiert:
err = KS_createPipe(
&hPipe, // Adresse des Pipe-Handles
"MyValuePipe", // Name der Pipe
2, // Datengröße (z.B. Messwerte)
1000000, // max. Anzahl Datenelemente
NULL, // reserviert
0); // Flags, hier 0
Nun kann z.B. der Kernel ermittelte Messwerte in der Pipe ablegen:
err = KS_putPipe(
hPipe, // Pipe-Handle
valueBuffer, // Zeiger auf Datenpuffer
valueCount, // Anzahl der Messwerte
NULL, // hier nicht benutzt
0); // Flags, hier 0
Die Anwendung kann nun die Messwerte aus der Pipe lesen:
err = KS_getPipe(
hPipe, // Pipe-Handle
buffer, // Zeiger auf Datenpuffer
bufferSize, // max. Größe des Puffers
&filledSize, // wieviel Werte gelesen?
0); // Flags, hier 0
Daten mit variabler Länge (z.B. Messages) lassen sich optimal mit einer Message-Pipe verarbeiten. Diese ist sehr ähnlich zu verwenden.
- Welche Voraussetzungen müssen allgemein erfüllt sein?
- Unterstützung von Single- oder Dual-Core-, Multi-Core-CPUs, Hyperthreading, SMP etc.
- Unterstützung von Standard-PIC oder APIC, ACPI
- optimal ist ein moderner Dual-/Quad-Core-PC (mit APIC + ACPI)
- Unterstützung von Windows 2000, Windows XP (Embedded), Windows Server 2003, Windows Vista (x86)
- Programmierung der Kernel-Ebene in C/C++ und Delphi (Win32)
- Welche Besonderheiten ergeben sich beim Umgang mit Shared Memory?
- wird nicht auf die Festplatte ausgelagert und ist daher immer verfügbar (auch innerhalb der RealTime-Umgebung)
- ist sowohl von der Anwendungsebene als auch vom Kernel aus ansprechbar
- ist nur einmalig vorhanden und kann daher auch dem Datenaustausch zwischen verschiedenen Anwendungen dienen (es ist jedoch in jedem Programm einmal KS_createSharedMem zu rufen)
- ist anfangs mit 0 initialisiert – durch einen Zähler lässt sich ermitteln, ob der Speicher bereits zuvor von anderen Programmen verwendet wurde
- Zugriffe auf den Speicher sind nicht automatisch synchronisiert (für synchronisierten Zugriff empfehlen wir Daten- und Message-Pipes)
- 32-Bit-CPU
- max. 8 logische Prozessoren (Chips * Kerne * Threads), darüber auf Anfrage
Echtzeitfähigkeit wird nur auf der Kernel-Ebene erzielt.
Bringen Sie Ihren Anwendercode auf die Kernel-Ebene und schaffen Sie sich dadurch den Zutritt zur Echtzeit-Welt unter Windows!
Benötigt werden hierzu C/C++-Compiler oder das Entwicklungstool Delphi (Win32), um nativen x86-Code erzeugen zu können. Beachten Sie jedoch, dass z.B. auch die .NET-Umgebung mit C# unterstützt wird, indem eine native C++- oder Delphi-DLL für den Kernel-Zugang sorgt. Entsprechende sofort compilierbare Projekte befinden sich in jeder Software-Lieferung.
Es gibt zwei verschiedene Wege, um Ihren Anwendercode auf die Kernel-Ebene zu bringen:
- Befehlsweise Relozierung einer Callback-Funktion und ihrer Subroutinen in den Kernel-Adressraum
- Laden einer DLL direkt auf die Kernel-Ebene
Während die erste Methode für kleinere Projekte durchaus Vorteile besitzt, bietet die zweite Variante wesentlich mehr Möglichkeiten und erlaubt z.B. auch die einfachere Erzeugung von Debug-Meldungen, die sich im »Kernel Tracer« für Fehlersuche und Optimierung auswerten lassen.
Außerdem realisieren Sie damit komplexe Steuerungsanwendungen, deren grafische Oberfläche z.B. mit Java oder C#.NET erstellt wird, während nur die zeitkritischen Code-Teile der DLL im Kernel-Modus laufen.
Das Kernel Module ist Voraussetzung, um Anwendercode auf der Kernel-Ebene ausführen zu können.
- Relokation von Callback-Funktionen und deren Subroutinen
- Direktes Laden einer DLL in den Kernel
- DLL zu erstellen mit C/C++ oder Delphi (Win32)
- Callback-Funktionen werden direkt in Interrupt Service Routine (ISR) oder im Echtzeit-Timer-Kontext ausgeführt
- Alle wichtigen Funktionen der »RealTime Suite« auch von der Kernel-Ebene aus aufrufbar, z.B.:
- I/O-Port-Zugriffe
- Zugriffe auf physischen Speicher
- Zeitmessung, genaue Kurzzeitverzögerung
- Senden und Empfangen bei Daten- und Message-Pipes
- Senden und Empfangen bei seriellen Schnittstellen
- Senden und Empfangen bei Ethernet-Controllern
- EtherCAT-Datenaustausch
- Setzen, Rücksetzen, Pulsen von Events
- Ereignisse von Kernel-Ebene: Events und Windows-Messages
- Schneller Datenaustausch zwischen Anwendung und Kernel über Shared Memory oder lock-freie Daten- und Message-Pipes
Angenommen, Ihre Callback-Funktion für den Echtzeit-Timer sieht so aus:
int __stdcall myTimerCallback(
void* pArgs, // Adresse der Referenzdaten
void* pContext); // Adresse der Kontextdaten
Es gibt nun zwei Wege, um den Anwendercode auf die Kernel-Ebene zu bekommen:
err = KS_createCallBack(
&hCallBack, // Adresse des Handles
myTimerCallback, // Adresse der Funktion
pSysAddrOfMyData, // Referenzparameter
KSF_KERNEL_EXEC, // auf der Kernel-Ebene!
0); // Anwendungspriorität, hier 0
Auf diese Weise wird die Funktion in den Kernel-Speicher geladen.
Alternativ lässt sich eine ganze DLL in den Kernel laden:
err = KS_loadKernel(
&hKernel, // Adresse des Handles
"mykernel.dll", // Dateiname der Kernel-DLL
"myInitFunction", // Name der Init-Routine
pArgs, // Referenzparameter
KSF_KERNEL_EXEC); // Flags, in Kernel laden
Einmal in den Kernel geladen, kann nun ganz ähnlich ein Kernel-Callback erzeugt werden:
err = KS_createKernelCallBack(
&hCallBack, // Adresse des Handles
hKernel, // Kernel-Handle
"myTimerCallback", // Name der Funktion
pSysAddrOfMyData, // Referenzparameter
KSF_KERNEL_EXEC, // auf der Kernel-Ebene!
0); // Anwendungspriorität, hier 0
Die Callback-Handles lassen sich nun als Timer oder Interrupt-Handler anmelden oder z.B. zur Echtzeit-Signalisierung bei eintreffenden Ethernet-Frames.
Hinweis: Vollständige Projekte, die eine Rahmenanwendung in einer der Sprachen C++, C# oder Delphi sowie eine in den Kernel geladene DLL in C++ oder Delphi enthalten, sind Bestandteil jeder Software-Lieferung.
- Wie kann der Kernel mit der Anwendung kommunizieren?
- Shared-Memory-Bereiche für nicht synchronisierten Datenaustausch
- Daten- und Message-Pipes basierend auf Shared Memory (Lock-frei, daher sind die lesende und die schreibende Seite gegeneinander synchronisiert)
- Kernel kann Event-Objekte setzen, um Anwendungs-Threads zu aktivieren
- Anwendungsebene kann die Ausführung von Funktionen im Kernel auslösen
- Windows-Messages
- Wie lässt sich Code für die Kernel-Ebene debuggen?
- Anwendercode lässt sich innerhalb der Entwicklungsumgebung debuggen:
- Callback-Funktion wird durch spezielles Flag auf der Anwendungsebene ausgeführt
- Kernel-DLL wird durch spezielles Flag auf die Anwendungsebene geladen
- Shared Memory, Events, Zugriffe auf I/O-Ports und physischen Speicher etc. sind in beiden Kontexten verwendbar
Keine speziellen Hardware-Anforderungen
Das Clock Module ermöglicht hochgenaue Zeitmessung.
Ermitteln Sie die genaue Systemzeit in verschiedenen Formaten oder realisieren Sie exakte Kurzzeitverzögerungen!
Für verschiedene Zwecke ist in hardwarenahen Anwendungen eine genaue Systemzeit zu ermitteln. Das Clock Module stellt dafür Funktionen bereit, mit denen die Systemzeit in verschiedenen Formaten geliefert wird. Dazu gehören relative (seit dem Systemstart) und absolute Zeitangaben sowie selbst definierbare Zeitformate für spezifische Anforderungen.
Die Zeitmessung basiert auf verschiedenen, auswählbaren, im jeweiligen System vorhandenen Zeitgebern (z.B. Time Stamp Counter (TSC), PC-Timer, PM-Timer, APIC-Timer, HPET-Timer). Interne Überläufe bei der Umrechnung sind durch 64- und 96-Bit-Berechungen praktisch auch nach Jahren kontinuierlicher Laufzeit ausgeschlossen.
Für hardwarenahe Programmierung werden oft exakte zeitliche Verzögerungen benötigt. Auch dies leistet das Clock Module.
Das Clock Module ist Voraussetzung für das RealTime Module und ist stets eine wertvolle Ergänzung für verschiedene Aufgaben.
- Zeitmessung
- Systemzeit basierend auf verschiedenen internen Zeitgebern
- Interne Berechnungen mit hochoptimierten 64- und 96-Bit-Algorithmen
- Relative Zeitformate seit dem Systemstart
- Absolute Zeitformate in üblichen Formaten:
- Zehntel-Mikrosekunden seit 1.1.1601 (Windows-Systemzeit)
- Mikrosekunden seit 1.1.1970 (Unix-Systemzeit)
- Millisekunden seit 1.1.1980 (DOS-Systemzeit)
- Absolute Zeitangaben nach lokaler Zeitzone oder UTC
- Alle Zeitgeber bei Systemstart gegeneinander kalibriert
- Nutzerspezifische Zeitformate einfach definierbar
- 2-Phasen-Zeitmessung (1. zunächst Erfassung, 2. spätere Umrechnung) für extrem zeitkritische Applikationen
- Kurzzeitverzögerung
- Hochgenaue Kurzzeitverzögerungen, in Zehntel-Mikrosekunden programmierbar
- Aufwändige Kalibrierung beim Systemstart ermöglicht Genauigkeit im Nanosekundenbereich (auf der Kernel-Ebene)
Das Clock Module stellt zwei verschiedene Mechanismen bereit – Zeitmessung und Kurzzeitverzögerung.
Die meist benutzte Funktion zur Zeitmessung liefert 100-ns-Einheiten seit dem Start des Systems:
UInt64 time;
err = KS_getClock(
&time, // Adresse der Variablen
KS_CLOCK_MACHINE_TIME); // 100-ns seit Systemstart
Diese können auch zur einfacheren Weiterverarbeitung in 64-Bit-Werte umgewandelt werden:
__int64 time64 = time.hi;
time64 <<= 32;
time64 += time.lo;
printf("%Ld Mikrosekunden seit dem Systemstart.\n", time64 / 10);
Statt der (Systemstart-) relativen Zeit ist auch der absolute Zeitpunkt seit dem 1.1.1601 ermittelbar:
err = KS_getClock(
&time, // Adresse der Variablen
KS_CLOCK_ABSOLUTE_TIME); // 100-ns seit 1.1.1601
Der erhaltene Wert lässt sich leicht mit Windows-Funktionen weiterverarbeiten.
Die Kurzzeitverzögerung realisiert hochgenaue Verzögerungen, programmierbar in 100-ns-Schritten und mit einer Abweichung von nur wenigen Nanosekunden (auf der Kernel-Ebene):
err = KS_microDelay(
38); // hier 3,8 Mikrosekunden
Dies ist oftmals sehr nützlich beim Zugriff auf Hardware, wenn zeitliche Bedingungen einzuhalten sind.
- Welche Voraussetzungen müssen allgemein erfüllt sein?
- Unterstützung von Single- oder Dual-Core-, Multi-Core-CPUs, Hyperthreading, SMP etc.
Keine speziellen Hardware-Anforderungen
Das Device Module stellt das Windows-Device-API bereit.
Ermöglichen Sie vorhandenen ("Legacy"-) Anwendungen den Zugriff über Windows-Schnittstelle für Geräte, einschließlich "virtuelle COM-Ports"!
Mit dem Device Module melden Sie Callback-Funktionen an, die auf der Kernel-Ebene gerufen werden, wenn eine Fremdanwendung eine bestimmte Geräteschnittstelle öffnet, schließt, Daten liest oder schreibt oder die Einstellungen der Schnittstelle verändert. Dahinter verbergen sich die Windows-Funktionen CreateFile, CloseHandle, ReadFile, WriteFile und DeviceIoControl. Diese 5 Funktionen bilden das sogenannte Device-API, das auch in anderen Betriebssystemen der Ansteuerung von Geräten dient.
Fangen Sie alle Aktionen auf der Kernel-Ebene ab und realisieren Sie Ihre eigene Treiber-Implementierung für USB- oder PCI-Baugruppen. Mit dem Device Module ist auch die Realisierung von "virtuellen COM-Ports" einfach zu gestalten. Dadurch erhält die Fremdanwendung eine serielle Schnittstelle, die von einer physikalischen nicht zu unterscheiden ist.
Für die Manipulation eines seriellen Datenstromes sowie weiter gehende Möglichkeiten an "virtuellen COM-Ports" beachten Sie bitte auch das Filter Module.
Erfordert das Kernel Module.
- Abfangen der Funktionsaufrufe CreateFile, CloseHandle, ReadFile, WriteFile und DeviceIoControl
- Reaktion auf der Kernel-Ebene erlaubt sofortige Reaktion
- Für Datenaustausch mit der Applikation empfehlen sich z.B. die komfortablen Daten- oder Message-Pipes
- Festlegung beliebiger Namen für die Geräteschnittstelle
- "Virtuelle COM-Ports" können einfach erzeugt werden
Für die Realisierung eines "virtuellen COM-Ports" erstellen Sie verschiedene Callback-Routinen für die Ereignisse CREATE, CLOSE, READ, WRITE und CONTROL. Zum Beispiel für CONTROL:
int __stdcall myControlCallback(
void* pArgs, // Adresse der Referenzdaten
void* pContext) // Adresse der Kontextdaten
{ ...
if (pContext->controlCode == SERIAL_SET_BAUD_RATE)
...
Für alle Routinen werden nun Callback-Objekte erzeugt:
err = KS_createCallBack(
&functions.hOnControl, // Adresse des Handles
myControlCallback, // Adresse der Funktion
pSysAddrOfMyData, // Referenzparameter
KSF_DIRECT_EXEC, // auf der Kernel-Ebene!
0); // Anwendungspriorität, hier 0
Anschließend kann das "virtuelle COM-Port" erzeugt werden:
err = KS_createDevice(
&pAppPtr->hDevice_, // Addresse des Handles
"COM77", // Device-Name
&functions, // Struktur mit Callback-Handles
KSF_SERIAL_PORT); // Flags, "virtueller COM-Port"
Damit steht anderen Anwendungen eine weitere serielle Schnittstelle unter dem Namen "COM77" zur Verfügung, die sich von "echten" Schnittstellen nicht unterscheidet. Sie können damit oftmals vorhandene Anwendungen weiter betreiben, ohne diese neu programmieren zu müssen.
- Welche Anwendungen sind mit dem Device Module realisierbar?
- Zum einen dient das Device Module der Bereitstellung einer Programmierschnittstelle für andere Anwendungsentwickler, z.B. für Ihren USB- oder PCI-Treiber. Sie können damit ein Interface anbieten, das sich mit den Funktionen des Win32-API einfach ansprechen lässt. Die Dokumentation des API lässt sich dadurch vereinfachen.
- Zum anderen ist es möglich, eine sogenannte "virtuelle COM-Schnittstelle" bereitzustellen, die von vorhandenen Anwendungsprogrammen aus geöffnet und behandelt werden kann, als ob es sich um ein reales COM-Port handeln würde.
Keine speziellen Hardware-Anforderungen
Das USB Module erlaubt die Entwicklung von USB-Gerätetreibern.
Erstellen Sie komfortabel USB-Treiber für Windows, ohne sich in die aufwändige Kernel-Programmierung einzuarbeiten!
Mit dem USB Module lassen sich nicht nur USB-Treiber für Windows komfortabel erstellen, sondern auch vorhandene USB-Geräte ansprechen, um eine spezielle Ansteuerung zu realisieren.
Das USB Module enthält einen generischen Treiber für USB-Geräte, der einfach durch einen Eintrag in der mitgelieferten INF-Datei des Treibers konfiguriert wird. Dadurch wird der Treiber aktiviert, sobald der Windows-Plug&Play-Manager den Anschluss des betreffenden USB-Gerätes erkennt.
Kombinieren Sie das USB Module mit dem Device Module, um anderen Anwendungen das USB-Gerät in Form eines "virtuellen COM-Ports" bereitzustellen.
Erfordert das Kernel Module.
- Kommunikation mit USB Geräten über USB 1.1 und USB 2.0 von der Anwendungs- oder Kernel-Ebene
- Unterstützung von Low-, Full-, High-Speed
- Control-, Bulk-, Interrupt-, Isochron-Transfer
- Unterstützt Geräte mit mehreren Interfaces und mehreren Konfigurationen
- Reaktion auf alle Plug&Play und Power-Management-Ereignisse
- Reaktion auf eintreffende Daten direkt auf der Kernel-Ebene möglich
- Sende- und Empfangsroutinen können direkt aus Echtzeitkontext heraus gerufen werden
- Auflisten aller USB-Devices im PC
Verwenden Sie folgende Funktion, um alle USB-Geräte aufzulisten:
err = KS_enumDevices(
"USB", // nach USB-Geräten suchen
i, // Zähler, mit 0 beginnend
deviceNameBuf, // Puffer für Gerätenamen
0); // Flags, hier 0
Mit dem erhaltenen Namen lässt sich der Config-Deskriptor ermitteln, um z.B. nach einem bestimmten HID-Gerätetyp zu suchen:
err = KS_execUsbCommand(
deviceNameBuf, // Gerätename
KS_USB_GET_CONFIG_DESCRIPTOR,
0, // Index des Deskriptors
pBuf, // Puffer
64000, // Puffergröße
KSF_ALTERNATIVE); // Flags
Ein bereits vorhandener Treiber kann ersetzt werden:
strcpy(infPath+GetSystemDirectory(infPath,256),"\\Kdemo.inf");
err = KS_updateDriver(
deviceNameBuf, // Gerätename
infPath, // INF-Datei
0); // Flags, hier 0
Das gefundene Gerät kann nun geöffnet werden. Wenn es bekannt ist, können Sie hier aber auch den Gerätenamen direkt angeben:
err = KS_openUsbDevice(
&hDevice, // Adresse des Handles
"USB\\VID_10CF&PID_5500",// Gerätename
0); // Flags, hier 0
Die eigentliche Kommunikation erfolgt über sogenannte Endpoints. Es gibt bis 15 Sende- und 15 Empfangs-Endpunkte zu einem Gerät:
err = KS_getUsbPort(
hDevice, // Device-Handle
&hPort, // Adresse des Handles
endpointAddress, // Nummer des Endpoints
KSF_INTERRUPT_TRANSFER); // Flags: Transferart
Die Kommunikation selbst erfolgt nun ähnlich der seriellen Kommunikation im Serial Module.
- Sind die USB-Funktionen auch auf der Kernel-Ebene nutzbar?
- Ja. Obwohl die USB-Ankopplung nicht echtzeitfähig ist, können Sie z.B. Sende- oder Empfangs-Aufträge auch aus einer Echtzeit-Timer-Funktion heraus auslösen.
- Wie kann zur Ausnutzung der verfügbaren Bandbreite ein möglichst kontinuierlicher Datenstrom gewährleistet werden?
- mehrere Jobs gleichzeitig möglich, um Bandbreite auszunutzen
- maximale Anzahl gleichzeitiger Jobs einstellbar
Keine speziellen Hardware-Anforderungen
Plattformen
Echtzeitfähigkeit wird nur auf der Kernel-Ebene erzielt. Dazu werden C/C++ oder Delphi (Win32) benötigt. Dennoch unterstützt die »RealTime Suite« verschiedene Plattformen, wie z.B. auch die .NET-Umgebung:
- C++Builder (Borland/CodeGear) mit VCL-Oberfläche
- Microsoft Visual C++ 6 mit MFC-Oberfläche
- Visual Studio 2005/2008 C++ mit MFC-Oberfläche
- Delphi (Object Pascal) Win32 mit VCL-Oberfläche
- Visual Studio 2005 C# mit WPF-Oberfläche
Die Lösung besteht darin, den zeitkritischen Code in eine DLL zu verlagern, die mit den Funktionen der »RealTime Suite« direkt auf die Kernel-Ebene geladen wird und dadurch in den Echtzeit-Kontext gelangt.
Sofort verwendbare Programmgerüste für die genannten Plattformen befinden sich in jeder Software-Lieferung.
Systemvoraussetzungen
Die Produkte der »RealTime Suite« unterstützen eine breite Palette von Hardware- und Software-Kombinationen:
- CPU: AMD (ab Athlon) oder Intel (ab Pentium 2)
- Single- oder Multi-Core, Hyperthreading, SMP mit insgesamt bis zu 8 CPU-Kernen (darüber auf Anfrage)
- ACPI (Advanced Control and Power Interface) unterstützt, (A)PIC (Advanced Programmable Interrupt Controller) unterstützt (einige Funktionen erfordern APIC-PC)
- Betriebssystem: Windows 2000 (bis SP4), Windows XP (bis SP3), Windows Server 2003 (bis SP1), Windows Vista (SP1), Betrieb bei neueren Service Packs ohne Gewähr
- Compiler für Kernel-Ebene: Microsoft: Visual C++/Visual Studio, CodeGear (Borland): C++Builder, Delphi Win32
Bei Fragen zur Systemunterstützung kontaktieren Sie uns bitte!