DE69838540T2 - Mobilkommunikationssystem - Google Patents

Mobilkommunikationssystem Download PDF

Info

Publication number
DE69838540T2
DE69838540T2 DE69838540T DE69838540T DE69838540T2 DE 69838540 T2 DE69838540 T2 DE 69838540T2 DE 69838540 T DE69838540 T DE 69838540T DE 69838540 T DE69838540 T DE 69838540T DE 69838540 T2 DE69838540 T2 DE 69838540T2
Authority
DE
Germany
Prior art keywords
dsp
code
task
errcode
devid
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69838540T
Other languages
English (en)
Other versions
DE69838540D1 (de
Inventor
Matthew A. Plano Woolsey
Marion C. Dallas Lineberry
Jihong Kim (nmi), Buk-gu
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Texas Instruments Inc
Original Assignee
Texas Instruments Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Texas Instruments Inc filed Critical Texas Instruments Inc
Application granted granted Critical
Publication of DE69838540D1 publication Critical patent/DE69838540D1/de
Publication of DE69838540T2 publication Critical patent/DE69838540T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45529Embedded in an application, e.g. JavaScript in a Web browser

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Diese Anmeldung bezieht sich auf lfd. US-Nr. 08/995.606 mit dem Titel "Mobile Information Services Platform" (Aktenzeichen des Anwalts Nr. 26421) an McMahon u. a., lfd. US-Nr. 08/995.597 mit dem Titel "Method and Apparatus for Providing Downloadable Functionality to an Embedded Coprocessor" (Aktenzeichen des Anwalts Nr. 26440) an Brewer und lfd. US-Nr. 08/995.603 mit dem Titel "Method and Apparatus for Extending Security Model to Native Code" (Aktenzeichen des Anwalts Nr. 26439) an Brewer, von denen Kopien mit dieser Anmeldung und zum Datum der Einreichung dieser Anmeldung beigebracht worden sind, damit sie in der Akte des europäischen Patentamts für diese Anmeldung untergebracht werden, wobei sie für die öffentliche Einsichtnahme zu und ab dem Datum der Veröffentlichung dieser Anmeldung verfügbar gemacht werden.
  • HINTERGRUND DER ERFINDUNG
  • 1. TECHNISCHES GEBIET
  • Diese Erfindung bezieht sich im Allgemeinen auf mobile elektronische Vorrichtungen und insbesondere, aber nicht ausschließlich auf eine Hardware- und Software-Plattform für mobile elektronische Vorrichtungen.
  • 2. BESCHREIBUNG DES STANDES DER TECHNIK
  • Tragbare Hand-Vorrichtungen gewinnen mit zunehmender Leistung und folglich der Funktionalität der Vorrichtungen an Popularität, Persönliche digitale Assistenten (PDAs) befinden sich gegenwärtig in weitverbreiteter Verwendung, wobei erwartet wird, dass Smartphones, die einige der Fähigkeiten eines Zellulartelephons und eines PDA kombinieren, einen signifikanten Einfluss auf die Kommunikation in der nahen Zukunft haben werden.
  • Einige Vorrichtungen enthalten gegenwärtig einen oder mehrere DSPs (digitale Signalprozessoren) oder andere Coprozessoren, um bestimmte diskrete Merkmale, wie z. B. Spracherkennung, bereitzustellen, und einen Mehrzweckprozessor für die anderen Datenverarbeitungsfunktionen. Der Code für den DSP und der Code für den Mehrzweckprozessor ist im Allgemeinen in ROMs oder anderen nichtflüchtigen Speichern gespeichert, die nicht leicht modifiziert werden. Wie Verbesserungen und neue Merkmale verfügbar werden, ist es folglich oft nicht möglich, die Fähigkeiten der Vorrichtung hochzurüsten. Insbesondere ist es nicht möglich, den Nutzen der DSPs oder des anderen Coprozessors zu maximieren, die in der Vorrichtung vorhanden sein können.
  • Deshalb gibt es einen Bedarf an einer Datenverarbeitungsarchitektur, die hochgerüstet werden kann und die die Verwendung mehrerer Prozessoren und Coprozessoren optimiert.
  • EP 0455 345 beschreibt einen programmierbaren Controller, der einen Hauptprozessor enthält, der mit E/A- und Peripherievorrichtungen für ihre sequentielle Steuerung in einer programmierten Weise verbunden ist. Dem Hauptprozessor ist ein Systemspeicher zugeordnet, der sowohl ein Betriebssystem für den Hauptprozessor speichert als auch einen bei seinem Betrieb verwendeten Arbeitsbereich bereitstellt. Ein Quellbefehlsspeicher ist vorgesehen, um ein Quellprogramm für die Steuerung der E/A- und Peripherievorrichtungen zu speichern. Das Quellprogramm wird durch den Hauptprozessor in ein Programm kompiliert, das die entsprechenden verringerten Befehle enthält, und in einem Befehlsspeicher des Coprozessors gespeichert. Es ist ein Coprozessor enthalten, um die Befehle vom Befehlsspeicher des Coprozessors wiederzugewinnen, um die Befehle in einer Pipeline-Betriebsart und parallel mit der Ausführung des Hauptprozessors auszuführen. Es ist ein Datenspeicher für die Befehlsausführung des Coprozessors vorgesehen. Der Hauptprozessor und die Coprozessoren sind mittels eines Peripherie-Controllers betriebsfähig verbunden, der Adressen- und Datenbusse besitzt, die entsprechend dem Hauptprozessor und dem Coprozessor zugeordnet sind. Der Peripherie-Controller ist so konfiguriert, dass er die Daten direkt zwischen dem Systemspeicher und dem Datenspeicher durch einen Speicherdirektzugriff [DMA] vor dem Beginn der Parallelverarbeitung überträgt und dass er bei Abschluss der DMA-Datenübertragung die Busse mit dem Hauptprozessor von jenen mit dem Coprozessor trennt, um die Parallelverarbeitung im Hauptprozessor und im Coprozessor zu ermöglichen.
  • Das Dokument "Practical Multiprocessor and Realtime Programming in the Fifth Programming Environment" von F. Mayer-Lindenberg, veröffentlicht in Microprocessing and Microprogramming, Bd. 24 (1988) Aug., Nrn. 1–5, Amsterdam, NL, beschreibt eine Studie bezüglich moderner eingebetteter Mikroprozessor-Systeme, die oft mehrerer Prozessoren mit verschiedenen Hardware-Typen enthalten. In dem Dokument wird ein PC-gestütztes interaktives Programmierwerkzeug erörtert, das die Echtzeit-Programmierung für derartige Multiprozessorsysteme unterstützt. Der fünfte Kompilierer enthält mehrere Code-Generatoren, unter denen die Auswahl innerhalb eines einzigen Programms ausgeführt werden kann. Die verschiedenen Prozessoren innerhalb des Zielsystems können mittels wechselseitiger Funktionsaufrufe kommunizieren. Die interaktive Kreuzkompilierung erfolgt mittels wechselseitiger Funktionsaufrufe. Die innerhalb des fünften Systems verwendete interaktive Kreuzkompilierung beseitigt den Bedarf an Hardware-Emulatoren und macht es selbst für Einzelprozessorziele zu einer funktionalen Alternative zum universellen Entwicklungssystem. Als ein Beispiel wird die Anwendung der Fünften auf die Programmierung eines kleinen Transputer-Netzes, das mit einem Paar von Standard-Mikroprozessoren verbunden ist, betrachtet.
  • KURZZUSAMMENFASSUNG DER ERFINDUNG
  • Die Aspekte der Erfindung sind in den beigefügten Ansprüchen definiert.
  • In den Ausführungsformen gemäß der vorliegenden Erfindung umfasst eine mobile elektronische Vorrichtung einen oder mehrere Coprozessoren und ein Host-Prozessorsystem. Das Host-Prozessorsystem führt einen Kreuzkompilierer, um einen Quellcode zu empfangen und den Quellcode in eine Maschinencode-Routine für einen aus dem einen oder den mehreren Coprozessoren ausgewählten Ziel-Coprozessor zu kompilieren, und einen Kreuzlinker, um Adressen in der Maschinencode-Routine aufzulösen und die Maschinencode-Routine zu dem Ziel-Coprozessor herunterzuladen, aus. Es ist eine Schaltungsanordnung für die Kommunikation zwischen dem Host-Prozessorsystem und den Coprozessoren vorgesehen.
  • Die Ausführungsformen der vorliegenden Erfindung schaffen signifikante Vorteile gegenüber dem Stand der Technik. Portabler Code kann kompiliert und in einem Zielprozessor ausgeführt werden, wobei dadurch die Geschwindigkeit vergrößert wird, mit der der Code ausgeführt wird. Die Entscheidungen, den Code in einem Coprozessor oder in einem von mehreren Coprozessoren auszuführen, kann dynamisch getroffen werden. Im Gegensatz zur statischen Funktio nalität gegenwärtiger DSPs, die in mobilen Vorrichtungen verwendet werden, ist die Funktionalität des (der) DSP(s), der (die) in der vorliegenden Erfindung verwendet wird (werden), dynamisch, weil die durch den DSP ausgeführten Tasks durch den Host-Prozessor während des Betriebs einer Vorrichtung, die die Plattform enthält, geändert werden können.
  • KURZBESCHREIBUNG DER MEHREREN ANSICHTEN DER ZEICHNUNG
  • Eine ausführlichere Beschreibung der Ausführungsformen der Erfindung folgt nun lediglich beispielhaft und unter Bezugnahme auf die beigefügte Zeichnung, worin:
  • 1 einen Blockschaltplan einer Plattform-Architektur veranschaulicht, die für die allgemeine drahtlose Datenverarbeitung besonders geeignet ist;
  • 2 einen funktionalen Blockschaltplan der Plattform nach 1 veranschaulicht;
  • 3 einen funktionalen Blockschaltplan der Funktionen der dynamischen Kreuzkompilierung und des dynamischen Kreuzlinkens veranschaulicht;
  • 4 eine Ausführungsform des Maschinencodes für die Ausführung in einem Prozessor veranschaulicht, der in einer JAVA-Bohnen-Hülle zum Herunterladen zu einer Vorrichtung eingekapselt ist;
  • 5 die Operation des Übertragens des eingekapselten Maschinencodes von einer JAVA-Bohne, die sich in einem entfernten Server befindet, zu einem Prozessor in einer Vorrichtung veranschaulicht; und
  • 6 ein Ablaufplan veranschaulicht, der die der Operation nach 5 zugeordneten Sicherheitsmerkmale beschreibt.
  • AUSFÜHRLICHERE BESCHREIBUNG DER ERFINDUNG
  • Die Ausführungsformen der vorliegenden Erfindung können in Bezug auf die 16 der Zeichnung verstanden werden, wobei gleiche Bezugszeichen für gleiche Elemente in den verschiedenen Zeichnungen verwendet werden.
  • 1 veranschaulicht eine bevorzugte Ausführungsform einer allgemeinen drahtlosen Datenplattform-Architektur, die z. B. bei der Implementierung eines Smartphones oder eines PDA verwendet werden könnte. Die drahtlose Datenplattform 10 enthält einen Mehrzweckprozessor (Host-Prozessor) 12, der an die Busstruktur 14 gekoppelt ist, die den Datenbus 14a, den Adressenbus 14b und den Steuerbus 14c enthält. Ein oder mehrere DSPs (oder andere Coprozessoren) 16, die den Kernprozessor 16a und die Peripherieschnittstelle 16b enthalten, sind an den Bus 14 und an den Speicher- und Verkehrs-Controller 18 gekoppelt, der einen DSP-Cache-Speicher 18a, einen CPU-Cache 18b und eine MMU (Speichermanagementeinheit) 18c enthält. Eine Hardware-Beschleunigerschaltung 20 (um eine portable Sprache, wie z. B. JAVA, zu beschleunigen) und ein Video- und LCD-Controller 22 sind außerdem an den Speicher- und Verkehrs-Controller 18 gekoppelt. Der Ausgang des Video- und LCD-Controllers ist an eine LCD- oder Videoanzeige 24 gekoppelt.
  • Der Speicher- u. Verkehrs-Controller 18 ist an den Bus 14 und den Hauptspeicher 26, der als ein SDRAM (synchroner dynamischer Schreib-Lese-Speicher) gezeigt ist, gekoppelt. Der Bus 14 ist außerdem mit dem E/A-Controller 28, der Schnittstelle 30 und dem RAM/ROM 32 verbunden. Mehrere Vorrichtungen könnten an die drahtlose Datenplattform 10 gekoppelt sein, wie z. B. eine Chip-Karte 34, eine Tastatur 36, eine Maus 38 oder ein oder mehrere serielle Anschlüsse 40, wie z. B. ein USB-Anschluss (Anschluss eines universellen seriellen Busses) oder ein serieller RS232-Anschluss. Die Schnittstelle 30 kann an eine Flash-Speicher-Karte 42 und/oder eine DRAM-Karte 44 gekoppelt sein. Die Peripherieschnittstelle 16b kann den DSP 16 an einen DAC (Digital-Analog-Umsetzer) 46, eine Netzschnittstelle 48 oder andere Vorrichtungen koppeln.
  • Die drahtlose Datenplattform 10 nach 1 verwendet sowohl einen Mehrzweckprozessor 12 als auch einen DSP 16. Ungleich aktueller Vorrichtungen, in denen der DSP 16 für spezifische feste Funktionen zweckgebunden ist, kann der DSP 16 nach 1 für irgendeine Anzahl von Funktionen verwendet werden. Dies erlaubt dem Anwender, den vollen Nutzen des DSP 16 zu erlangen.
  • Ein Hauptbereich, in dem der DSP 16 verwendet werden kann, steht im Zusammenhang mit der Mensch-Maschine-Schnittstelle (MMI). Wichtige Funktionen, wie die Spracherkennung, die Bild- und Video-Komprimierung und -Dekomprimierung, die Datenverschlüsselung, die Text-Sprache-Umsetzung usw. können unter Verwendung des DSP 16 viel effizienter ausgeführt werden.
  • Die vorliegende Architektur erlaubt, das neue Funktionen und Verbesserungen leicht zur drahtlosen Datenplattform 10 hinzugefügt werden.
  • Es sollte angegeben werden, dass die drahtlose Datenplattform 10 ein allgemeiner Blockschaltplan ist und dass viele Modifikationen ausgeführt werden könnten. 1 veranschaulicht z. B. separate DSP- und Prozessor-Caches 18a und 18b. Wie einem Fachmann auf dem Gebiet bekannt sein würde, könnte außerdem ein vereinigter Cache verwendet werden. Außerdem ist die Hardware-Beschleunigungsschaltung 20 ein optionales Element. Derartige Vorrichtungen beschleunigen die Ausführung von Sprachen, wie z. B. JAVA; die Schaltung ist jedoch für den Betrieb der Vorrichtung nicht notwendig. Obwohl die veranschaulichte Ausführungsform einen einzigen DSP zeigt, könnten ferner mehrere DSPs (oder andere Coprozessoren) an die Busse gekoppelt sein.
  • 2 veranschaulicht eine funktionale Software-Architektur für die drahtlose Datenplattform 10. Dieser Blockschaltplan setzt die Verwendung von JAVA voraus; es sollte angegeben werden, dass andere Sprachen als JAVA ebenso verwendet werden könnten. Funktional ist die Software in zwei Gruppen unterteilt, die Host-Prozessor-Software und die DSP-Software. Die Host-Software enthält ein oder mehrere Applets 40. Die DSP-API-Klasse 42 ist ein JAVA-API-Paket für Java-Anwendungen oder -Applets, um auf die Funktionalität der DSP-API 50 und der Host-DSP-Schnittstellenschicht 52 zuzugreifen. Eine virtuelle JAVA-Maschine (VM) 44 interpretiert die Applets. Die Java-Maschinenschnittstelle 46 ist das Verfahren, mit dem die JAVA-VM den für den Host-Prozessor oder die Plattform spezifischen Code ausführt. Die Maschinen-Tasks 48 sind nicht in JAVA geschriebene Programme, die durch den Host-Prozessor 12 ausgeführt werden können, ohne die JAVA-Maschinenschnittstelle zu verwenden. Die DSP-API 50, die im Folgenden ausführlicher beschrieben ist, ist eine API (Anwendungsprogrammschnittstelle), die im Host 12 für den Aufruf verwendet wird, um von den Fähigkeiten des DSP 16 Gebrauch zu machen. Die Host-DSP-Schnittstellenschicht 52 schafft eine API für den Host 12 und den DSP 16, damit sie miteinander, mit anderen Tasks oder anderer Hardware unter Verwendung von Kanälen über das Host-DSP-Kommunikationsprotokoll kommunizieren. Der DSP-Vorrichtungstreiber 54 ist der host-gestützte Vorrichtungstreiber für das Host-RTOS 56 (Host-Echtzeit-Betriebssystem), um mit dem DSP 16 zu kommunizieren. Das Host-RTOS 56 ist ein Betriebssystem, wie z. B. NUCLEUS PLUS von Accelera ted Technology Incorporated. Alternative Nichtechtzeit-Betriebssysteme, wie z. B. Windows CE von der Microsoft Corporation, könnten verwendet werden. Die DSP-Bibliothek 58 enthält Programme, die für die Ausführung im DSP 16 gespeichert sind.
  • Auf der DSP-Seite können ein oder mehrere Tasks 60 im Speicher für die Ausführung durch den DSP 16 gespeichert sein. Wie im Folgenden beschrieben ist, können die Tasks auf Wunsch in den und aus dem Speicher bewegt werden, so dass die Funktionalität des DSP anstatt statisch dynamisch ist. Die Host-DSP-Schnittstellenschicht 62 auf der DSP-Seite führt die gleiche Funktion wie die Host-DSP-Schnittstellenschicht 52 auf der Host-Seite aus, sie erlaubt nämlich dem Host 12 und dem DSP 16, zu kommunizieren. Das DSP-RTOS 64 ist das Betriebssystem für den DSP-Prozessor. Der Host-Vorrichtungstreiber 66 ist ein DSP-gestützter Vorrichtungstreiber für das DSP-RTOS 64, um mit dem Host 12 zu kommunizieren. Die Host-DSP-Schnittstelle 70 gekoppelt den DSP 16 und den Host 12.
  • In Betrieb verwendet die in 2 gezeigte Software-Architektur den DSP 16 anstatt als eine Vorrichtung mit festen Funktionen wie im Stand der Technik als eine Vorrichtung mit variablen Funktionen. Demzufolge können die DSP-Funktionen zur mobilen Vorrichtung, die die Architektur nach 2 enthält, heruntergeladen werden, um den DSP 16 zu erlauben, verschiedene Signalverarbeitungsfunktionen für den Host 12 auszuführen.
  • Die DSP-API
  • Die DSP-API schafft eine vorrichtungsunabhängige Schnittstelle vom Host 12 zum DSP 16. Die Funktionen versehen den Host 12 mit der Fähigkeit, Tasks im DSP 16 zu laden und zu planen und diese Tasks zu steuern und mit diesen Tasks zu kommunizieren. Die API-Funktionen enthalten Aufrufe, um: die verfügbaren Betriebsmittel des DSP zu bestimmen, Tasks des Host 12 und des DSP zu erzeugen und zu steuern, Datenkanäle zwischen den Tasks des Host 12 und des DSP zu erzeugen und zu steuern und mit den Tasks zu kommunizieren. Diese Funktionen sind im Folgenden beschrieben. Jede Funktion schickt ein BOOLEsches Ergebnis zurück, das SUCCESS für eine erfolgreiche Operation oder FAI-LURE ist. Falls das Ergebnis FAILURE lautet, sollte der errcode überprüft werden, um zu bestimmen, welcher Fehler aufgetreten ist.
  • DSP_Get_MIPS
    • BOOL DSP_Get_MIPS(T_DeviceID DevID, U32 *mips, U16 *errcode);
  • Diese Funktion schickt die aktuellen MIPS zurück, die im DSP verfügbar sind. Dies besteht aus der MIPS-Fähigkeit des DSP 16 minus einen Basis-MIPS-Wert (der MIPS-Wert ohne zusätzliche dynamische Tasks, d. h. der Kernel plus der API-Code plus die Treiber) minus der Summe der MIPS-Nennwerte für alle geladenen dynamische Tasks. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
  • DSP_Get_Memory_Available
    • BOOL DSP_Get_Memory_Available(T_DeviceID DevID, T_Size *progmem, T_Size *datamem, U16 *errcode);
  • Diese Funktion fragt den durch den DevID spezifizierten DSP 16 nach den Mengen des verfügbaren Speichers sowohl für den Programmspeicher als auch den Datenspeicher ab. Die resultierenden Werte werden in den progmem- und datamem-Parametern zurückgeschickt. Die Größen sind in T_DSP_Words spezifiziert. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
  • DSP_Alloc_Mem
    • BOOL DSP_Alloc_Mem(T_DeviceID DevID, U16 mempage, T_Size size, T_DSP Word **memptr, U16 *errcode);
  • Diese Funktion ordnet einen Block des Speichers in einem DSP 16 zu. Der DevID spezifiziert die Vorrichtung, in der der Speicher zuzuordnen ist. Der mempage ist 0 für Programmraum und 1 für Datenraum. Der size-Parameter spezifi ziert die Speicherblockgröße in T_DSP_Words. Der zurückgeschickte memptr ist ein Zeiger auf den Speicherblock im DSP 16 oder NULL bei einem Ausfall.
  • Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_INVALID_MEMPAGE
    DSP_NOT_ENOUGH_MEMORY
  • DSP_Free_Mem
    • BOOL DSP_Free_Mem(T_DeviceID DevID, U16 mempage, T_DSP_Word *memptr, U16 *errcode);
  • Diese Funktion gibt einen Block des Speichers in einem DSP frei, der mit der DSP_Alloc_Mem-Funktionen zugeordnet worden ist. Der DevID spezifiziert, in welcher Vorrichtung der Speicher liegt. Der mempage ist 0 für Programmraum und 1 für Datenraum. Der memptr-Parameter ist der Zeiger auf den Speicherblock. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_INVALID_MEMPAGE
    DSP_MEMBLOCK_NOT_FOUND
  • DSP_Get_Code_Info
    • BOOL DSP_Get_Code_Info(char *Name, T_CodeHdr *codehdr, U16 *errcode);
  • Diese Funktion greift auf die DSP-Bibliothekstabelle zu und schickt den Codekopf für den durch den Name-Parameter spezifizierten DSP-Funktionscode zurück. Beim Rücksprung enthält der Ort, auf den durch den codehdr-Parameter gezeigt wird, die Codekopfinformationen. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_NAMED_FUNC_NOT_FOUND
  • DSP_Link_Code
    • BOOL DSP_Link_Code(T_DeviceID DevID, T_CodeHdr *codehdr, T_TaskCreate *tcs, U16 *errcode);
  • Diese Funktion linkt den DSP-Funktionscode, so dass er bei einer spezifizierten Adresse im durch den DevID spezifizierten DSP abläuft. Der codehdr-Parameter zeigt auf den Codekopf für die Funktion. Der dynamische Kreuzlinker linkt den Code anhand der Informationen im Codekopf und im Code (in der COFF-Datei). Der dynamische Kreuzlinker ordnet den Speicher zu, wie er notwendig ist, wobei er den Code linkt und in den DSP 16 lädt. Der tcs-Parameter ist ein Zeiger auf die Task-Erzeugungsstruktur, die in der DSP_Create_Task-Funktion notwendig ist. Der DSP_Link_Code füllt die Codeeinsprungpunkt-, priority- und quantum-Felder der vorbereiteten Struktur zum Erzeugen eines Tasks aus. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_NOT_ENOUGH_PROG_MEMORY
    DSP_NOT_ENOUGH_DATA_MEMORY
    DSP_COULD_NOT_LOAD_CODE
  • DSP_Put_BLOB
    • BOOL DSP_Put_BLOB(T_DeviceID DevID, T_HostPtr srcaddr, T_DSP_Ptr destaddr, U16 mempage, T_Size size, U16 *errcode);
  • Diese Funktion kopiert ein spezifiziertes binäres großes Objekt (BLOB) in den DSP 16. Der DevID spezifiziert, in welchen DSP 16 das Objekt zu kopieren ist. Der scraddr-Parameter ist ein Zeiger auf das Objekt im Host-Speicher. Der destaddr ist ein Zeiger auf den Ort, an den das Objekt im DSP 16 zu kopieren ist. Der mempage ist 0 für Programmraum und 1 für Datenraum. Der size-Parameter spezifiziert die Größe des Objekts in T_DSP_Words. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_INVALID_MEMPAGE
  • DSP_Create_Task
    • BOOL DSP_Create_Task(T_DeviceID DevID, T_TaskCreate *tcs, T_TaskID *TaskID, U16 *errcode);
  • DSP_Create_Task fordert den DSP 16 auf, einen Task unter Voraussetzung der Task-Parameter und der Codeorte im Programmraum des DSP zu erzeugen.
  • Die Task-Erzeugungsstruktur ist in der Tabelle 1 gezeigt: Tabelle 1. Die Task-Erzeugungsstruktur.
    Datentyp Feldname Beschreibung
    T_DSP_Name Name Der benutzerdefinierte Name für den Task.
    U32 MIPS Die durch den Task benutzten MIPS.
    T_ChanID ChanIn Die für die Task-Eingabe verwendete Kanal-ID.
    T_ChanID ChanOut Die für die Task-Ausgabe verwendete Kanal-ID.
    T_StrmID StrmIn Die für die Task-Eingabe verwendete Strom-ID.
    T_StrmID StrmOut Die für die Task-Ausgabe verwendete Strom-ID.
    U16 Priority Die Priorität des Tasks.
    U32 Quantum Die Zeitscheibe des Tasks in System-Ticks.
    T_Size StackReq Die Menge des erforderlichen Stapels.
    T_DSP_Ptr MsgHandler Der Zeiger auf den Code, um die Nachrichten für den Task abzuwickeln.
    T_HOST_Ptr CallBack Der Zeiger auf den Host-Code, um die Nachrichten von dem Task abzuwickeln.
    T_DSP_Ptr Create Der Zeiger auf den auszuführenden Code, wenn der Task erzeugt wird.
    T_DSP_Ptr Start Der Zeiger auf den auszuführenden Code, wenn der Task gestartet wird.
    T_DSP_Ptr Suspend Der Zeiger auf den auszuführenden Code, wenn der Task angehalten wird.
    T_DSP_Ptr Resume Der Zeiger auf den auszuführenden Code, wenn der Task wiederaufgenommen wird.
    T_DSP_Ptr Stop Der Zeiger auf den auszuführenden Code, wenn der Task gestoppt wird.
  • Sobald der Task erzeugt ist, wird der Erzeuge-den-Einsprungpunkt aufgerufen, der dem Task die Gelegenheit gibt, irgendwelche notwendige vorbereitende Initialisierung auszuführen. Die Create-, Suspend-, Resume- und Stop-Einsprungpunkte können NULL sein. Der resultierende TaskID enthält sowohl die Vorrichtungs-ID (DevID) als auch die Task-ID des DSP. Falls der TaskID NULL ist, ist das Erzeugen misslungen. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_INVALID_PRIORITY
    DSP_CHANNEL_NOT_FOUND
    DSP_ALLOCATION_ERROR
  • DSP_Start_Task
    • BOOL DSP_Start_Task(T_TaskID TaskID, U16 *errcode);
  • Diese Funktion startet einen durch den TaskID spezifizierten DSP-Task. Die Ausführung beginnt am Start-Einsprungpunkt des Tasks. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_TASK_NOT_FOUND
  • DSP_Suspend_Task
    • BOOL DSP_Suspend_Task(T_TaskID TaskID, U16 *errcode);
  • Diese Funktion hält einen durch den TaskID spezifizierten DSP-Task an. Bevor der Task angehalten wird, wird der Suspend-Einsprungpunkt des Tasks aufgerufen, um dem Task eine Chance zu geben, irgendwelche notwendige Systemverwaltung auszuführen. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_TASK_NOT_FOUND
  • DSP_Resume_Task
    • BOOL DSP_Resume_Task(T_TaskID TaskID, U16 *errcode);
  • Diese Funktion nimmt einen DSP-Task wieder auf, der durch DSP_Suspend_Task angehalten worden ist. Bevor der Task wiederaufgenom men wird, wird der Resume-Einsprungpunkt des Tasks aufgerufen, um dem Task eine Chance zu geben, irgendwelche notwendige Systemverwaltung auszuführen. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_TASK_NOT_FOUND
    DSP_TASK_NOT_SUSPENDED
  • DSP_Delete_Task
    • BOOL DSP_Delete_Task(T_TaskID TaskID, U16 *errcode);
  • Diese Funktion löscht einen durch den TaskID spezifizierten DSP-Task. Vor dem Löschen wird der Stop-Einsprungpunkt des Tasks aufgerufen, um dem Task eine Chance zu geben, irgendwelche notwendige Reinigung auszuführen. Dies sollte das Freigeben irgendwelchen Speichers, der dem Task zugeordnet worden ist, und das Zurückgeben der durch den Task erworbenen Betriebsmittel enthalten. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_TASK_NOT_FOUND
  • DSP_Change_Task_Priority
    • BOOL DSP_Change_Task_Priority(T_TaskID TaskID, U16 newpriority, U16 *oldpriority, U16 *errcode);
  • Diese Funktion ändert die Priorität eines durch den TaskID spezifizierten Tasks. Die Priorität wird in den newpriority geändert. Die möglichen Werte des newpriority hängen vom RTOS ab. Beim Rücksprung wird der oldpriority-Para meter auf die vorhergehende Priorität des Tasks gesetzt. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_TASK_NOT_FOUND
    DSP_INVALID_PRIORITY
  • DSP_Get_Task_Status
    • BOOL DSP_Get_Task_Status(T_TaskID TaskID, U16 *status, U16 *priority, T_ChanID *Input, T_ChanID *Output, U16 *errcode);
  • Diese Funktion schickt den Status für einen durch den TaskID spezifizierten Task zurück. Der status ist einer der folgenden Werte:
    DSP_TASK_RUNNING
    DSP_TASK_SUSPENDED
    DSP_TASK_WAITFOR_SEM
    DSP_TASK_WAITFOR_QUEUE
    DPS_TASK_WAITFOR_MSG
  • Der priority-Parameter enthält die Priorität des Tasks, während die Input- und Output-Parameter die Eingangs- bzw. Ausgangs-Kanal-IDs des Tasks enthalten. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_TASK_NOT_FOUND
  • DSP_Get_ID_From_Name
    • BOOL DSP_Get_ID_From_Name(T_DeviceID DevID, T_DSP_Name Name, T_DSP_ID *ID, U16 *errcode);
  • Diese Funktion schickt den ID für ein benanntes Objekt im DSP 16 zurück. Das benannte Objekt kann ein Kanal, ein Task, ein Speicherblock oder irgendein anderes unterstütztes benanntes DSP-Objekt sein. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_NAME_NOT_FOUND
  • DSP_Dbg_Read_Mem
    • BOOL DSP_Dbg_Read_Mem(DEVICE_ID DevID, U8 mempage, DSP_PTR addr, U32 count, DSP_WORD *buf, U16 *errcode);
  • Diese Funktion fordert einen Block des Speichers an. Der mempage spezifiziert Programmspeicher (0) oder Datenspeicher (1). Der addr-Parameter spezifiziert die Speicherstartadresse, während der count angibt, wie viele T_DSP_Words zu lesen sind. Der buf-Parameter ist ein Zeiger auf einen vom Aufrufer bereitgestellten Puffer, in den der Speicher kopiert werden sollte. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_INVALID_MEMPAGE
  • DSP_Dbg_Write_Mem
    • BOOL DSP_Dbg_Write_Mem(T_DeviceID DevID, U16 mempage, T-DSP-Ptr addr, T-Count count, T_DSP_Word *buf, U16 *errcode);
  • Diese Funktion schreibt einen Block des Speichers. Der mempage spezifiziert Programmspeicher (0) oder Datenspeicher (1). Der addr-Parameter spezifiziert die Speicherstartadresse, während der count spezifiziert, wie viele T_DSP_Words zu schreiben sind. Der buf-Parameter ist ein Zeiger auf den Puffer, der den zu schreibenden Speicher enthält. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_INVALID_MEMPAGE
  • DSP_Dbg_Read_Reg
    • BOOL DSP_Dbg_Read_Reg(T_DeviceID DevID, U16 RegID, T_DSP_Word *regvalue, U16 *errcode);
  • Diese Funktion liest ein DSP-Register und schickt den Wert in regvalue zurück. Der RegID-Parameter spezifiziert, welches Register zurückzuschicken ist. Wenn der RegID –1 ist, dann werden alle Registerwerte zurückgeschickt. Der regvalue-Parameter, der ein Zeiger auf einen vom Aufrufer bereitgestellten Puffer ist, sollte auf ausreichend Speicher zeigen, um alle Werte zu halten. Die Register-IDs sind DSP-spezifisch und hängen von der speziellen Implementierung ab. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_INVALID_REGISTER
  • DSP_Dbg_Write_Reg
    • BOOL DSP_Dbg_Write_Reg(T_DeviceID DevID, U16 RegID, T_DSP_Word regvalue, U16 *errcode);
  • Diese Funktion schreibt ein DSP Register. Der RegID-Parameter spezifiziert, welches Register zu modifizieren ist. Der regvalue enthält den zu schreibenden neuen Wert. Die Register-IDs sind DSP-spezifisch und hängen von der speziellen Implementierung ab. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_INVALID_REGISTER
  • DSP_Dbg_Set_Break
    • BOOL DSP_Dbg_Set_Break(T_DeviceID DevID, DSP_Ptr addr, U16 *errcode);
  • Diese Funktion setzt einen Unterbrechungspunkt bei der gegebenen Codeadresse (addr). Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
  • DSP_Dgb_Clr_Break
    • BOOL DSP_Dbg_Clr_Break(T_DeviceID DevID, T_DSP_Ptr addr, U16 *errcode);
  • Diese Funktion löscht einen Unterbrechungspunkt, der vorher durch DSP_Dbg_Set_Break gesetzt worden ist, bei der gegebenen Codeadresse (addr). Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING DSP_BP_DID_NOT_EXIST
  • DER DSP-VORRICHTUNGSTREIBER
  • Der DSP-Vorrichtungstreiber 54 wickelt die Kommunikationen vom Host 12 zum DSP 16 ab. Die Treiberfunktionen nehmen die Kommunikationsanforderungen, wie sie im Host-DSP-Kommunikationsprotokoll spezifiziert sind, und wickeln die Übertragung der Informationen über die verfügbare Hardware-Schnittstelle ab. Der Vorrichtungstreiber ist RTOS-abhängig und von der Kommunikations-Hardware abhängig.
  • DIE DSP-BIBLIOTHEK
  • Die DSP-Bibliothek 58 enthält die Blöcke des Codes, die für die Ausführung in den DSP 16 heruntergeladen werden können. Jeder Block des Codes ist vorher nicht gelingt oder als eine Bibliothek verschieblich gelingt, so dass der dynamische Kreuzlinker alle Adressenbezüge auflösen kann. Jeder Codeblock enthält außerdem Informationen für die Anforderungen des Blocks an DSP-MIPS (Millionen von Befehlen pro Sekunde), die Priorität, die Zeitscheiben-Menge und den Speicher. Das Format für den Codeblockkopf ist in der Tabelle 2 gezeigt. Die Größen des Programmspeichers und des Datenspeichers sind Approximationen, um dem Host 12 eine schnelle Überprüfung zu geben, ob der DSP die Speicheranforderungen des Tasks unterstützen kann. Wenn es erscheint, dass es ausreichend Raum gibt, kann der dynamische Kreuzlinker dann versuchen, den Code zu linken und zu laden. Es sollte angegeben werden, dass der dynamische Kreuzlinker, zurückzuführen auf die Seitenausrichtung und die Zusammenhangsanforderungen, immer noch scheitern kann. In der bevorzugten Ausführungsform liegt der Code in einem COFF-Dateiformat der Version 2 vor. Tabelle 2. Der Codeblockkopf.
    Datentyp Feldname Beschreibung
    U16 Processor Der Zielprozessortyp.
    T_DSP_Name Name Der Name des Tasks.
    U32 MIPS Der schlechteste Fall der durch den Task benötigten MIPS.
    T_Size ProgSize Die notwendige Gesamtgröße des Programmspeichers.
    T_Size DataSize Die notwendige Gesamtgröße des Datenspeichers.
    T_Size InFrameSize Die Größe eines Rahmens im Eingangskanal des Tasks.
    T_Size OutFrameSize Die Größe eines Rahmens im Ausgangskanal des Tasks.
    T_Size InStrmSize Die Größe des Eingangsstrom-FIFO des Tasks.
    T_Size OutStrmSize Die Größe des Ausgangsstrom-FIFO des Tasks.
    U16 Priority Die Priorität des Tasks.
    U32 Quantum Die Menge der Zeitscheiben (Anzahl der System-Ticks) des Tasks.
    T_Size StackReq Der erforderliche Stapel.
    T_Size CoffSize Die Gesamtgröße der COFF-Datei.
    T_DSP_Ptr MsgHandler Der Versatz zu einem Einsprungpunkt in die Nachrichten-Behandlungseinrichtung für den Task.
    T_DSP_Ptr Create Der Versatz zu einem Create-Einsprungpunkt, der aufgerufen wird, wenn der Task erzeugt wird.
    T_DSP_Ptr Start Der Versatz zum Start des Codes des Tasks.
    T_DSP_Ptr Suspend Der Versatz zu einem Suspend-Einsprungpunkt, der aufgerufen wird, bevor der Task angehalten wird.
    T_DSP_Ptr Resume Der Versatz zu einem Resume-Einsprungpunkt, der aufgerufen wird, bevor der Task wiederaufgenommen wird.
    T_DSP_Ptr Stop Der Versatz zu einem Stop-Einsprungpunkt, der aufgerufen wird, bevor der Task gelöscht wird.
    T_Host_Ptr CoffPtr Der Zeiger auf den Ort der COFF-Daten in der DSP-Bibliothek.
  • DIE UMSETZUNG DES PORTABLEN CODES IN DEN GELINKTEN ZIEL-CODE
  • Eine Prozedur zum Umsetzen von portablem (prozessorunabhängigem) Code, wie z. B. JAVA-Code, in gelinkten Zielcode ist in 3 gezeigt. Die Prozedur verwendet zwei Funktionen, einen dynamischen Kreuzkompilierer 80 und einen dynamischen Kreuzlinker 82. Jede Funktion ist im Host-Prozessor 12 implementiert. Der dynamische Kreuzlinker ist in der bevorzugten Ausführungsform Teil der DSP-API. Der Kreuzkompilierer kann außerdem Teil der DSP-API sein.
  • Der dynamische Kreuzkompilierer 80 setzt den portablen Code in nicht gelinkten ausführbaren Zielprozessorcode um. Der dynamische Kreuzlinker 82 setzt den nicht gelinkten ausführbaren Zielprozessorcode in gelinkten ausführbaren Zielprozessorcode um. Um dies zu tun, muss er vor dem Laden in den DSP 16 die Adressen innerhalb eines Blocks des Codes auflösen. Der dynamische Kreuzlinker 82 linkt die Codesegmente und die Datensegmente der Funktion, ordnet den Speicher im DSP 16 zu und lädt den Code und die konstanten Daten in den DSP 16. Die Funktionen werden als "Kreuz"-Kompilieren und "Kreuz"-Linken bezeichnet, weil die Funktionen (das Kompilieren und das Linken) in einem vom Zielprozessor, der den Code ausführt, (d. h. dem DSP 16) verschiedenen Prozessor (d. h. dem Host-Prozessor 12) auftreten.
  • Der dynamische Kreuzkompilierer 80 akzeptiert vorher nicht gelinkten Code, der auf Anforderung durch einen Benutzer oder einen Benutzeragenten (wie z. B. einen Browser) geladen wird. Der Code wird verarbeitet, um entweder (1) "etikettierte" Abschnitte des Codes zu identifizieren oder (2) nicht etikettierte Codesegmente auf die Eignung der Ausführung im DSP 16 zu analysieren. Ein etikettierter Abschnitt des Quellcodes könnte eine Quelle, auf die durch einen DSP gezielt werden kann, durch vorgegebene Markierungen, wie z. B. "<start DSP code>" und <end DSP code>", die in den Quellcode eingebettet sind, beschreiben. Falls ein etikettierter Abschnitt entweder direkt oder durch Analyse identifiziert wird, wird eine Entscheidung, ob er zu kreuzkompilieren ist oder nicht, anhand des aktuellen Verarbeitungszustands des DSP 16 getroffen. Falls eine Entscheidung, zu kompilieren, getroffen wird, wird der Abschnitt des Codes durch Kompilierungs-Software, die nicht gelinkten ausführbaren Zielprozessorcode ausgibt, unter Verwendung wohlbekannter Kompilierungsverfahren verarbeitet. Eine Entscheidung, nicht zu kompilieren, könnte getroffen werden, falls z. B. der DSP, zurückzuführen auf andere Tasks, die durch den DSP 16 ausgeführt werden, ungenügend verfügbare Verarbeitungskapazität (die im Allgemeinen als verfügbare MIPS – Millionen von Befehlen pro Sekunde – dargelegt wird) oder ungenügend verfügbaren Speicher besitzt. Der kompilierte Code kann für die unmittelbare Verwendung im DSP 16 zum dynamischen Kreuzlinker 82 weitergeleitet werden oder könnte in der DSP-Bibliothek 58 gesichert werden.
  • Der dynamische Kreuzlinker 82 akzeptiert vorher nicht gelinkten Code, der entweder (1) im Zusammenhang mit dem Host-Prozessor 12 statisch gespeichert ist oder (2) über eine Netzverbindung (einschließlich über globale Netze, wie z. B. das Internet) dynamisch zum Host-Prozessor 12 heruntergeladen wird oder (3) durch den dynamischen Kreuzkompilierer 80 dynamisch erzeugt wird. Der dynamische Kreuzlinker 82 linkt den Eingangscode für eine Speicherstartadresse des DSP 16, die zur Laufzeit bestimmt wird. Die Speicherstartadresse kann aus einer Speicherabbildung oder einer Speichertabelle bestimmt werden, die entweder im Host-Prozessor 12 oder im DSP 16 gespeichert ist und durch den Host-Prozessor 12 oder den DSP 16 gemanagt wird. Der dynamische Kreuzlinker 82 setzt die Speicherstellen im Code, auf die Bezug genommen wird, in tatsächliche Speicherstellen im DSP um. Diese Speicherstellen könnten z. B. Verzweigungsadressen im Code oder Bezugnahmen auf Orte der Daten im Code enthalten.
  • In der bevorzugten Ausführungsform liegt der portable Code in einem COFF (gemeinsamen Objektdateiformat) vor, das alle Informationen über den Code enthält, einschließlich dessen, ob er gelinkt oder nicht gelinkt ist. Falls er nicht gelinkt ist, definieren Symboltabellen die Adressen, die geändert werden müssen, um den Code zu linken.
  • Der oben beschriebene Umsetzungsprozess besitzt gegenüber dem Stand der Technik mehrere signifikante Vorteile. Zuerst erlaubt der dynamische Kreuzkompilierer 80, dass Laufzeitentscheidungen darüber getroffen werden, wo der heruntergeladene portable Code auszuführen ist. In einem System mit mehreren Zielprozessoren (wie z. B. zwei DSPs 16) könnte der dynamische Kreuzkompilierer 80 z. B. den portablen Code anhand der verfügbaren Betriebsmittel oder Fähigkeiten für irgendeinen der Zielprozessoren kompilieren. Der dynamische Kreuzlinker 82 sorgt für das Linken des Codes, damit er in einem Zielprozessor abläuft, der keinen verschieblichen Code unterstützt. Weil der Code zur Laufzeit gelinkt wird, müssen die Speicherstellen im DSP 16 (oder dem anderen Zielprozessor) nicht reserviert sein, was einen optimalen Wirkungsgrad der Verwendung aller Computer-Betriebsmittel in der Vorrichtung erlaubt. Weil das Kompilieren mit der Kenntnis der Architektur der Plattform 10 ausgeführt wird, kann das Kompilieren die spezifischen Merkmale des Prozessors und der Plattform, wie z. B. intelligente Cache-Architekturen in einem oder beiden Prozessoren, ausnutzen.
  • Folglich kann der DSP 16 verschiedene Funktionen besitzen, die dynamisch geändert werden, um seine Verarbeitungsfähigkeiten vollständig zu verwenden. Der Benutzer kann z. B. wünschen, eine Benutzerschnittstelle zu laden, die die Spracherkennung enthält. Zu diesem Zeitpunkt könnte der Host-Prozessor die Software herunterladen und die Spracherkennungs-Software für die Ausführung im DSP 16 dynamisch kreuzkompilieren und kreuzlinken. Alternativ könnte vorher kompilierte Software in der DSP-Bibliothek 58 anhand des aktuellen Status des DSP 16 für die Ausführung dynamisch kreuzgelinkt werden.
  • DER HOST-VORRICHTUNGSTREIBER
  • Der Host-Vorrichtungstreiber wickelt die Kommunikationen vom DSP 16 zum Host 12 ab. Die Treiberfunktionen nehmen die Kommunikationsanforderungen, wie sie im Host-DSP-Kommunikationsprotokoll spezifiziert sind, und wickeln die Übertragung der Informationen über die verfügbare Hardware-Schnittstelle ab. Der Vorrichtungstreiber ist RTOS-abhängig und von der Kommunikations-Hardware abhängig.
  • DAS HOST-DSP-KOMMUNIKATIONSPROTOKOLL (DIE HOST-DSP-SCHNITTSTELLENSCHICHT)
  • Das Host-DSP-Kommunikationsprotokoll steuert die Übermittlungen von Befehlen und Daten zwischen dem Host 12 und dem DSP 16. Die Übermittlungen umfassen mehrere Wege: Nachrichten, Datenkanäle und Ströme. Die Nachrichten werden verwendet, um Initialisierungsparameter und Befehle an die Tasks zu senden. Die Datenkanäle übertragen große Mengen von Daten in der Form von Datenrahmens zwischen den Tasks und zwischen dem DSP 16 und dem Host 12. Die Ströme werden verwendet, um geströmte Daten zwischen den Tasks und zwischen dem DSP 16 und dem Host 12 weiterzuleiten.
  • Die Nachrichten
  • Jeder Task besitzt einen Einsprungpunkt in eine Nachrichten-Behandlungseinrichtung, die die Nachrichten abwickelt. Die Nachrichten sind benutzerdefiniert und enthalten Initialisierungsparameter für die Funktion des Tasks und Befehle zum Steuern des Tasks. Die Tasks senden über den Rückruf, der spezifiziert wird, wenn der Task erzeugt wird, Nachrichten zum Host 12. Der Prototyp für die Nachrichten-Behandlungseinrichtung des Tasks und der Prototyp für den Rückruf des Hosts sind hier gezeigt:
    • void TaskMsgHandler(T_ReplyRef replyref; T_MsgID MsgID, T_Count count, T_DSP_Word *buf);
    • void HostCallBack(T_ReplyRef replyref, T_MsgID MsgID, T_Count count, T_DSP Word *buf);
  • Der replyref-Parameter bezieht sich auf einen von der Implementierung abhängigen Bezugswert, der verwendet wird, um die Antwort zurück zum Sender zu leiten. Für jeden Send_Message-Aufruf muss der Empfänger unter Verwendung des replyref Parameters Reply_Message aufrufen. Die tatsächlichen Nachrichten können wie folgt erscheinen:
    Sendenachricht: MsgPktFlag taskid replyref msgid count buf[...]
    Antwortnachricht MsgPktFlag –1 replyref msgid count buf[...]
  • Die Mehrwort-Daten werden mit dem niedrigstwertigen Wort zuerst gesendet.
  • Ein TaskID von 0 in der Send_Message-Funktion zeigt eine Systemebenen-Nachricht an. Die Systemebenen-Nachrichten werden verwendet, um die DSP-API-Funktionen zu implementieren.
  • Das Folgende sind die Nachrichtenfunktionen:
  • Send_Message
    • BOOL Send_Message(T_TaskID TaskID, T_MsgID MsgID, T_Count count, T_DSP_Word *msgbuf, T_DSP_Word *replybuf, T_Size replybufsize, T_Count replycount, U16 *errcode);
  • Diese Funktion sendet eine benutzerdefinierte Nachricht an einen durch den TaskID spezifizierten Task. Der MsgID definiert die Nachricht, während der msgbuf die tatsächlichen Nachrichtendaten enthält. Die Nachrichtengröße beträgt count T_DSP_Words. Die Antwort auf die Nachricht ist im replybuf-Parameter enthalten, der auf einen Puffer der Größe replybufsize zeigt, der durch den Aufrufer bereitgestellt wird. Er sollte eine ausreichend Größe besitzen, um die Antwort auf die spezielle Nachricht abzuwickeln. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_TASK_NOT_FOUND
  • Reply_Message
    • BOOL Reply_Message(T_ReplyRef replyref, T_Count count, T_DSP_Word *buf, U16 *errcode);
  • Diese Funktion wird verwendet, um auf Nachrichten zu antworten. Der replyref-Parameter ist eine Bezugnahme, die verwendet wird, um die Antwort zurück zum Sender der ursprünglichen Nachricht zu leiten, wobei er implementierungsspezifisch ist. Die Antwort ist im buf-Parameter enthalten, wobei ihre Größe count T_DSP_Words beträgt. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    DSP_SUCCESS
    DSP_DEVID_NOT_FOUND
    DSP_DEVID_NOT_RESPONDING
    DSP_BAD_REPLY_REF
  • Die Kanäle
  • Das Konzept der Kanäle wird verwendet, um rahmengestützte Daten von einem Prozessor zu einem weiteren oder zwischen den Tasks im selben Prozessor zu übertragen. Wenn ein Kanal erzeugt wird, ordnet er eine spezifizierte Anzahl und Größe von Rahmen zu, die die Daten enthalten. Anfangs enthält der Kanal eine Liste leerer Rahmen. Die Tasks, die die Daten erzeugen, fordern leere Rahmen an, in die die Daten zu setzen sind, wobei dann der Rahmen, sobald er gefüllt ist, zum Kanal zurückgeschickt wird. Die Tasks, die Daten verbrauchen, fordern volle Rahmen vom Kanal an, wobei der Rahmen, sobald er geleert ist, zum Kanal zurückgeschickt wird. Dieses Anfordern und Zurückschicken von Rahmenpuffern erlaubt, dass sich die Daten mit einem Minimum des Kopierens umherbewegen.
  • Jeder Task besitzt einen spezifizierten Eingangs- und Ausgangskanal. Sobald ein Kanal erzeugt ist, sollte er als der Eingang in einen Task und der Ausgang aus einem weiteren Task bezeichnet werden. Die ID eines Kanals enthält eine Vorrichtungs-ID, deshalb können die Kanäle Daten zwischen den Prozessoren weiterleiten. Der Kanaldatenfluss durch die Host-DSP-Schnittstelle kann wie folgt erscheinen:
    ChanPktFlag Kanal-ID Count Daten[...]
  • Das Folgende sind die Kanalfunktionen:
  • Create_Channel
    • BOOL Create_Channel(T_DeviceID DevID, T_Size framesize, T_Count numframes, T_ChanID *ChannelID, U16 *errcode);
  • Diese Funktion erzeugt einen datenrahmengestützten Kommunikationskanal. Dies erzeugt eine Kanalsteuerstruktur, die die Steuerung der Menge von Rahmenpuffern aufrechterhält, deren Anzahl und Größe in den numframes bzw. framesize-Parametern spezifiziert sind. Wenn der Kanal erzeugt wird, ordnet er die Datenrahmen zu und fügt sie zu seiner Liste der leeren Rahmen hinzu. Der ChannelID schickt die ID des neuen Kanals zurück. Falls der DevID nicht der des aufrufenden Prozessors ist, wird eine Kanalsteuerstruktur sowohl im aufrufenden Prozessor als auch im DevID-Prozessor erzeugt, um die durch die Kommunikationsschnittstelle fließenden Daten zu steuern. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    CHAN_SUCCESS
    CHAN_DEVID_NOT_FOUND
    CHAN_DEVID_NOT_RESPONDING
    CHAN_ALLOCATION_ERROR
  • Delete_Channel
    • BOOL Delete_Channel(T_ChanID ChannelID, U16 *errcode);
  • Diese Funktion löscht einen durch den ChannelID spezifizierten vorhandenen Kanal. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    CHAN_SUCCESS
    CHAN_DEVID_NOT_FOUND
    CHAN_DEVID_NOT_RESPONDING
    CHAN_CHANNEL_NOT_FOUND
  • Request_Empty_Frame
    • BOOL Request_Empty_Frame(T_LocalChanID Chn, T_DSP_Word **bufptr, BOOL WaitFlag, U16 *errcode);
  • Diese Funktion fordert einen leeren Rahmen von der spezifizierten lokalen Kanal-ID an. Wenn der Chn NULL ist, dann wird der Ausgangskanal des Tasks verwendet. Beim Rücksprung enthält der bufptr-Parameter den Zeiger auf den Rahmenpuffer. Falls der WaitFlag WAHR ist und es keinen verfügbaren Rahmenpuffer gibt, wird der Aufrufer angehalten, bis ein Puffer verfügbar wird. Falls der WaitFlag FALSCH ist, springt die Funktion dennoch zurück. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    CHAN_SUCCESS
    CHAN_CHANNEL_NOT_FOUND
    CHAN_BUFFER_UNAVAILABLE
  • Return_Full_Frame
    • BOOL Return_Full_Frame(T_LocalChanID Chn, T_DSP_Word *bufprt, U16 *errcode);
  • Sobald ein Task einen Rahmenpuffer gefüllt hat, schickt er ihn unter Verwendung dieser Funktion zum Kanal zurück. Der Puffer, auf den durch bufptr gezeigt wird, wird zur spezifizierten Kanal-ID zurückgeschickt. Wenn der Chn NULL ist, dann wird der Ausgangskanal des Tasks verwendet. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    CHAN_SUCCESS
    CHAN_CHANNEL_NOT_FOUND
    CHAN_BUFFER_CTRL_ERROR
  • Request_Full_Frame
    • BOOL Request_Full_Frame(T_LocalChanID Chn, T_DSP_Word **bufptr, BOOL WaitFiag, U16 *errode);
  • Diese Funktion fordert einen vollen Rahmen der Daten von der spezifizierten lokalen Kanal-ID an. Wenn der Chn NULL ist, dann wird der Eingangskanal des Tasks verwendet. Beim Rücksprung enthält der bufptr-Parameter den Zeiger auf den Rahmenpuffer. Falls der WaitFlag WAHR ist und es keinen verfügbaren vollen Rahmenpuffer gibt, wird der Aufrufer angehalten, bis ein Puffer verfügbar wird. Falls der WaitFlag FALSCH ist, springt die Funktion dennoch zurück. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    CHAN_SUCCESS
    CHAN_CHANNEL_NOT_FOUND
    CHAN_BUFFER_UNAVAILABLE
  • Return_Empty_Frame
    • BOOL Return_Empty_Frame(T_LocalChanID Chn, T_DSP_Word *bufprt, U16 *errcode);
  • Sobald ein Task die Daten von einem Rahmenpuffer verwendet hat, sollte er den Puffer unter Verwendung dieser Funktion zum Kanal zurückschicken. Der Puffer, auf den durch den bufptr gezeigt wird, wird zur spezifizierten Kanal-ID zurückgeschickt. Wenn der Chn NULL ist, dann wird der Eingangskanal des Tasks verwendet. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    CHAN_SUCCESS
    CHAN_CHANNEL_NOT_FOUND
    CHAN_BUFFER_CTRL_ERROR
  • Set_Task_Input_Channel
    • BOOL Set_Task_Input_Channel(T_Task *TaskID, T_ChanID ChanID, U16 *errcode);
  • Diese Funktion setzt den Eingangskanal eines Tasks auf die spezifizierte Kanal-ID. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    CHAN_SUCCESS
    CHAN_DEVID_NOT_FOUND
    CHAN_DEVID_NOT_RESPONDING
    CHAN_TASK_NOT_FOUND
    CHAN_CHANNEL_NOT_FOUND
  • Set_Task_Output_Channel
    • BOOL Set_Task_Output_Channel(T_Task *TaskID, T_ChanID ChanID, U16 *errcode);
  • Diese Funktion setzt den Ausgangskanal eines Tasks auf die spezifizierte Kanal-ID. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    CHAN_SUCCESS
    CHAN_DEVID_NOT_FOUND
    CHAN_DEVID_NOT_RESPONDING
    CHAN_TASK_NOT_FOUND
    CHAN_CHANNEL_NOT_FOUND
  • Die Ströme
  • Die Ströme werden für Daten verwendet, die nicht in Rahmen aufgebrochen werden können, sondern die kontinuierlich in einen und aus einem Task fließen. Ein Strom umfasst einen Ringpuffer (FIFO) mit zugeordneten Kopf- und Endzeigern, um die Daten zu verfolgen, wie sie ein- und ausfließen. Jeder Task kann einen bezeichneten Eingangs- und Ausgangstrom besitzen. Der Stromdatenfluss durch die Host-DSP-Schnittstelle kann wie folgt erscheinen:
    StrmPktFlag Strom-ID Count Daten[...]
  • Das Folgende sind die Stromfunktionen:
  • Create_Stream
  • BOOL Create_Stream(T_DeviceID DevID, T_Size FIFOsize, T_StrmID, *StreamID, U16 *errcode);
  • Diese Funktion erzeugt einen FIFO-gestützten Kommunikationsstrom. Dies erzeugt eine Stromsteuerstruktur, die die Steuerung eines FIFO mit der Größe FIFOsize aufrechterhält. Wenn der Strom erzeugt wird, ordnet er einen leeren FIFO zu und initialisiert die Kopf- und Endzeiger, um den Datenfluss in den und aus dem Strom abzuwickeln. Der StreamID schickt die ID des neuen Stroms zurück. Falls der DevID nicht der des aufrufenden Prozessors ist, wird eine Stromsteuerstruktur sowohl im aufrufenden Prozessor als auch im DevID-Prozessor erzeugt, um die durch die Kommunikationsschnittstelle fließenden Daten zu steuern. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    STRM_SUCCESS
    STRM_DEVID_NOT_FOUND
    STRM_DEVID_NOT_RESPONDING
    STRM_ALLOCATION_ERROR
  • Delete_Channel
    • BOOL Delete_Stream(T_StrmID StreamID, U16 *errcode);
  • Diese Funktion löscht einen durch den StreamID spezifizierten vorhandenen Strom. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    STRM_SUCCESS
    STRM_DEVID_NOT_FOUND
    STRM_DEVID_NOT_RESPONDING
    STRM_STREAM_NOT_FOUND
  • Get_Stream_Count
    • BOOL Get_Stream_Count(T_LocalStrmID StrmID, T_Count *count, U16 *errcode);
  • Diese Funktion fordert die Anzahl der T_DSP_Words an, die sich gegenwärtig im durch den StrmID spezifizierten Strom-FIFO befinden. Der count-Parameter enthält beim Rücksprung die Anzahl. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    STRM_SUCCESS
    STRM_STREAM_NOT_FOUND
  • Write_Stream
    • BOOL Write_Stream(T_LocalStrmID Strm, T_DSP_Word *bufptr, T_Count count, T_Count *countwritten, U16 *errcode);
  • Diese Funktion schreibt die count-Anzahl von T_DSP_Words in den durch den Strm spezifizierten Strom. Falls der Strm NULL ist, wird der Ausgangstrom des Tasks verwendet. Auf die Daten wird durch den bufptr-Parameter gezeigt. Beim Rücksprung enthält der countwritten die Anzahl der tatsächlich geschriebenen T_DSP_Words. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    STRM_SUCCESS
    STRM_DEVID_NOT_FOUND
    STRM_DEVID_NOT_RESPONDING
    STRM_STREAM_NOT_FOUND
    STRM_STREAM_OVERFLOW
  • Read_Stream
    • BOOL Read_Stream(T_LocalStrmID Strm, T_DSP_Word *bufptr, T_Count maxcount, BOOL WaitFlag, T_Count *countread, U16 *errcode);
  • Diese Funktion liest die Daten aus dem durch den Strm spezifizierten Strom. Falls der Strm NULL ist, wird der Eingangstrom des Tasks verwendet. Die Daten werden in dem Puffer gespeichert, auf den durch den bufptr gezeigt wird. Bis zu maxcount T_DSP_Words werden aus dem Strom gelesen. Der countread-Parameter enthält die tatsächliche Anzahl der gelesenen Daten. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    STRM_SUCCESS
    STRM_DEVID_NOT_FOUND
    STRM_DEVID_NOT_RESPONDING
    STRM_STREAM_NOT_ FOUND
  • Set_Task_Input_Stream
    • BOOL Set_Task_Input_Stream(T_Task *TaskID, T_StrmID StrmID, U16 *errcode);
  • Diese Funktion setzt den Eingangsstrom eines Tasks auf die spezifizierte Strom-ID. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    STRM_SUCCESS
    STRM_DEVID_NOT_ FOUND
    STRM_DEVID_NOT_RESPONDING
    STRM_TASK_NOT_FOUND
    STRM_STREAM_NOT_ FOUND
  • Set_Task_Output_Stream
    • BOOL Set_Task_Output_Stream(T_Task *TaskID, T_StrmID StrmID, U16 *errcode);
  • Diese Funktion setzt den Ausgangsstrom eines Tasks auf die spezifizierte Strom-ID. Der errcode-Parameter enthält die folgenden möglichen Ergebnisse:
    STRM_SUCCESS
    STRM_DEVID_NOT_FOUND
    STRM_DEVID_NOT_RESPONDING
    STRM_TASK_NOT_FOUND
    STRM_STREAM_NOT_FOUND
  • DIE DATENTYPEN
  • Die hierin verwendeten Datentypen sind in der Tabelle 3 definiert: Tabelle 3
    Symbol Beschreibung
    S8 vorzeichenbehaftete ganze 8-Bit-Zahl
    U8 vorzeichenlose ganze 8-Bit-Zahl
    S16 vorzeichenbehaftete ganze 16-Bit-Zahl
    U16 vorzeichenlose ganze 16-Bit-Zahl
    S32 vorzeichenbehaftete ganze 32-Bit-Zahl
    U32 vorzeichenlose ganze 32-Bit-Zahl
    T_HostWord Ein Wort im Host-Prozessor.
    T_DSP Word Ein Wort im DSP-Prozessor.
    BOOL Boolescher Wert (WAHR oder FALSCH)
    T_Hostprt Ein Zeiger im Host-Prozessor.
    T_DSP_Ptr Ein Zeiger im DSP-Prozessor.
    T_DeviceID Die Vorrichtungs-ID des Prozessors.
    T_TaskID Eine Struktur, die Felder für eine Vorrichtungs-ID und eine lokale Task-ID des Prozessors enthält.
    T_ChanID Eine Struktur, die Felder für eine Vorrichtungs-ID und eine lokale Kanal-ID des Prozessors enthält.
    T_MsgID Die Nachrichten-ID.
    T_DSP_ID Eine Objekt-ID im DSP.
    T_Count Der Datentyp für eine Anzahl.
    T_Size Der Datentyp für eine Größe.
    T_HostCallBack Der verwendete Wert, wenn Tasks eine Nachricht zurück zum Host senden.
    T_ReplyRef Die Nachrichtenantwort-Bezugnahme.
    T_LocalTaskID Die lokale Task-ID.
    T_LocalChanID Die lokale Kanal-ID.
    T_DSP_Name Der Name für DSP-Objekte (RTOS-abhängig).
    T_CodeHdr Die Codekopfstruktur für einen DSP-Bibliothekseintrag.
    T_TaskCreate Die Task-Erzeugungsstruktur.
  • DIE SYSTEMNACHRICHTEN
  • Diese Tabellen definieren die Nachrichten, die zwischen den Vorrichtungen (d. h. vom Host zum DSP 16) weitergeleitet werden. Die Vorrichtungs-IDs, die als Parameter in den entsprechenden Funktionsaufrufen vorhanden sind, werden nicht in die Nachrichten aufgenommen, weil sie verwendet werden, um die Nachricht tatsächlich zu der Vorrichtung zu leiten. Ähnlich enthalten die Task-IDs, die eine Vorrichtungs-ID als ihre obere Hälfte für den Funktionsaufruf enthalten, nicht die Vorrichtungs-ID in der Nachricht, sondern nur den Abschnitt der lokalen Task-ID des DSP. Tabelle 4. Die DSP-API-Nachrichten
    Nachricht Sendeparameter Antwortparameter Richtung Host ⇔ DSP
    GET_MIPS keine U32 mips
    GET_MEM_AVAIL T_Size progmem T_Size datamem
    ALLOC_MEM U16 mempage T_Size size T_DSP_Word *memptr U16 errcode
    FREE_MEM U16 mempage T_DSP_Word *mempage U16 errcode
    PUT_BLOB T_DSP_Ptr destaddr U16 mempage T_Size size T_DSP_Word BLOB[size] U16 errcode
    CREATE_TASK T_TaskCreate tcs T_TaskID TaskID U16 errcode
    START_TASK T_TaskID TaskID U16 errcode
    SUSPEND_TASK T TaskID TaskID U16 errcode
    RESUME_TASK T_TaskID TaskID U16 errcode
    DELETE_TASK T_TaskID TaskID U16 errcode
    CHANGE_PRIORITY T_TaskID TaskID U16 newpriority U16 oldpriority U16 errcode
    GET_TASK_STATUS T_TaskID TaskID U16 status U16 priority T_ChanID Input T_ChanID Output U16 errcode
    GET_ID T_DSP_Name Name T_DSP_ID ID U16 errcode
    Tabelle 5. Die Nachrichten der DSP-Schnittstellenschicht/Kanal-Schnittstellenschicht
    Nachricht Sendeparameter Antwortparameter Richtung Host ⇔ DSP
    CREATE_CHANNEL T_Size framesize T_Count numframes T_ChanID ChannelID U16 errcode
    DELETE_CHANNEL T_ChanID ChannelID U16 errcode
    CREATE_STREAM T_Size FIFOsize T_StrmID StreamID U16 errcode
    DELETE_STREAM T_StrmID StreamID U16 errcode
    Tabelle 6. Die Austestnachrichten
    Nachricht Sendeparameter Antwortparameter Richtung Host ⇔ DSP
    READ_MEM U16 mempage T_DSP_Ptr addr T_Count count T_DSP_Word mem[count] U16 errcode
    WRITE_MEM U16 mempage T_DSP_Ptr addr T_Count count T_DSP_Word mem[count] U16 errcode
    READ_REG U16 RegID DSP_WORD regvalue U16 errcode
    WRITE_REG U16 RegID DSP_WORD regvalue U16 errcode
    SET_BREAK T_DSP_Ptr addr U16 errcode
    CLR_BREAK T_DSP_Ptr addr U16 errcode
    BREAK_HIT T_DSP_Ptr addr U16 ACK
  • DAS HERUNTERLADEN DES MASCHINENCODES
  • Die 4-6 veranschaulichen eine Ausführungsform zum Herunterladen des Maschinencodes zu einem Zielprozessor (d. h. dem Host 12 oder dem DSP 16) in einer sicheren und effizienten Weise. Diese Ausführungsform zum Herunterladen des Codes könnte z. B. beim Herunterladen von Code aus dem Internet oder einem anderen globalen Netz, aus einem lokalen oder weiträumigen Netz oder von einer Peripherievorrichtung, wie z. B. einer PC-Karte oder Chip-Karte, verwendet werden.
  • In 4 ist eine Ausführungsform einer JAVA-Bohne 90 gezeigt, wobei die Bohne 90 als eine Hülle für den Maschinencode 92 wirkt. Die Bohne enthält ferner mehrere Attribute 94, die als ein Codetyp-Attribut 94a, ein Codegrößen-Attribut 94b und ein Attribut der erforderlichen MIPS 94c aufgelistet sind. Die Bohne 90 besitzt mehrere Prozesse 96, einschließlich eines Laden-des-Codes-Prozesses 96a, eines Laden-der-Parameter-Prozesses 96b und eines Ausführungsparameters 96c.
  • In Betrieb wird der Laden-des-Codes-Prozess 96a verwendet, um externen Maschinencode (Maschinencode für den Zielprozessor) in die Bohne zu laden. Weil die JAVA-Bohnen Persistenz besitzen, kann die Bohne 90 ihren internen Zustand, einschließlich des Maschinencodes 92 und der Attribute 94, speichern. Der Laden-der-Parameter-Prozess 96b gewinnt die Parameter aus dem Maschinencode 92 (z. B. unter Verwendung des oben beschriebenen COFF-Dateiformats) wieder und speichert die Parameter als die Attribute 94a–c. Der Ausführungsprozess 96c führt die im DSP 16 installierten Tasks aus.
  • 5 veranschaulicht die Verwendung der Bohne 90, um den Code zum Zielprozessor herunterzuladen. In diesem Beispiel wird angenommen, dass der Zielprozessor der DSP 16 (oder einer von mehreren DSPs 16) ist, obwohl sie ebenso verwendet werden könnte, um den Maschinencode zum Host-Prozessor 12 herunterzuladen. Ferner wird angenommen, dass die gewünschte Bohne 90 in einem Netz-Server, wie z. B. einem LAN-Server oder einem Internet-Server, steht, obwohl die Bohne in jeder Vorrichtung stehen könnte, die mit der Plattform 10 in Verbindung steht, wie z. B. in einer Chip-Karte. Für eine drahtlose Datenplattform 10 ist die Verbindung zum Netz-Server 100 oft drahtlos.
  • In 5 ist die Plattform 10 an einen Netz Server 100 gekoppelt. Der Host-Prozessor 12, der in 2 ausführlicher gezeigt ist, kann ein oder mehrere JAVA-Applets 40 durch eine virtuelle JAVA-Maschine 44 ausführen. Um neuen Code herunterzuladen, lädt der Host 12 ein Applet, das die Bohne 90 enthält, vom Netz-Server 100, oder die Bohne kann, ohne das Applet zu enthalten, vom Server 100 heruntergeladen werden. Sobald die Hüllen-Bohne 90 wiedergewonnen worden ist, kann sie nach der Größe des Maschinencodes, den Codetyp (für welchen Prozessor der Code vorgesehen ist) und den erforderlichen MIPS abgefragt werden. Falls der vorgesehene Prozessor ausreichend Betriebsmittel besitzt, um den Code 92 auszuführen, kann der Code 92 installiert werden, um im vorgesehenen Prozessor ausgeführt zu werden, entweder im Host-Prozessor 12 oder im DSP 16 in den 5 gezeigten Architektur. Typischerweise ist der Maschinencode 92 nicht gelinkter kompilierter Code. Folglich linkt der Kreuzlinker 82 der DSP-API 50 den Code für eine verfügbare Speicherstelle. Die Bohne leitet den binären Maschinencode 92 zum dynamischen Kreuzlinker 82, der den Code installieren und ausführen würde.
  • Eine typische Weise, in der ein Herunterladen von Maschinencode vorkommen könnte, ist, wenn der Benutzer ein Applet ausführt, in dem eine DSP-Funktion gewünscht ist. Zuerst würde das Applet prüfen, um festzustellen, ob der gewünschte Code als ein Task 60 im DSP installiert worden ist oder in der DSP-Bibliothek 58 verfügbar gewesen ist. Wenn ja, könnte der Task ohne ein Herunterladen ausgeführt werden.
  • Falls der Task nicht im DSP 16 oder der DSP-Bibliothek 58 gespeichert ist, könnte ein Objekt (das hierin als das "DSPLoader"-Objekt bezeichnet wird) erzeugt werden, um die Bohne 90 zu laden. Falls die DSPLoader-Klasse im Host 12 lokal ist, prüft JAVA, um festzustellen, ob die Bohne ebenso lokal verfügbar ist. In einem ersten Fall kann eine Bohne mit dem Code lokal gespeichert sein. Wenn ja, wird der Code aus der Bohne im DSP (oder in welchem durch den Codetyp spezifizierten Prozessor auch immer) installiert. Falls eine Bohne ohne den Code lokal gespeichert ist, kann die Bohne den Code vom geeigneten Server wiedergewinnen.
  • Wenn andererseits das DSPLoader-Objekt nicht lokal ist, dann lädt JAVA die Bohne 90 vom Server, der das Applet geschrieben hat. Der Code von der Bohne wird dann so installiert, wie es oben beschrieben worden ist.
  • Während das Herunterladens des Maschinencodes im Zusammenhang mit der Verwendung einer JAVA-Bohne beschrieben worden ist, könnte es außerdem ausgeführt werden, indem der Code innerhalb einer weiteren Sprache, wie z. B. als ein ActiveX-Applet, eingewickelt wird.
  • Das Verwenden einer JAVA-Bohne (oder eines anderen Applets) als eine Hülle für den Maschinencode besitzt signifikante Vorteile. Erstens erlaubt es ein einfaches Standardverfahren zum Laden des Codes auf einen von mehreren Prozessoren. Die Bohne wird erzeugt, der Code wird in die Bohne geladen und der Code wird für den geeigneten Prozessor gelinkt. Ohne das Einwickeln des Codes innerhalb der Bohne kann der Prozess mehrere hundert Schritte benötigen. Zweitens erlaubt es, dass mehrere Stücke des Maschinencodes durch ein einziges Applet kombiniert werden, was dafür sorgt, dass komplexe Anwendungen aus mehreren diskreten Routinen unter Verwendung eines einzigen Applets, um die Routinen auf Wunsch zu kombinieren, erzeugt werden. Drittens nutzt es die Sicherheitsmerkmale der Sprache aus und schützt dadurch nicht nur den JAVA-Code in der Bohne 90, sondern ebenso den Maschinencode 92. Andere Sprachen, wie z. B. ActiveX, besitzen ebenso Sicherheitsmerkmale.
  • DIE SICHERHEIT
  • Zwei der wichtigsten Sicherheitsmerkmale sind die digitale Signierung und die Verschlüsselung. Eine JAVA-Bohne oder ein ActiveX-Applet können durch die Quelle des Codes signiert werden; wenn die Bohne oder das Applet heruntergeladen wird, wird die Signatur durch die empfangende Anwendung verifiziert, die eine Liste vertrauenswürdiger Quellen besitzt. Falls die Bohne oder das Applet durch eine vertrauenswürdiger Quelle signiert worden ist, kann sie bzw. es unter Verwendung von Standardtechniken entschlüsselt werden. Demzufolge ist der Maschinencode während der Übertragung zusammen mit dem Code der Bohne oder des Applets verschlüsselt, was eine unberechtigte Modifikation des Codes verhindert. Weil der Maschinencode sicher ist und von einer vertrauenswürdigen Quelle kommt, kann den Attributen außerdem als genau vertraut werden.
  • 6 veranschaulicht einen Ablaufplan, der den Prozess des Herunterladens des Maschinencodes für einen Prozessor unter Verwendung einer JAVA-Bohne beschreibt, wobei es selbstverständlich ist, dass der Maschinencode unter Verwendung ähnlicher Techniken in ein Applet einer anderen Sprache eingewickelt sein könnte. Im Schritt 110 wird die verschlüsselte, digital signierte Bohne 90 zu einer Vorrichtung herunterladen, die eine virtuelle JAVA-Maschine ausführt. Im Schritt 112 wird die Signatur verifiziert. Falls sie nicht von einer Quelle kommt, die als eine vertrauenswürdige Quelle aufgelistet ist, wird im Schritt 114 die Aus nahmeverarbeitung freigegeben. In dem Fall, in dem die Bohne von einer vertrauenswürdigen Quelle kommt, kann die Funktion der Ausnahmeverarbeitung dem Benutzer eine Gelegenheit geben, die Bohne zu akzeptieren, falls der Benutzer mit der Quelle sorgenfrei ist. Falls die Signatur ungültig ist, kann die Ausnahmeverarbeitung die Bohne 90 löschen und eine geeignete Fehlernachricht an den Benutzer senden.
  • Falls die Signatur gültig ist und von einer vertrauenswürdigen Quelle kommt, wird im Schritt 116 die Bohne entschlüsselt. Dieser Schritt entschlüsselt sowohl den JAVA-Code als auch den Maschinencode in der Bohne. Im Schritt 118 werden die Attribute von der Bohne 90 wiedergewonnen, während im Schritt 120 das Applet bestimmt, ob der geeignete Prozessor ausreichend Betriebsmittel besitzt, um den Code auszuführen. Falls nicht, kann es der Schritt 114 der Ausnahmeverarbeitung ablehnen, den Maschinencode zu installieren, oder es können Schritte unternommen werden, um Betriebsmittel freizugeben. Falls es ausreichend Betriebsmittel gibt, wird der Code im Schritt 122 unter Verwendung des Kreuzlinkers gelinkt und im gewünschten Prozessor installiert. Im Schritt 124 wird der Maschinencode ausgeführt.
  • Ein Beispiel-JAVA-Skript für eine Bohne 90 ist im folgenden bereitgestellt:
    Figure 00420001
    Figure 00430001
    Figure 00440001
    Figure 00450001
    Figure 00460001
    Figure 00470001
  • Im oben dargelegten Script erzeugt die NativeBean()-Routine die Bohne 90, die den Maschinencode enthält. Die loadCode()-Routine erhält den Maschinencode vom Server. Die getFunctionName()- und getCodeBase()-Routinen gewinnen die Attribute wieder. Die installCode()-Routine ruft den Kreuzlinker auf, um den Maschinencode für den DSP zu linken und den gelinkten Code zu laden. Die loadParameters()-Routine weist die Bohne an, den Maschinencode zu untersuchen und seine Attribute zu bestimmen. Die getCodesize()- und getCodetype()-Routinen übertragen die Attribute zum anfordernden Applet.
  • Obwohl die ausführliche Beschreibung der Erfindung auf bestimmte beispielhafte Ausführungsformen gerichtet gewesen ist, werden für die Fachleute auf dem Gebiet sowohl verschiedene Modifikationen dieser Ausführungsformen als auch alternative Ausführungsformen naheliegen. Die Erfindung umfasst alle Modifikationen oder alternative Ausführungsformen, die in den Umfang der Ansprüche fallen.

Claims (10)

  1. Mobile elektronische Vorrichtung, mit: einem oder mehreren Coprozessoren (16), wovon jeder eine Funktionalität hat, die dynamisch geändert werden kann; einem Host-Prozessorsystem (12) zum Ausführen: eines dynamischen Kreuzkompilierers (80), um Quellcode zu empfangen und um den Quellcode in eine Maschinencode-Routine für einen aus dem einen oder den mehreren Coprozessoren ausgewählten Ziel-Coprozessor zu kompilieren; und eines dynamischen Kreuzlinkers (82), um Adressen in der Maschinencode-Routine aufzulösen und die Maschinencode-Routine zu dem Ziel-Coprozessor herunterzuladen; und einer Schaltungsanordnung (18) für die Kommunikation zwischen dem Host-Prozessorsystem und den Coprozessoren.
  2. Mobile elektronische Vorrichtung nach Anspruch 1, bei der den Coprozessoren Speicher zum Speichern von Tasks zugewiesen sind.
  3. Mobile elektronische Vorrichtung nach Anspruch 2, bei der der Host-Prozessor einen verfügbaren Ort in dem dem Ziel-Coprozessor zugeordneten Speicher zum Speichern der Maschinencode-Routine bestimmt.
  4. Mobile elektronische Vorrichtung nach einem vorhergehenden Anspruch, bei der der Host-Prozessor den Code in nicht gelinkten Maschinencode für den Ziel-Coprozessor kompiliert.
  5. Mobile elektronische Vorrichtung nach Anspruch 4, wenn abhängig von Anspruch 3, bei der der dynamische Kreuzlinkers Adressen in der Maschinencode-Routine in Reaktion auf den verfügbaren Ort auflöst.
  6. Verfahren zum Steuern einer mobilen elektronischen Vorrichtung, die ein Host-Prozessorsystem (12) und einen oder mehrere Coprozessoren (16) umfasst, wobei jeder Coprozessor eine Funktionalität hat, die dynamisch geändert werden kann, wobei das Verfahren umfasst: in dem Host-Prozessorsystem (12): Ausführen eines dynamischen Kreuzkompilierers (80), um Quellcode zu empfangen und um den Quellcode in eine Maschinencode-Routine für einen Ziel-Coprozessor zu kompilieren; und Ausführen eines dynamischen Kreuzlinkers (82), um Adressen in der Maschinencode-Routine aufzulösen und die Maschinencode-Routine zu dem Ziel-Coprozessor herunterzuladen; Ausführen der Maschinencode-Routine in dem Ziel-Coprozessor; und Kommunizieren zwischen dem Host-Prozessorsystem und dem Ziel-Coprozessor.
  7. Verfahren nach Anspruch 6, das ferner den Schritt des Bestimmens eines verfügbaren Ortes in einem dem Ziel-Coprozessor zugeordneten Speicher zum Speichern der Maschinencode-Routine umfasst.
  8. Verfahren nach Anspruch 6 oder Anspruch 7, bei dem der Schritt des Ausführens des dynamischen Kreuzkompilierers den Schritt des Kompilierens des Quellcodes in nicht gelinkten Maschinencode umfasst.
  9. Verfahren nach Anspruch 8, wenn abhängig von Anspruch 7, bei dem der Schritt des Ausführens eines dynamischen Kreuzlinkers den Schritt des Auflösens von Adressen in dem nicht gelinkten Maschinencode in Reaktion auf den verfügbaren Ort umfasst.
  10. Verfahren nach einem der Ansprüche 6 bis 9, das ferner den Schritt des Auswählens eines von mehreren Coprozessoren als den Ziel-Coprozessor umfasst.
DE69838540T 1997-12-22 1998-12-16 Mobilkommunikationssystem Expired - Lifetime DE69838540T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US995600 1992-12-14
US08/995,600 US6029000A (en) 1997-12-22 1997-12-22 Mobile communication system with cross compiler and cross linker

Publications (2)

Publication Number Publication Date
DE69838540D1 DE69838540D1 (de) 2007-11-22
DE69838540T2 true DE69838540T2 (de) 2008-07-10

Family

ID=25541990

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69838540T Expired - Lifetime DE69838540T2 (de) 1997-12-22 1998-12-16 Mobilkommunikationssystem

Country Status (3)

Country Link
US (1) US6029000A (de)
EP (1) EP0924612B1 (de)
DE (1) DE69838540T2 (de)

Families Citing this family (107)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6138271A (en) * 1996-06-26 2000-10-24 Rockwell Technologies, Llc Operating system for embedded computers
US6960133B1 (en) * 2000-08-28 2005-11-01 Igt Slot machine game having a plurality of ways for a user to obtain payouts based on selection of one or more symbols (power pays)
EP0902365B1 (de) * 1997-09-09 2003-11-12 Motorola Semiconducteurs S.A. Verfahren und System zum Ausführen von Befehlen in einem Mikroprozessor
US6324574B1 (en) * 1997-11-07 2001-11-27 International Business Machines Corporation Relay server for unsigned applets
US6295645B1 (en) * 1997-12-22 2001-09-25 Texas Instruments Incorporated Method and apparatus for providing downloadable functionality to an embedded coprocessor
US8489860B1 (en) * 1997-12-22 2013-07-16 Texas Instruments Incorporated Mobile electronic device having a host processor system capable of dynamically canging tasks performed by a coprocessor in the device
DE69817333T2 (de) * 1998-06-05 2004-06-09 International Business Machines Corp. Verfahren und Vorrichtung zum Laden von Befehlskodes in einen Speicher und zum Verbinden dieser Befehlskodes
US6295638B1 (en) * 1998-07-30 2001-09-25 International Business Machines Corporation Method and apparatus for loading native object code in data processing system
US6604196B1 (en) * 1998-08-18 2003-08-05 International Business Machines Corporation Apparatus and method for component role fulfillment based on environment context
US6128011A (en) * 1998-08-31 2000-10-03 Sony Corporation Of Japan Cross-platform digital signal processing designs using Java and C
US6363472B1 (en) * 1998-09-03 2002-03-26 Telefonaktiebolaget L M Ericsson (Publ) Method and system for minimizing effect of replacing programming languages in telephony systems
US20050149694A1 (en) * 1998-12-08 2005-07-07 Mukesh Patel Java hardware accelerator using microcode engine
FR2802321A1 (fr) * 1999-12-09 2001-06-15 Ass Pour La Promotion De La Mi Processeur configurable par l'utilisateur
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
US7051071B2 (en) * 2000-02-16 2006-05-23 Bea Systems, Inc. Workflow integration system for enterprise wide electronic collaboration
AU2001247742A1 (en) * 2000-04-12 2001-10-30 Microsoft Corporation Method and system for accepting precompiled information
US7155606B1 (en) 2000-04-12 2006-12-26 Microsoft Corporation Method and system for accepting preverified information
US6959330B1 (en) * 2000-05-16 2005-10-25 Palmsource, Inc. Sync-time read only memory image binding for limited resource devices
US6769985B1 (en) 2000-05-31 2004-08-03 Igt Gaming device and method for enhancing the issuance or transfer of an award
US7699699B2 (en) 2000-06-23 2010-04-20 Igt Gaming device having multiple selectable display interfaces based on player's wagers
US7695363B2 (en) * 2000-06-23 2010-04-13 Igt Gaming device having multiple display interfaces
US7630721B2 (en) 2000-06-27 2009-12-08 Ortiz & Associates Consulting, Llc Systems, methods and apparatuses for brokering data between wireless devices and data rendering devices
US7812856B2 (en) 2000-10-26 2010-10-12 Front Row Technologies, Llc Providing multiple perspectives of a venue activity to electronic wireless hand held devices
US6986052B1 (en) * 2000-06-30 2006-01-10 Intel Corporation Method and apparatus for secure execution using a secure memory partition
US6766353B1 (en) 2000-07-11 2004-07-20 Motorola, Inc. Method for authenticating a JAVA archive (JAR) for portable devices
US6892324B1 (en) * 2000-07-19 2005-05-10 Broadcom Corporation Multi-channel, multi-service debug
EP1182569B8 (de) * 2000-08-21 2011-07-06 Texas Instruments Incorporated TLB-Ver- und Entriegelungsoperation
EP1213650A3 (de) * 2000-08-21 2006-08-30 Texas Instruments France Auf aktueller Aufgabe basierte Prioritätsarbitrierung und Speicherverwaltungseinheit
US6935955B1 (en) 2000-09-07 2005-08-30 Igt Gaming device with award and deduction proximity-based sound effect feature
US6739973B1 (en) * 2000-10-11 2004-05-25 Igt Gaming device having changed or generated player stimuli
US20020116633A1 (en) * 2001-01-19 2002-08-22 Takuya Kobayashi Data processor
US6606690B2 (en) 2001-02-20 2003-08-12 Hewlett-Packard Development Company, L.P. System and method for accessing a storage area network as network attached storage
US6749502B2 (en) * 2001-03-21 2004-06-15 Igt Gaming device having a multi-characteristic matching game
US7571389B2 (en) * 2001-05-31 2009-08-04 International Business Machines Corporation System, computer-readable storage device, and method for combining the functionality of multiple text controls in a graphical user interface
US7562306B2 (en) * 2001-05-31 2009-07-14 International Business Machines Corporation System and method for reducing memory use associated with the graphical representation of a list control
US20020191018A1 (en) * 2001-05-31 2002-12-19 International Business Machines Corporation System and method for implementing a graphical user interface across dissimilar platforms yet retaining similar look and feel
US20020194293A1 (en) * 2001-06-13 2002-12-19 Osman John H. Communications system and method therefor
US6789254B2 (en) 2001-06-21 2004-09-07 International Business Machines Corp. Java classes comprising an application program interface for platform integration derived from a common codebase
US6865733B2 (en) 2001-06-21 2005-03-08 International Business Machines Corp. Standardized interface between Java virtual machine classes and a host operating environment
US7334228B2 (en) * 2001-07-27 2008-02-19 International Business Machines Corporation Runtime-resource management
GB0120611D0 (en) * 2001-08-24 2001-10-17 Igt Uk Ltd Video display systems
US7901291B2 (en) 2001-09-28 2011-03-08 Igt Gaming device operable with platform independent code and method
US6848996B2 (en) * 2001-10-15 2005-02-01 Igt Gaming device with sound recording changes associated with player inputs
US7708642B2 (en) * 2001-10-15 2010-05-04 Igt Gaming device having pitch-shifted sound and music
US7666098B2 (en) 2001-10-15 2010-02-23 Igt Gaming device having modified reel spin sounds to highlight and enhance positive player outcomes
US7831655B2 (en) * 2001-10-18 2010-11-09 Bea Systems, Inc. System and method for implementing a service adapter
US7552222B2 (en) * 2001-10-18 2009-06-23 Bea Systems, Inc. Single system user identity
DE10158774A1 (de) * 2001-11-30 2003-06-18 Infineon Technologies Ag Basisband-Chip mit integrierter Echtzeit-Betriebssystem-Funktionalität und Verfahren zum Betreiben eines Basisband-Chips
US7516447B2 (en) * 2002-02-22 2009-04-07 Bea Systems, Inc. Methods and apparatus for building, customizing and using software abstractions of external entities
US7424717B2 (en) * 2002-05-01 2008-09-09 Bea Systems, Inc. Systems and methods for business process plug-in development
US7155438B2 (en) * 2002-05-01 2006-12-26 Bea Systems, Inc. High availability for event forwarding
US8135772B2 (en) 2002-05-01 2012-03-13 Oracle International Corporation Single servlets for B2B message routing
US7257645B2 (en) * 2002-05-01 2007-08-14 Bea Systems, Inc. System and method for storing large messages
US7526519B2 (en) * 2002-05-01 2009-04-28 Bea Systems, Inc. High availability application view deployment
US7493628B2 (en) * 2002-05-02 2009-02-17 Bea Systems, Inc. Shared common connection factory
US7676538B2 (en) * 2002-05-02 2010-03-09 Bea Systems, Inc. Systems and methods for application view transactions
US7222148B2 (en) * 2002-05-02 2007-05-22 Bea Systems, Inc. System and method for providing highly available processing of asynchronous service requests
US7484224B2 (en) * 2002-05-02 2009-01-27 Bae Systems, Inc. Adapter deployment without recycle
US7627631B2 (en) * 2002-05-02 2009-12-01 Bea Systems, Inc. Systems and methods for collaborative business plug-ins
US7350184B2 (en) * 2002-05-02 2008-03-25 Bea Systems, Inc. System and method for enterprise application interactions
US6988099B2 (en) * 2002-06-27 2006-01-17 Bea Systems, Inc. Systems and methods for maintaining transactional persistence
EP1391820A3 (de) * 2002-07-31 2007-12-19 Texas Instruments Incorporated Gleichzeitige Taskausführung in einer Mehrfachprozessorumgebung mit einzelnem Betriebssystem
TWI324309B (en) * 2002-08-26 2010-05-01 Interdigital Tech Corp Communication circuit
US6996699B2 (en) * 2002-09-10 2006-02-07 Microsoft Corporation Secondary processor execution kernel framework
US7143106B2 (en) * 2002-09-24 2006-11-28 International Business Machines Corporation Reclaiming resources in response to forced state transitions
US7526798B2 (en) 2002-10-31 2009-04-28 International Business Machines Corporation System and method for credential delegation using identity assertion
US20050204351A1 (en) * 2002-11-18 2005-09-15 James Jiang Dynamic addressing (DA) using a centralized DA Manager
EP1588230A4 (de) * 2003-01-10 2008-05-07 Nexaweb Technologies Inc System und verfahren zur netzwerkgestützten datenverarbeitung
US7210121B2 (en) * 2003-02-07 2007-04-24 Sun Microsystems, Inc. Method and system for generating first class citizen application implementing native software application wrapper
US7774697B2 (en) * 2003-02-25 2010-08-10 Bea Systems, Inc. System and method for structuring distributed applications
US7752599B2 (en) * 2003-02-25 2010-07-06 Bea Systems Inc. Systems and methods extending an existing programming language with constructs
US7293038B2 (en) * 2003-02-25 2007-11-06 Bea Systems, Inc. Systems and methods for client-side filtering of subscribed messages
US7584474B2 (en) * 2003-02-25 2009-09-01 Bea Systems, Inc. Systems and methods for transaction chaining
US20050022164A1 (en) * 2003-02-25 2005-01-27 Bea Systems, Inc. Systems and methods utilizing a workflow definition language
US8032860B2 (en) 2003-02-26 2011-10-04 Oracle International Corporation Methods for type-independent source code editing
US7650276B2 (en) * 2003-02-26 2010-01-19 Bea Systems, Inc. System and method for dynamic data binding in distributed applications
US7539985B2 (en) * 2003-02-26 2009-05-26 Bea Systems, Inc. Systems and methods for dynamic component versioning
US7707564B2 (en) * 2003-02-26 2010-04-27 Bea Systems, Inc. Systems and methods for creating network-based software services using source code annotations
US7076772B2 (en) * 2003-02-26 2006-07-11 Bea Systems, Inc. System and method for multi-language extensible compiler framework
US7299454B2 (en) 2003-02-26 2007-11-20 Bea Systems, Inc. Method for multi-language debugging
US7636722B2 (en) * 2003-02-28 2009-12-22 Bea Systems, Inc. System and method for describing application extensions in XML
US20050044173A1 (en) * 2003-02-28 2005-02-24 Olander Daryl B. System and method for implementing business processes in a portal
US7444620B2 (en) * 2003-02-28 2008-10-28 Bea Systems, Inc. Systems and methods for a common runtime container framework
US20040225995A1 (en) * 2003-02-28 2004-11-11 Kyle Marvin Reusable software controls
US7650592B2 (en) * 2003-03-01 2010-01-19 Bea Systems, Inc. Systems and methods for multi-view debugging environment
US7789748B2 (en) * 2003-09-04 2010-09-07 Igt Gaming device having player-selectable music
US7105736B2 (en) * 2003-09-09 2006-09-12 Igt Gaming device having a system for dynamically aligning background music with play session events
US8381207B2 (en) * 2003-12-02 2013-02-19 International Business Machines Corporation Script generation engine and mapping semantic models for target platform
CA2452077A1 (en) * 2003-12-03 2005-06-03 Daniel A. Rose Verification of stream oriented locale files
US7516451B2 (en) * 2004-08-31 2009-04-07 Innopath Software, Inc. Maintaining mobile device electronic files including using difference files when upgrading
US8043155B2 (en) 2004-10-18 2011-10-25 Igt Gaming device having a plurality of wildcard symbol patterns
US20060095898A1 (en) * 2004-10-28 2006-05-04 International Business Machines Corporation Method for integrating multiple object files from heterogeneous architectures into a set of files
US8024083B2 (en) * 2005-06-30 2011-09-20 Chenn Ieon C Cellphone based vehicle diagnostic system
US9824507B2 (en) * 2005-06-30 2017-11-21 Innova Electronics Corporation Mobile device based vehicle diagnostic system
US7982739B2 (en) 2005-08-18 2011-07-19 Realnetworks, Inc. System and/or method for adjusting for input latency in a handheld device
US20070174818A1 (en) * 2005-08-18 2007-07-26 Pasula Markus I Method and apparatus for generating application programs for multiple hardware and/or software platforms
US8346223B1 (en) 2005-11-07 2013-01-01 Flurry, Inc. Delivering a customized service to a mobile device using a link
US20070201270A1 (en) * 2005-12-30 2007-08-30 Stmicroelectronics Pvt. Ltd. Read only memory device with bitline leakage reduction
US8591308B2 (en) * 2008-09-10 2013-11-26 Igt Gaming system and method providing indication of notable symbols including audible indication
CA2698066A1 (en) * 2009-07-31 2011-01-31 Nitobi Software Inc. System and method for remotely compiling multi-platform native applications for mobile devices
US8460090B1 (en) 2012-01-20 2013-06-11 Igt Gaming system, gaming device, and method providing an estimated emotional state of a player based on the occurrence of one or more designated events
US8740689B2 (en) 2012-07-06 2014-06-03 Igt Gaming system and method configured to operate a game associated with a reflector symbol
US9245407B2 (en) 2012-07-06 2016-01-26 Igt Gaming system and method that determines awards based on quantities of symbols included in one or more strings of related symbols displayed along one or more paylines
US9192857B2 (en) 2013-07-23 2015-11-24 Igt Beat synchronization in a game
US9947170B2 (en) 2015-09-28 2018-04-17 Igt Time synchronization of gaming machines
US11574510B2 (en) 2020-03-30 2023-02-07 Innova Electronics Corporation Multi-functional automotive diagnostic tablet with interchangeable function-specific cartridges
US11651628B2 (en) 2020-04-20 2023-05-16 Innova Electronics Corporation Router for vehicle diagnostic system

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5127103A (en) * 1987-10-14 1992-06-30 North American Philips Corporation Real-time tracing of dynamic local data in high level languages in the presence of process context switches
JP2834837B2 (ja) * 1990-03-30 1998-12-14 松下電工株式会社 プログラマブルコントローラ
US5339422A (en) * 1991-03-07 1994-08-16 Digital Equipment Corporation System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment
CA2154464C (en) * 1993-02-01 1999-06-22 Bruce S. Allen A method and apparatus for audio teleconferencing a plurality of phone channels
CA2102089C (en) * 1993-10-29 1999-05-25 David M. Gillies Recompilation of computer programs for enhanced optimization
DE69530752T2 (de) * 1995-02-17 2004-03-11 Agfa-Gevaert System und Verfahren der Identifizierung zur Verwendung im Felde der digitalen Röntgenphotographie
US5680542A (en) * 1995-06-07 1997-10-21 Motorola, Inc. Method and apparatus for synchronizing data in a host memory with data in target MCU memory
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method

Also Published As

Publication number Publication date
EP0924612A2 (de) 1999-06-23
EP0924612A3 (de) 2003-06-11
US6029000A (en) 2000-02-22
EP0924612B1 (de) 2007-10-10
DE69838540D1 (de) 2007-11-22

Similar Documents

Publication Publication Date Title
DE69838540T2 (de) Mobilkommunikationssystem
DE69836469T2 (de) Verfahren und Gerät zur Ausbreitung eines Sicherheitsmodells zu arteigenem Code
DE19983768B4 (de) Verfahren zum Ausführen von für verschiedene Befehlssatzarchitekturen geschriebener Firmware
DE69735343T2 (de) System, Verfahren und Vorrichtung zum direkten Ausführen eines architekturunabhängigen binären Programms
DE60006410T2 (de) Verfahren und system zum verteilen von objektorientierten rechnerprogrammen
EP0924611B1 (de) Verfahren und geraet fuer einen koprozessor
DE69911468T2 (de) Verfahren zum direkten inlinen von virtuellen anrufen ohne on-stack-vertretung
DE69724322T2 (de) Verfahren und Anordnung zum frühzeitigen Einfügen von Assemblercode zwecks Optimierung
DE60018505T2 (de) Vertraute Überprüfung von Rechnerprogrammodulen
DE69727177T2 (de) Emulation von asynchronen Signalen mit Verzweigungsmechanismus
CN108139921A (zh) 仿真器的性能优化
DE112007001466T5 (de) Behandlung von Adressübersetzungen und Ausnahmen einer Heterogenen Ressource
EP0930793A1 (de) Mobiles Gerät mit meheren Prozessoren
DE112005003216T5 (de) System und Verfahren für Steuerregister, auf die über private Rechenoperationen zugegriffen wird
US20030046358A1 (en) Multiple image dynamic bind and load procedure for a multi-processor
Armand Give a process to your drivers
DE69911104T2 (de) Statische Bindung von dynamisch abgesendeten Anrufen in Anwesenheit von dynamischer Verknüpfung und Ladung
DE60316804T2 (de) Verfahren und vorrichtung zum einschreiben von daten in einen nicht flüchtigen speicher
JPH03208159A (ja) マルチプロセッサコンピュータシステム使用方法
DE69911660T2 (de) Laden von objektorientierten rechnerprogrammen
Kent et al. Hardware/software co-design of a Java virtual machine
EP0803801B1 (de) Verfahren zum Mischen von Objective-C und C++ Objekten
CN109597952B (zh) 网页信息处理方法、系统、电子设备和存储介质
JP2000298592A (ja) プログラムコンポーネントアクセス装置及びプログラムコンポーネントアクセス方法
US7958330B2 (en) Compiler program, compiler program recording medium, compile method, and program processing system

Legal Events

Date Code Title Description
8364 No opposition during term of opposition