Saturday 25 March 2017

0b0000 Binary Options

BPC ndash Ein Binärprioritäts-Countdown-Protokoll Ivan Kedo a. . Autor Vitae, Julije Oegovi b. Verfasser Vitae, Ante Kristi b. Vitae a Universitätsklinik für Berufswissenschaften, Universität Split, 21000 Split, Kroatien b Fakultät für Elektrotechnik, Maschinenbau und Schiffbau, Universität Split, 21000 Split, Kroatien Erhalten 19. Dezember 2011, Überarbeitet 18. Juli 2012, Akzeptiert 14. August 2012, Online verfügbar 12 September 2012In modernen drahtlosen Ad-hoc-Netzwerken, mit einer hohen Geschwindigkeit PHY, bedeutet jede Kollision einen erheblichen Verlust an Nutzbandbreite. In den letzten Jahren wurden verschiedene Binärkonkurrenzprotokolle eingeführt, um dieses Problem zu lösen. In dieser Arbeit schlagen wir ein neuartiges binäres Konkurrenzprotokoll vor, das als Binärprioritäts-Countdown (BPC) bezeichnet wird, dessen Ziel es ist, Kollisionen sowie Konfliktzeit zu reduzieren. BPC verwendet einen neuen Prioritäts-Countdown-Mechanismus, der die Effizienz des binären Countdowns ausnutzt, aber der Prioritäts-Countdown-Prozess ist nicht auf eine einzelne binäre Countdown-Runde beschränkt. Auf diese Weise wird der Prioritätsraum nicht durch die Länge der binären Countdownrunde definiert, wie in anderen in der Literatur vorgeschlagenen Binärzählprotokollen, und beliebige Medienzugriffsprioritäten können durch mehrere binäre Countdownrunden dekrementiert werden, falls dies erforderlich ist. Die Fähigkeit eines neuen Prioritäts-Countdown-Mechanismus, um jede Prioritätszahl herunterzählen, ohne die Länge eines binären Countdowns zu ändern, ermöglicht eine unabhängige Verwaltung des Prioritätsraums. Dieses ldquoindependencerdquo des Prioritätsraums führt zu neuen Optimierungs - und Anpassungsmöglichkeiten. Der Kollisions-Memory-Effekt wird erkannt und beschrieben. BPC-Protokoll zeigt die Verbindung zwischen unären, binären und Ziffer Konkurrenz Protokolle. Alle drei Gruppen von Protokollen können nun als Mitglieder der gleichen Klasse von Konkurrenzalgorithmen betrachtet werden. Vorläufige Simulationsergebnisse werden gezeigt. MAC Wireless Ad hoc Binärer Countdown Prioritätszählung Konkurrenzalgorithmen Entsprechender Autor. Tel. 385 95 8765 175. Copyright-Kopie 2012 Elsevier B. V. Alle Rechte vorbehalten. Ivan Ked382o erhielt dipl. Werden. Diplom in Elektrotechnik der Fakultät für Elektrotechnik, Maschinenbau und Schiffbau, Universität Split, Kroatien, 2006. Während des Studiums arbeitete er fünf Monate lang in GN Resound RampD, Dänemark. Seit 2007 ist er als wissenschaftlicher Mitarbeiter und als externer Mitarbeiter an der Fakultät für Elektrotechnik, Maschinenbau und Schiffbau tätig. Seine Forschungsinteressen umfassen drahtlose Ad-hoc-Netzwerke, verteilte drahtlose MAC-Protokolle und integrierte heterogene drahtlose Systeme. Derzeit ist er auf Ph. D. An der Fakultät für Elektrotechnik, Maschinenbau und Schiffbau. Julije O382egovi263 ist Professor am Institut für Elektronik, Fakultät für Elektrotechnik, Maschinenbau und Schiffbau (FESB), Universität Split, Split, Kroatien. Er erhielt seinen BSc 1977, seinen MSc-Abschluss in Telekommunikation von FER Zagreb 1981 und sein Diplom in Elektrotechnik von FESB Split im Jahr 1997. Ab 1977 verbrachte er zwei Jahre in der Industrie als Konstrukteur und 1979 trat er in die FESB ein. Seine Forschungsinteressen umfassen Computernetze, Kommunikationsprotokolle, Flusskontrolle und QoS-Provisioning. Er ist Rezensent bei mehreren internationalen Fachzeitschriften und Konferenzen auf dem Gebiet der Computernetzwerke. Ante Kristi263 erhielt dipl. Werden. Diplom in Elektrotechnik der Fakultät für Elektrotechnik, Maschinenbau und Schiffbau, Universität Split, Kroatien. Im Jahr 2007 arbeitete er in der Siemens AG bei der Entwicklung des Betriebssystems für Chipkarten (CardOS). Seit 2008 ist er als wissenschaftlicher Mitarbeiter an der Fakultät für Elektrotechnik, Maschinenbau und Schiffbau, Universität von Split tätig. Im Bereich der Computernetze. Seine Forschungsinteressen umfassen QoS-Unterstützung in drahtgebundenen und drahtlosen Netzwerken, aktives Warteschlangenmanagement und Überlastkontrolle im Zugangsnetzwerk. XK-1A Development Board Tutorial Einführung Das XK-1A ist ein kostengünstiges Entwicklungsboard basierend auf dem XMOS XS1-L1 Gerät. Es enthält eine einzige L1, vier LEDs, zwei Drucktasten, SPI-Flash-Speicher, zwei 16-polige IDC-Anschlüsse und eine XSYS-Debugging-Schnittstelle. Dieses Tutorial zeigt Ihnen, wie Sie einige einfache XC-Programme schreiben, die die XK-1A-Board-Komponenten steuern und reagieren. In diesem Tutorial erfahren Sie, wie Sie: beleuchten die LEDs blinken die LEDs mit einer festen Rate blinken die LEDs in der Folge reagieren auf eine Taste drücken Sie verbinden mehrere Boards zusammen Beleuchten einer LED Dieser Teil des Tutorials zeigt Ihnen, wie Sie eine LED an Ihrem XK beleuchten -1A über einen XC-Port und eine Output-Anweisung. Erstellen eines Projekts Bevor Sie Code schreiben, benötigen Sie ein Projekt zum Speichern Ihrer Dateien. Um ein neues Projekt zu erstellen, gehen Sie folgendermaßen vor: Im Projektnamen. Geben Sie einen Namen wie beleuchtet ein. In der Zielhardware. Wählen Sie die Option XK-1A Development Board. In Anwendungssoftware. Wählen Sie die Option XC-Datei leeren. Klicken Sie auf Fertig stellen. Das XDE erstellt ein neues Projekt, fügt dem Projekt eine leere Quelldatei hinzu und öffnet es im Editor. Anwendungscode hinzufügen Das untenstehende Programm beleuchtet eine LED auf einem XK-1A. Kopieren Sie den Code und fügen Sie ihn in Ihr Projekt ein, und wählen Sie dann Datei speichern (), um die Änderungen in der Datei zu speichern. Überprüfen Sie den Code Überprüfen Sie den Code im Editor. Die Deklarations-Out-Port-LED XS1PORT4F deklariert eine Ausgabe-Port namens LED. Die sich auf den 4-Bit-Port 4F bezieht. Beim XK-1A sind die I / O-Pins von Port 4F mit den LEDs LED0, LED1, LED2 und LED3 verbunden. XC Input und Output-Anweisungen machen es leicht, E / A-Operationen an Ports auszudrücken. Die Anweisung bewirkt, dass der Wert, der rechts von lt: angegeben wird, an den Port ausgegeben wird, der links (led) angegeben ist. Der Port treibt dann LED0 hoch und die anderen LEDs niedrig, was dazu führt, dass LED0 gelb leuchtet und die anderen LEDs ausgeschaltet bleiben. Die leere while-Schleife verhindert das Beenden des Programms, wodurch sichergestellt wird, dass die LED weiterhin leuchtet. Erstellen und Ausführen des Projekts Gehen Sie folgendermaßen vor, um Ihr Projekt zu erstellen und auszuführen: Im Projekt-Explorer. Klicken Sie auf Ihr Projekt, um es auszuwählen, und wählen Sie dann das Menü Projekt Projekt (). Das XDE zeigt seinen Fortschritt in der Konsole an. Wenn der Build abgeschlossen ist, fügt die XDE die kompilierte Binärdatei zum Unterordner bin / Debug hinzu. Wählen Sie Run Run Configurations. Doppelklicken Sie im Dialogfeld Run Configurations im linken Fenster auf XCore Application. Im rechten Bereich unter Name. Geben Sie den Namen leuchten. Im Projekt. Dass Ihr Projekt angezeigt wird. Wenn nicht, klicken Sie auf Durchsuchen, um das Dialogfeld Projektauswahl zu öffnen, Ihr Projekt auszuwählen, und dann auf OK zu klicken. In C / C Anwendung. Klicken Sie auf Projekt suchen, um das Dialogfeld Programmauswahl zu öffnen, wählen Sie Ihre Anwendungsbinärdatei aus, und klicken Sie dann auf OK. In Geräteoptionen. In Ausführen. Wählen Sie die Option Hardware. Und in Target. Dass die Option 8220XMOS XTAG-2, die an L108221 angeschlossen ist, ausgewählt ist. Wenn Ihre Hardware nicht angezeigt wird, stellen Sie sicher, dass Ihr XK-1A mit Ihrem PC verbunden ist, und klicken Sie dann auf Liste aktualisieren. Klicken Sie auf Ausführen, um die Konfiguration zu speichern und auszuführen. Das XDE lädt die Binärdatei auf Ihrem XK-1A und zeigt dessen Fortschritt in der Konsole an. Wenn die Binärdatei geladen wird, wird die Konsole gelöscht. Überprüfen Sie auf Ihrem XK-1A, dass LED0 gelb leuchtet. In der Konsole. Klicken Sie auf die Schaltfläche Beenden (), um die Ausführung Ihrer Anwendung zu beenden. Um diesen Teil des Tutorials auszuführen, führen Sie die folgenden Schritte aus: Ändern Sie Ihre Anwendung so, dass sie alle vier LEDs beleuchtet. Sie sollten die Werteausgabe auf die Port-LED ändern, so dass alle vier LEDs hoch getrieben werden. Klicken Sie auf die Schaltfläche Ausführen (), um Ihre letzte Ausführungskonfiguration neu zu laden. Die XDE stellt fest, dass der Quellcode aktualisiert und neu erstellt wurde, wobei der Fortschritt in der Konsole angezeigt wird. Wenn Ihre Anwendung Fehler enthält, zeigt das XDE einen Dialog an, in dem Sie gefragt werden, ob die Anwendung weiterhin gestartet werden soll. Klicken Sie auf Nein. Suchen Sie den ersten Fehler in der Konsole und doppelklicken Sie darauf, um zu der beanstandeten Zeile im Editor zu wechseln. Wenn Sie alle Fehler behoben haben, führen Sie die Anwendung erneut aus. Überprüfen Sie auf dem XK-1A, ob alle vier LEDs leuchten, und klicken Sie dann auf die Schaltfläche Beenden (), um die Ausführung der Anwendung zu beenden. Blinken einer LED Dieser Teil des Tutorials zeigt Ihnen, wie Sie eine LED mit einer festen Frequenz mit einem XC-Timer und einer Eingangsanweisung blinken. Erstellen eines neuen Projekts Das XDE erstellt ein neues Projekt, fügt dem Projekt eine leere Quelldatei hinzu und öffnet es im Editor. Anwendungscode hinzufügen Das folgende Programm blinkt eine einzelne LED auf einem XK-1A. Kopieren Sie den Code und fügen Sie ihn in Ihr Projekt ein, und wählen Sie dann Datei speichern (), um die Änderungen in der Datei zu speichern. Überprüfen Sie den Code Überprüfen Sie den Code im Editor. Die Deklaration deklariert eine Variable namens tmr. Und weist einen verfügbaren Hardware-Zeitgeber zu. Der L1 stellt 10 Timer bereit, die verwendet werden können, um zu bestimmen, wann ein Ereignis eintritt, oder um die Ausführung bis zu einem bestimmten Zeitpunkt zu verzögern. Jeder Timer enthält einen 32-Bit-Zähler, der bei 100MHz inkrementiert wird und dessen Wert jederzeit eingegeben werden kann. Gibt den Wert des tmr 8216s-Zählers in die Variable t ein. Nach dem Aufzeichnen der aktuellen Zeit erhöht die Anweisung diesen Wert um die erforderliche Verzögerung und die Anweisung tmr wenn timerafter (t): gt void Verzögerungen, die einen Wert eingeben, bis die angegebene Zeit erreicht ist. Der Eingabewert ist nicht erforderlich, der als Eingang für void ausgedrückt wird. Erstellen und Ausführen des Projekts Gehen Sie folgendermaßen vor, um Ihr Projekt zu erstellen und auszuführen: Im Projekt-Explorer. Klicken Sie auf Ihr Projekt, um es auszuwählen, und wählen Sie dann das Menü Projekt Projekt (). Das XDE erstellt Ihr Projekt und zeigt seinen Fortschritt in der Konsole an. Wenn der Build abgeschlossen ist, fügt die XDE die kompilierte Binärdatei zum Anwendungs-Unterordner bin / Debug hinzu. Erstellen Sie eine neue Ausführungskonfiguration für Ihre Anwendung mit dem Namen flash. Und führen Sie es aus. Gehen Sie folgendermaßen vor: Wählen Sie Run Run Configurations. Doppelklicken Sie im Dialogfeld Run Configurations im linken Fenster auf XCore Application. Im rechten Bereich unter Name. Geben Sie den Namen blinken. Im Projekt. Dass Ihr Projekt angezeigt wird. Wenn nicht, klicken Sie auf Durchsuchen, um das Dialogfeld Projektauswahl zu öffnen, Ihr Projekt auszuwählen, und dann auf OK zu klicken. Da es jetzt zwei Anwendungen in Ihrem Projekt gibt, kann das XDE nicht automatisch eine auswählen. Zur Auswahl in der C / C-Anwendung. Klicken Sie auf Projekt suchen, um das Dialogfeld Programmauswahl zu öffnen, wählen Sie Ihre Anwendungsbinärdatei aus, und klicken Sie dann auf OK. In Geräteoptionen. In Ausführen. Wählen Sie die Option Hardware. Und in Target. Dass die mit L108221 verbundene Option 8220XMOS XTAG-2 ausgewählt ist. Wenn Sie Ihre vorherige Anwendung nicht beendet haben, wird Ihre Hardware möglicherweise als 8220XMOS XTAG-2 angezeigt, der mit None8221 verbunden ist. Klicken Sie auf Ausführen, um die Konfiguration zu speichern und auszuführen. Das XDE lädt die Binärdatei auf Ihrem XK-1A und zeigt dessen Fortschritt in der Konsole an. Wenn die Binärdatei geladen wird, wird die Konsole gelöscht. Überprüfen Sie auf Ihrem XK-1A, ob LED0 blinkt, und klicken Sie dann auf die Schaltfläche Beenden (), um die Ausführung Ihrer Anwendung zu beenden. Zwischen Projekten wechseln Mit der Schaltfläche Run () können Sie zwischen Projekten umschalten. Gehen Sie folgendermaßen vor, um diesen Teil des Tutorials abzuschließen: Klicken Sie auf den Pfeil rechts neben der Schaltfläche Ausführen, und wählen Sie die Ausführungskonfiguration mit dem Namen Beleuchten aus. Überprüfen Sie auf dem XK-1A, dass alle vier LEDs leuchten. Klicken Sie auf den Pfeil rechts neben der Schaltfläche Ausführen und wählen Sie die Run-Konfiguration mit dem Namen flash aus. Überprüfen Sie auf dem XK-1A, ob LED0 blinkt. Ändern Sie die Quelle der blinkenden LED-Anwendung, um den Wert von FLASHPERIOD von 20000000 auf 40000000 zu ändern. Zum Erstellen und Ausführen klicken Sie einfach auf die Schaltfläche Ausführen. Das XDE startet die Konfiguration, die Sie zuletzt ausgewählt haben. Überprüfen Sie auf Ihrem XK-1A, dass LED0 mit der halben Rate blinkt, die es zuvor blinkt, und klicken Sie dann auf die Schaltfläche Beenden (), um die Ausführung der Anwendung zu beenden. Führen Sie die folgenden Schritte aus, um diesen Teil des Lernprogramms abzuschließen: Ändern Sie Ihre blinkende LED-Anwendung so, dass LED0 und LED1 geflasht werden, wobei LED0 doppelt so schnell wie LED1 blitzt. Sie sollten das folgende Muster an die Port-LED ausgeben. 0b0011, 0b0010, 0b0011, 0b0010, 0b0001, 0b0000, 0b0001 und 0b0000. Sie können ein Array von Integern definieren und es mit den Werten 0b0011, 0b0010, 0b0011, 0b0010, 0b0001, 0b0000, 0b0001 und 0b0000 initialisieren. Verwenden Sie dann eine Schleife, um diese Sequenz von Werten an den Port 4F auszugeben. Führen Sie Ihre Anwendung aus. Überprüfen Sie auf Ihrem XK-1A, dass die beiden LEDs mit unterschiedlichen Geschwindigkeiten blinken und klicken Sie dann auf die Schaltfläche Beenden (), um die Ausführung der Anwendung zu beenden. Blitz - und Zyklus-LEDs mit unterschiedlichen Raten Dieser Teil des Tutorials zeigt Ihnen, wie Sie eine LED blinkt, während Sie sie entlang der LEDs auf Ihrem XK-1A fahren. Erstellen einer Anwendung Das Programm unterhalb von Eingaben von einem von zwei Timern in einer Schleife. Bevor Sie mit dem nächsten Teil dieses Tutorials fortfahren, erstellen Sie mit diesem Code ein neues Projekt. Überprüfen Sie den Anwendungscode Sehen Sie sich den Anwendungscode im Editor an. Die erste Anweisung in main gibt den Wert des Timers tmrF in die Variable timeF ein. Und die zweite Anweisung gibt den Wert des Zeitgebers tmrC in die variable Zeit C ein. In der while-Schleife wartet die select-Anweisung darauf, dass der Eingang entweder tmrF oder tmrC bereit ist. Dann führt er die ausgewählte Eingabe durch und führt jeden Code aus, nachdem er bis zum Schlüsselwort brechen. Wenn mehr als ein Eingang zur gleichen Zeit bereit ist, wird nur einer in einer einzigen Iteration der Schleife ausgeführt, der andere Eingang wird bei der folgenden Iteration ausgewählt. Übung 1 Um diesen Teil des Lernprogramms abzuschließen, führen Sie die folgenden Aufgaben aus: Ändern Sie die Anwendung so, dass: an jedem Eingang von tmrC. Das Programm wechselt, die LED geflasht wird, Zyklus zwischen allen vier LED in der Reihenfolge. Auf jedem Eingang von tmrF. Wechselt das Programm den Zustand der aktuellen LED-Anzeige an und aus. Erstellen Sie Ihr Projekt, erstellen Sie eine neue Ausführungskonfiguration und führen Sie es aus. Gehen Sie wie folgt vor: Im Projekt-Explorer. Klicken Sie auf Ihr Projekt, um es auszuwählen, und wählen Sie dann das Menü Projekt Projekt (). Wenn Fehler in der Konsole gemeldet werden. Doppelklicken Sie auf einen Fehler, um ihn im Editor zu finden, den Fehler zu beheben und dann Ihre Anwendung neu zu erstellen. Wählen Sie Run Run Configurations. Doppelklicken Sie im Dialogfeld Run Configurations im linken Fenster auf XCore Application. Im rechten Bereich unter Name. Geben Sie einen Namen für die Ausführungskonfiguration ein. Im Projekt. Dass Ihr Projekt angezeigt wird. Wenn nicht, klicken Sie auf Durchsuchen, um das Dialogfeld Projektauswahl zu öffnen, Ihr Projekt auszuwählen, und dann auf OK zu klicken. In C / C Anwendung. Klicken Sie auf Projekt suchen, um das Dialogfeld Programmauswahl zu öffnen, wählen Sie Ihre Anwendungsbinärdatei aus, und klicken Sie dann auf OK. In Geräteoptionen. In Ausführen. Wählen Sie die Option Hardware. Und in Target. Dass die mit L108221 verbundene Option 8220XMOS XTAG-2 ausgewählt ist. Klicken Sie auf Ausführen, um die Konfiguration zu speichern und auszuführen. Das XDE lädt die Anwendungs-Binärdatei auf Ihrem XK-1A und zeigt dessen Fortschritt in der Konsole an. Wenn die Binärdatei geladen wird, wird die Konsole gelöscht. Überprüfen Sie auf dem XK-1A, dass eine blinkende LED zwischen den vier LEDs leuchtet, und klicken Sie dann auf die Schaltfläche Beenden (), um das Ausführen des Projekts zu beenden. Aufgabe 2 Führen Sie die folgenden Schritte aus, um diesen Teil des Lernprogramms zu vervollständigen: Fügen Sie der ausgewählten Anweisung, die auf die Taste 1 drückt, einen zusätzlichen Fall hinzu, indem Sie den String 8220pressed8221 auf der Konsole anzeigen und dann auf die Freigabe der Taste 1 warten und dann darauf warten Die Zeichenfolge 8220 freigegeben8221. Beachten Sie, dass Button 1 einen 1-Bit-Port hoch steuert. Wenn Sie die Taste drücken, wird der Antrieb gestoppt und die Ergebnisse wieder freigegeben. Sie können diese Bedingungen mithilfe der Eingangsbedingung pinseq (0) und pinseq (1) testen. Um eine Nachricht an die Konsole zu drucken, können Sie den Standard-C-Bibliotheksheader stdio. h einbinden und die Bibliotheksfunktion printf verwenden. Gehen Sie folgendermaßen vor: Geben Sie an der Oberseite Ihrer Quelldatei die Headerdatei stdio. h ein. Definieren Sie einen Eingabe-Port mit dem Namen but1 und initialisieren Sie ihn mit dem Wert XS1PORT1K. In der select - Anweisung fügen Sie die folgende case - Anweisung hinzu: case but1 if pinseq (0): gt void: Im Körper dieses Falles rufen Sie zuerst die Funktion printf auf, um die erste Meldung anzuzeigen, die dann von der Taste eingegeben wird Pin ist gleich 1 und ruft dann erneut printf auf, um die zweite Meldung anzuzeigen. Führen Sie Ihre Anwendung aus. Eine blinkende LED sollte zwischen den vier LEDs Ihres XK-1A wechseln. Stellen Sie sicher, dass durch Drücken und Halten der Taste BUT1 die Meldung 8220pressed8221 in der Konsole angezeigt wird und die LEDs nicht mehr blinken. Wenn Sie den Knopf loslassen, sollte die Meldung 8220released8221 angezeigt werden und die blinkende LED sollte weiterlaufen. Hinweis, dass Sie den Knopf möglicherweise nach unten drücken müssen, um den XK-1A fest zu betätigen. In der Konsole. Klicken Sie auf die Schaltfläche Beenden (), um die Ausführung Ihrer Anwendung zu beenden. Ausführen von Aufgaben gleichzeitig Dieser Teil des Tutorials zeigt Ihnen, wie Sie Aufgaben gleichzeitig auf verschiedenen Threads ausführen, indem Sie die XC-Par-Anweisung und die Kanalkommunikation verwenden. Erstellen eines Projekts Das folgende Programm erstellt zwei gleichzeitige Threads, die zwei voneinander unabhängige Tasks ausführen. Bevor Sie mit dem nächsten Teil dieses Tutorials fortfahren, erstellen Sie mit diesem Code ein neues Projekt. Überprüfen Sie den Anwendungscode Sehen Sie sich den Code im Editor an. In der Hauptsache. Werden die beiden Anweisungen innerhalb der Klammern des Par gleichzeitig ausgeführt: der aktuelle Thread vergibt einen neuen Hardware-Thread Der aktuelle Thread führt dann die Funktion flashLEDs4bitPort aus und der neue Thread führt die Funktion respondToButton aus. Das L1-Gerät verfügt über insgesamt acht verfügbare Hardware-Threads. Führen Sie zum Abschluss dieses Teils des Tutorials die folgenden Aufgaben aus: Erstellen Sie Ihr Projekt, erstellen Sie eine neue Ausführungskonfiguration und führen Sie es aus. Vergewissern Sie sich, dass zwischen den vier LEDs Ihres XK-1A eine blinkende LED aufleuchtet. Durch Drücken und Halten der Taste BUT1 sollte die Meldung 8220pressed8221 in der Konsole angezeigt werden und die LEDs sollten weiterhin blinken. Beim Loslassen der Schaltfläche sollte die Meldung 8220released8221 angezeigt werden. In der Konsole. Klicken Sie auf die Schaltfläche Beenden (), um das Projekt zu beenden. Kommunikation zwischen Threads Ein Kanal bietet eine synchrone, bidirektionale Verbindung zwischen zwei Threads. Es besteht aus zwei Kanalenden, die zwei Threads verwenden können, um auf Anfrage mit den XC-Input - und Output-Anweisungen zu interagieren. Das unten stehende Programm erzeugt zwei Threads, die über einen Kanal verbunden sind und über diesen Kanal einen Wert übermittelt. Die Funktion snd deklariert einen Channel-End-Parameter cout. Die sich auf ein Ende eines Kanals bezieht. Es verwendet die XC-Ausgabe-Anweisung, um den Wert 1 an einen empfangenden Thread auszugeben. Die Funktion rcv deklariert einen Kanalendparameter cin und verwendet die XC input-Anweisung, um einen Wert in die lokale Variable x einzugeben. Die Funktion main deklariert einen Kanal c. Die Orte ihrer beiden Kanalenden werden durch ihre Verwendung in zwei Aussagen der Par. Übung 1 Um diesen Teil des Lernprogramms abzuschließen, führen Sie die folgenden Aufgaben aus: Ändern Sie Ihre Anwendung so, dass nach dem Drücken und Loslassen der Taste BUT1 die blinkende LED die Richtung ändert. Dazu muss die Funktion respondToButton mit der Funktion flashLEDs4bitPort kommunizieren. Gehen Sie folgendermaßen vor: In der Funktion respondToButton: Hinzufügen eines Parameterdeklarationskanals c. Geben Sie nach dem Loslassen der Taste einen Wert 0 ein. In der Funktion flashLEDs4bitPort: Parameter-Deklarationskanal hinzufügen c. Fügen Sie eine Variablendeklaration unsigned direction hinzu, und initialisieren Sie auf 0. Fügen Sie der select-Anweisung, die Eingaben von Kanal c, einen Fall hinzu. Und im Körper dieses Falles die variable Richtung aktualisieren. Ändern Sie den Körper der case-Anweisung, dass Eingaben von tmrC, so dass die nächste LED blinkt, von dem Wert der variablen Richtung abhängt. Führen Sie Ihre Anwendung aus. Eine blinkende LED sollte zwischen den vier LEDs auf einem der XK-1As wechseln. Überprüfen Sie auf Ihrem XK-1A, dass durch Drücken und Loslassen der Taste BUT1 die blinkende LED die Richtung ändert und klicken Sie dann auf die Schaltfläche Beenden (), um das Projekt zu beenden. Übung 2 Dieser Teil des Tutorials zeigt Ihnen, wie Sie Ports und Threads auf verschiedene Prozessorkerne legen. Sie benötigen zwei XK-1As. Gehen Sie folgendermaßen vor: Das XDE erstellt eine leere Quelldatei, fügt es Ihrer Anwendung hinzu und öffnet es im Editor. Klicken Sie unten links im Editor auf die Registerkarte "Quelle", kopieren Sie den Code im folgenden Fenster in die neue Quelldatei und speichern Sie sie. Machen Sie es als Standardziel Im Projekt-Explorer. Erweitern Sie Ihre neue Datei, um die Header-Datei platform. h zu enthüllen. Und erweitern Sie diesen Header, um die Symbole stdcore0 und stdcore1 anzuzeigen. Diese Symbole benennen die beiden Prozessorkerne für Ihr neues Ziel, auf das in Ihrer XC-Anwendung verwiesen werden kann. Ändern Sie in der XC-Quelldatei die Header-Include-Datei ltxs1.hgt in ltplatform. hgt. Ändern Sie die Deklaration des Ports, um sie auf den ersten Kern zu legen, wie unten gezeigt: auf stdcore 0: out port führte XS1PORT4F Ändern Sie die Deklaration des Ports but1, um sie auf den zweiten Kern zu legen. Ändern Sie den Aufruf der Funktion flashLED, um ihn auf den ersten Kern zu legen, wie unten gezeigt: auf stdcore 0: flashLED (Argumente) Ändern Sie den Aufruf der Funktion respondToButton, um ihn auf den zweiten Kern zu legen. Im Projekt-Explorer. Erweitern Sie Ihren Projekt - und Anwendungsordner, und doppelklicken Sie dann auf die Datei Makefile. Klicken Sie im Makefile-Editor in Target. Wählen Sie die Option Dual-XK1A. Und wählen Sie dann Datei speichern (), um die Änderungen in der Datei zu speichern. Führen Sie Ihre Anwendung aus. Eine blinkende LED sollte zwischen den vier LEDs auf einem der XK-1As wechseln. Durch Drücken und Loslassen der Taste BUT1 am anderen XK-1A sollte die Richtung der blinkenden LED geändert werden. Was als nächstes zu lesen ist Dieses Tutorial bietet nur eine grundlegende Einführung der XK-1A Hardware. Weitere Informationen finden Sie im XK-1A-Hardwarehandbuch. Weitere Informationen zur Programmierung in XC finden Sie unter Programmierung von XC auf XMOS-Geräten. CS 3330: HCL2D Hinweis: ein großer Fehler in der Implementierung wurde behoben und hochgeladen, wenn Sie zuvor heruntergeladen haben, laden Sie ihn jetzt erneut herunter. Ein kleinerer Fehler, der nur Syntaxfehlermeldungen in Windows beeinträchtigt hat, wurde behoben. Sie sind herzlich eingeladen, es erneut herunterzuladen, wenn Sie HCL2D unter Windows ausführen. Wenn Sie zuerst hcl2d. tar (mit tar xvf hcl2d. tar) entpacken, geben Sie das hcl2d-Verzeichnis ein und führen make ohne Argumente aus. Wenn Sie irgendwelche Fehlermeldungen erhalten, sehen Sie Installation von D aus Labor 0. Um tiny. hcl auf y86 / alu. yo zu testen, stellen Sie sicher, dass Sie im hcl2d-Verzeichnis das Makefile davon abhängen. Stellen Sie sicher, dass tiny. hcl auch im hcl2d ist Verzeichnis Sie können tiny. exe auch verschiedene Flags angeben, wie - q und - i mit ./tiny. exe ohne Argumente werden die erlaubten Flags aufgelistet. Um toy. ys in toy. yo zu verwandeln, achten Sie darauf, dass Sie entweder im hcl2d-Verzeichnis oder hcl2d / y86 das Makefile davon abhängen. Make make toy. yo 1.5 Sehen, was eine. yo-Datei tun soll In dem Tools-Ordner ist Ein Programm namens yis läuft auf einer yo-Datei zeigt eine Zusammenfassung der richtigen Ergebnisse. Wir verwenden eine Variante von HCL erstellt, die ähnlich, aber nicht die gleiche wie die Bücher-Variante ist. Wie die Bücher Geschmack, unsere HCL hat Muxen mit Zustand. Wert-Syntaxvergleiche (.lt. Etc), Boolesche Operationen (ampamp) und Set-Mitgliedschaft (x in). Muxen dürfen nicht in andere Muxen platziert werden. Anders als die Bücher Geschmack, erklären wir die Dinge anders: Sie können so viele Konstanten definieren, wie Sie z. Const PI 3 Drähte werden mit einer bestimmten Bitbreite deklariert, zB wire tmp: 4. Nicht mit int. Drähte können nicht auf dieselbe Zeile, die sie deklariert werden, intialisiert werden. Sie können sowohl binär (z. B. 0b01010011) als auch dezimal und hex verwenden. Anders als Dezimalzahl und Hexadezimalwert haben Binärzahlen eine Breite, die mit der Breite der ihnen zugeordneten Drähte übereinstimmen muss, so dass Sie Ihre eigenen Registerbänke registrieren können. FE definiert eine Registerbank. Es enthält zwei Register, hi (3 Bits breit) und dort (fünf Bits breit). FE gibt die Input-und Output-Namen müssen sie ein Kleinbuchstabe und ein Großbuchstabe fhi 5 setzt 5 auf den Eingangsdraht für Register hi. Ehi liest die Ausgangsleitung aus Register hi Wenn Sie bubbleE true setzen. Eingaben werden ignoriert und hi wird auf 2 gesetzt. There to 0 Wenn Sie stallE true setzen. Inputs werden ignoriert und Outputs bleiben as-is Im Gegensatz zum Buchgeschmack haben wir auch mehr Operatoren: Ein Bit-Slicing Operator: Wenn tmp 0b010111 dann tmp1..4 ist 0b011 und tmp0..1 ist das niederwertige Bit von tmp (A & sub1;). Index 0 ist das niederwertige Bit. Sie können feste Breitenwerte (Drähte, Register, binäre Literale und das Ergebnis des Slice-Operators) verknüpfen (0b0101. 0b01101) ist 0b010101101. Die Klammern sind erforderlich. Sie können C math Operatoren in Ihren Ausdrücken enthalten Reihenfolge der Code in der Regel keine Rolle: alle Anweisungen werden parallel ausgeführt und Mischen der Reihenfolge der Zeilen in Ihrem Code ändert nicht Ihre Codes Bedeutung. Als Ausnahme von dieser Regel werden die Fälle eines Mux in der Reihenfolge ausgewertet, also x1. 3 wahr. 4 haben unterschiedliche Werte, wenn x 1 ist, als wenn es nicht ist, aber wahr: 4 x1. 3 wird immer zu 4. unabhängig vom Wert von x ausgewertet. Ähnlich haben nichtkommutative Operatoren - und haben in HCL2D dieselbe Reihenfolge-abhängige Bedeutung, die sie in C haben. Zusätzlich versucht HCL2D, die gesamte Taktverzögerung Ihres Codes abzuschätzen und zeigt an, dass beim Ausführen. Ein Teil des Ziels dieses Geschmacks von HCL war, mehr Freiheit zu geben, das, was in der Lehrbuchautor-Version wieder eingebaut wurde, eingebaute Funktionalität wiederzugeben. Allerdings haben wir noch fest verdrahtet einige Komponenten, wie Speicher und die Register-Datei. Dieser Abschnitt und der folgende Abschnitt enthalten die gleichen Informationen, aber in anderer Weise dargestellt. Der Simulator stellt die folgenden eingebauten Signale und Konstanten zur Verfügung, wie dies durch Inspektion der ersten Zeilen von tools / hcl2d. d überprüft werden kann: Da diese bereitgestellt werden, können sie nicht in Ihren Dateien neu deklariert werden, sondern können (und sollten) verwendet werden Interagieren mit der Registerdatei, Speichersystem, und dem Simulator zu sagen, wenn zu stoppen Ihr Programm. Dieser Abschnitt und der vorhergehende Abschnitt enthalten dieselben Informationen, aber in anderer Weise dargestellt. Es gibt mehrere eingebaute Komponenten, die sie eingebaute Namen haben, und Sie müssen diese Namen verwenden, um mit ihnen zu interagieren. Wir verwenden nicht die gleichen Namen wie das Lehrbuch teilweise, weil das Buch manchmal den gleichen Namen für 2 Dinge verwendet. Zum Beispiel verwendet das Buch valM sowohl die Ausgabe des Datenspeichers als auch eines der Schreibeingaben in die Registerdatei. Der Block oben listet alle unsere Namen wir wiederholen sie unten durch Komponente. Die Eingabe in den Befehlsspeicher wird als pc bezeichnet. Pc ist eine 64-Bit-Zahl und wird so behandelt, dass sie eine Speicheradresse enthält, aus der eine Anweisung gelesen werden kann. Die Ausgabe des Befehlsspeichers wird als i10bytes bezeichnet. I10bytes ist eine 80-Bit-Zahl und enthält den Little-Endian-Wert aus dem Speicher bei der in pc angegebenen Adresse. Normalerweise wollen wir Teile von i10bytes aufteilen. Wir machen dies mit dem Sliceoperator: Die Bits werden von 0 (niedrigstwertiges Byte) bis 79 (höchstwertiges Byte) numeriert. Die i10bytes4..8 wählt die Bits 4, 5, 6 und 7 aus und gibt sie als 4-Bit-Zahl zurück. Das Buch bezieht sich nicht auf i10bytes von einem beliebigen Namen, und verwendet pc, um mehrere Dinge bedeuten, auch was wir damit, es zu bedeuten. Der Datenspeicher hat vier Eingänge und einen Ausgang. Ein 1-Bit-Wert. 0 bedeutet nicht lesen, 1 bedeutet lesen. Es ist ein Fehler, sowohl für memreadbit als auch memwritebit gleichzeitig auf 1 gesetzt zu werden. Ein 1-Bit-Wert. 0 bedeutet nicht schreiben, 1 bedeutet, schreiben. Es ist ein Fehler, sowohl für memreadbit als auch memwritebit gleichzeitig auf 1 gesetzt zu werden. Ein 64-Bit-Wert, der eine Speicheradresse enthalten sollte, wenn entweder memreadbit oder memwritebit 1 ist. Es ist die Adresse, an der der Speicher gelesen oder geschrieben wird. Ein 64-Bit-Wert, der in memaddr geschrieben wird, wenn und nur wenn memwritebit 1. memoutput Ein 64-Bit-Wert gelesen (in little-endian) von memaddr, wenn memreadbit 1 war oder die Zahl 0x00000000000000 wenn memreadbit War 0. Das Buch verweist auf memaddr als nur addr. Als Daten speichern. Und memoutput als valM. Beachten Sie, dass sie (verwirrend) auch valM als den Namen einer Eingabe in die Registerdatei verwenden. Die Registerdatei hat sechs Eingänge und zwei Ausgänge. Diese repräsentieren zwei Lese-Ports (genannt A und B, die mit der Namensgebung der Bücher übereinstimmen) und zwei Schreib-Ports (E und M, die mit der Bücher-Benennung übereinstimmen). Eingänge regsrcA und regsrcB 4-Bit-Eingänge mit einer Registernummer zum Lesen aus. Ausgänge regoutputA und regoutputB 64-Bit-Werte, die den Inhalt der in regsrcA und regsrcB genannten Register enthalten. beziehungsweise. Wenn regsrcA also REGRSP ist, dann ist regoutputA der in rsp gespeicherte Wert. Wenn eine Quelle REGNONE war. Die entsprechende Ausgabe ist die Nummer 0x0000000000000000. Eingänge regdstE und regdstM 4-Bit-Eingänge mit einer Registernummer zum Schreiben auf. REGNONE bedeutet nicht schreiben. Inputs reginputE und reginputM 64-Bit-Werte, die in den Registern unter regdstE und regdstM gespeichert werden sollen. beziehungsweise. Wenn also regdstE REGRSP ist, dann wird der Wert von reginputE in rsp gespeichert. Diese Namen beziehen sich auf die Namen im Buch wie folgt: Das Buch hat nicht Reg Präfixe haben wir sie hinzugefügt, weil die Schüler wurden immer verwirrt, welche Signale wurden, was gebunden. Das Buch ruft sowohl inputX als auch outputX nur valX auf, wir unterscheiden zwischen Inputs und Outputs für Klarheit. Beachten Sie, dass das Buch (verwirrend) valM als den Namen einer Eingabe in die Registerdatei und den Namen einer Ausgabe aus dem Datenspeicher verwendet. Es verwendet auch valE sowohl den Namen einer Eingabe in die Registerdatei als auch den Namen einer Ausgabe von der ALU. Der Statusblock hat einen einzigen Eingang mit dem Namen Stat. Es sollte mit STAT auf eine der angegebenen Konstanten gesetzt werden. Bemerkenswert ist, dass Stat STATAOK bedeutet, dass alle anderen Werte beibehalten werden, aufhören zu laufen (möglicherweise mit einem Fehler). Das Buch nennt diese Stat. ALU, Zustand Codes, und registrieren, um den PC zu speichern Das Buch hat mehrere Komponenten eingebaut (in blau in ihren Bildern dargestellt), die Sie lassen Sie sich selbst implementieren. Dazu gehören die ALU, die Bedingungscodes und das Register, das den aktuellen Programmzähler speichert. Wenn Sie nicht machen (z. B. weil Sie in Windows ausgeführt werden), dann müssen Sie die Dinge manuell kompilieren: gehen Sie in das Tools-Verzeichnis führen Sie Ihre C-Compiler, yas und yis zu machen. Wie z. B. Führen Sie Ihren D-Compiler aus, um hcl2d zu erstellen. Wie z. B. Kehren Sie zum Hauptverzeichnis zurück, indem Sie hcl2d auf den. hcl-Dateien ausführen, z. B. Dadurch wird eine Datei namens tinyhcl. d erstellt, die die resultierende hcl. d-Datei auf einer. yo-Datei ausführt, z. B. Sie können den Kleinbuchstaben einer Registerbank weglassen, die Kleinbuchstabenversion des Großbuchstabens wird standardmäßig verwendet. Yis Yas Und die meisten der bereitgestellten. ys-Dateien sind von Y86 Tools (Student Distribution) Copyright (c) 2002, 2010, 2015 R. Bryant und D. OHallaron, Alle Rechte vorbehalten. Ohne Genehmigung darf nicht verwendet, verändert oder kopiert werden. Die Erlaubnis, unmodifizierte Versionen dieser Quellen zu verteilen, wurde von Luther Tychonievich von den Autoren im Juli 2014 erhalten und im August 2015 verlängert. Diese Erlaubnis erstreckt sich nicht auf Sie, Sie können sie erhalten, aber nicht neu verteilen, ohne vorher die Erlaubnis der Urheberrechtsinhaber zu erhalten. Die bereitgestellten. yo-Dateien wurden von yas aus den. ys-Dateien generiert und ich glaube, dass sie unter die gleichen Urheberrechts - und Verbreitungsregeln fallen. hcl2d is original to this package HCL2D version 2016-10-12 Copyright (c) 2016 Luther Tychonievich, Released into the public domain. Attribution is appreciated but not required. hcl2d makes use of a subset of the pegged library by Philippe Sigaud, available under the Boost license. See the README. md in the tools/pegged directory for more. hcl2d makes use of various parts of the D standard phobos library, a collaboration of many authors available under the Boost license. See dlang. org/phobos/ for more. Copyright 2016 by Luther Tychonievich and Charles Reiss. Alle Rechte vorbehalten. Last updated 2016-10-28 12:51:10


No comments:

Post a Comment