Wednesday 18 January 2017

0xea In Binary Option

Dtelnet: Ein freier Telnet-Client für Windows 16 / 32/64 dtelnet wurde unter der GPL veröffentlicht. Eine Kopie der GPL befindet sich in der Quell-Zip-Datei unter dem Namen COPYING. TXT. Bitte lesen Sie die Lizenz, wenn Sie die Quelle herunterladen. Das Programm sollte mit verschiedenen Compilern bauen, zB MSVC, Borlandc, Cygwin Current dtelnet Release Version ist 1.3.7. Es ist datiert 2016-09-14. Auf der Download-Seite können Sie eine README. TXT-Datei über die letzten Änderungen (auch in den ZIP-Dateien) sehen / herunterladen. Die erste öffentliche Version der Quelle war Version 0.9.1. Es gibt eine Mailingliste für dtelnet-Entwickler (dtelnet-devellists. sourceforge. net). Diskussionen über Fehler und Verbesserungen werden auf der Liste durchgeführt. Senden Sie einen Fehlerbericht an diese Liste. Zeigen Sie hier Ihren Browser an, um die Liste abonnieren zu können. Es gibt eine separate Liste für Ankündigungen neuer Versionen (dtelnet-announcelists. sourceforge. net). Abonnieren Sie hier. Bitte senden Sie kein Feedback an diese Liste. Die alte dtelnet Mailingliste befindet sich hier. Wenn Sie die meiste Zeit auf Unix verbringen, fühlen Sie sich vermutlich nicht zu Hause, es sei denn, die Sitzung fühlt sich richtig an. Zu diesem Zweck hat dtelnet eine Anzahl von Schlüsselbindungen, die Sie wieBinary Serialisierungsbibliothek für D. Minimal zu keinem Boilerplate benötigen. Die Tests im Verzeichnis der Tests hängen vom Ausführen von unit-threaded ab. Es kann auch Strings, assoziative Arrays, Arrays, Zeichen usw. behandeln. Was ist mit structs Kein Boilerplate nötig, Kompilierzeitreflexion tut es für Sie. Das folgende Beispiel zeigt einige Funktionen. In erster Linie werden die Mitglieder automatisch serialisiert, können aber über das NoCereal-Attribut entfernt werden. Wichtig ist auch, dass Mitglieder, die in einer bestimmten Anzahl von Bits (wichtig für binäre Protokolle) serialisiert werden sollen, mit dem Bits-Attribut mit einer Kompilierzeit-Ganzzahl signalisiert werden, die die Anzahl der zu verwendenden Bits angibt. Was ist, wenn eine benutzerdefinierte Serialisierung erforderlich ist und die Standardeinstellung, auch bei Opt-outs, nicht funktioniert Wenn ein Aggregattyp eine Memberfunktion void accept (C) (ref C cereal) definiert, wird sie stattdessen verwendet. Um die übliche automatische Serialisierung von innerhalb der benutzerdefinierten akzeptieren. Kann die grainAllMembers-Memberfunktion von Cereal aufgerufen werden, wie im folgenden Beispiel gezeigt. Diese Funktion nimmt ein ref-Argument, so dass rvalues ​​nicht angewendet werden müssen. Die Funktion, um auf Cereal zu Marshall oder unmarshall einen bestimmten Wert verwenden, ist Getreide. Dies ist im Wesentlichen, was Cerealiser. Und Decerealiser. value hinter den Kulissen. Die andere Option, wenn eine benutzerdefinierte Serialisierung erforderlich ist, die verhindert, dass die Kesselplatte eine void postBlit (C) (ref C cereal) - Funktion anstelle von accept definiert. Das Marshalling oder Unmarshalling wird getan, wie es in der Abwesenheit von Customization, und postBlit ist aufgerufen, um Dinge zu beheben. Es ist ein Compile-Time-Fehler zu definieren, sowohl akzeptieren und postBlit. Beispiel unten. Weitere Beispiele für die Serialisierung von Strukturen, überprüfen Sie die Test-Verzeichnis oder Real-World-Nutzung in meinem MQTT-Broker auch in D. Arrays sind standardmäßig serialisiert mit einem ushort Array Länge gefolgt von den Array-Inhalt. Es kommt häufig vor, dass Netzwerkprotokolle explizite Längenparameter für das gesamte Paket aufweisen und daraus Arrayslängen implizit bestimmt werden. Für diesen Anwendungsfall gibt das Attribut RestOfPacket an, dass cerealed den Längenparameter nicht hinzufügen soll. Wie der Name schon andeutet, wird er alle Bytes fressen, bis es noch keine gibt. Abgeleitete Klassen können über einen Verweis auf die Basisklasse serialisiert werden, aber die untergeordnete Klasse muss zuerst registriert werden: Es gibt nun Unterstützung für InputRange - und OutputRange-Objekte. Beispiele finden Sie im Testverzeichnis Häufig in der Netzwerk-Programmierung, die Pakete selbst codieren die Länge der Elemente zu folgen. Dies geschieht oft genug, dass Cerealed zwei UDAs hat, um diese Art der Serialisierung zu automatisieren: ArrayLength und LengthInBytes. Erstere gibt an, wie die Länge eines Arrays zu erhalten ist (meist eine Variable). Letzteres gibt an, wie viele Bytes das Array annimmt. Beispiele: Ein einfaches Projekt Demo-Projekte An dieser Stelle sollten die GNU-Tools konfiguriert, gebaut und auf Ihrem System installiert sein. In diesem Kapitel stellen wir ein einfaches Beispiel für die Verwendung der GNU-Tools in einem AVR-Projekt vor. Nach dem Lesen dieses Kapitels sollten Sie ein besseres Gefühl haben, wie die Werkzeuge verwendet werden und wie ein Makefile konfiguriert werden kann. Dieses Projekt verwendet den Pulsbreitenmodulator (PWM), um eine LED alle zwei Sekunden ein - und auszuschalten. Als Controller wird ein Prozessor AT90S2313 verwendet. Die Schaltung für diese Demonstration ist in der schematischen Darstellung dargestellt. Wenn Sie ein Entwicklungs-Kit haben, sollten Sie in der Lage, es zu verwenden, anstatt die Schaltung, für dieses Projekt. Hinweis: Inzwischen wurde das AT90S2313 obsolet. Entweder mit seinem Nachfolger, dem (pin-kompatiblen) ATtiny2313 für das Projekt oder vielleicht dem ATmega8 oder einem seiner Nachfolger (ATmega48 / 88/168), die seit der Gründung des ursprünglichen Demoprojektes sehr beliebt geworden sind. Für alle diese modernen Geräte ist es nicht mehr notwendig, einen externen Kristall für die Taktung zu verwenden, da sie mit dem internen 1 MHz-Oszillator freigegeben werden, so daß C1, C2 und Q1 weggelassen werden können. Normalerweise kann für dieses Experiment auch der externe Schaltkreis auf / RESET (R1, C3) weggelassen werden, wobei nur der AVR, die LED, der Bypass-Kondensator C4 und vielleicht R2 übrig bleiben. Verwenden Sie für den ATmega8 / 48/88/168 PB1 (Pin 15 am DIP-28-Gehäuse), um die LED an anzuschließen. Außerdem wurde diese Demo auf viele verschiedene andere AVRs portiert. Die Position des jeweiligen OC-Pins variiert zwischen verschiedenen AVRs und wird von der AVR-Hardware beauftragt. Schema der Schaltung für Demo-Projekt Der Quellcode wird in demo. c. Erstellen Sie im Sinne dieses Beispiels eine Datei namens demo. c, die diesen Quellcode enthält. Einige der wichtigsten Teile des Codes sind: Anmerkung 1: Da die AVR-Mikrocontroller-Serie in den letzten Jahren entwickelt wurde, wurden im Laufe der Zeit neue Funktionen hinzugefügt. Obwohl die grundlegenden Konzepte von timer / counter1 immer noch dieselben sind wie früher, als diese einfache Demo ursprünglich geschrieben wurde, wurden die Namen von Registern und Bits etwas geändert, um die neuen Funktionen wiederzugeben. Auch die Port-und Pin-Mapping der Ausgang Vergleich zu vergleichen 1A (oder 1 für ältere Geräte) Pin, der zur Steuerung der LED variiert zwischen verschiedenen AVRs verwendet wird. Die Datei iocompat. h versucht, zwischen all diesen Unterschieden mit einigen Preprozessor-ifdef-Anweisungen zu abstrahieren, so dass das eigentliche Programm selbst auf einem gemeinsamen Satz von symbolischen Namen operieren kann. Die durch diese Datei definierten Makros sind: OCR der Name des OCR-Registers zur Steuerung der PWM (üblicherweise OCR1 oder OCR1A) DDROC den Namen des DDR (Data Direction Register) für den OC-Ausgang OC1 die Pin-Nummer des OC1A-Ausgangs Innerhalb seines Ports TIMER1TOP den TOP-Wert des für den PWM verwendeten Timers (1023 für 10-bit PWMs, 255 für Geräte, die nur eine 8-bit PWM handhaben können) TIMER1PWMINIT die Initialisierungsbits in das Steuerregister 1A einzustellen PWM-Modus TIMER1CLOCKSOURCE Die Taktbits, die im entsprechenden Steuerregister gesetzt werden, um die PWM-Zeitschaltuhr zu starten, läuft in der Regel im vollen CPU-Takt für 10-Bit-PWMs, während sie auf einem Voreingestellter Takt für 8-Bit-PWMs Hinweis 2: ISR () ist ein Makro, das die Funktion als Interruptroutine markiert. In diesem Fall wird die Funktion aufgerufen, wenn der Zeitgeber 1 überläuft. Das Einrichten von Interrupts wird in ltavr / interrupt. hgt: Interrupts näher erläutert. Hinweis 3: Die PWM wird im 10-Bit-Modus verwendet, so dass wir eine 16-Bit-Variable brauchen, um den aktuellen Wert zu speichern. Hinweis 4: Dieser Abschnitt bestimmt den neuen Wert des PWM. Anmerkung 5: Hier wird der neu berechnete Wert in das PWM-Register geladen. Da wir in einer Interrupt-Routine sind, ist es sicher, eine 16-Bit-Zuweisung zum Register zu verwenden. Außerhalb eines Interrupts darf die Zuweisung nur dann durchgeführt werden, wenn Interrupts deaktiviert sind, wenn es eine Chance gibt, dass eine Interruptroutine auch auf dieses Register (oder ein anderes Register, das TEMP verwendet) zugreifen kann, siehe entsprechenden FAQ-Eintrag. Hinweis 6: Diese Routine wird nach einem Reset aufgerufen. Es initialisiert die PWM und aktiviert Interrupts. Anmerkung 7: Die Hauptschleife des Programms tut nichts - alle Arbeiten werden von der Interruptroutine ausgeführt. Der sleepmode () schaltet den Prozessor bis zum nächsten Interrupt ein, um Strom zu sparen. Natürlich ist das wahrscheinlich nicht wahrnehmbar, da wir noch eine LED fahren, es wird hier nur erwähnt, um das Grundprinzip zu demonstrieren. Hinweis 8: Frühe AVR-Geräte sättigen ihre Ausgangssignale bei geringen Strömen, wenn die Stromzufuhr erfolgt, so dass die LED direkt angeschlossen werden kann, der Strom durch die LED beträgt ca. 15 mA. Für moderne Teile (zumindest für den ATmega 128) hat Atmel jedoch die IO-Source-Fähigkeit drastisch erhöht, so dass bei Betrieb mit 5 V Vcc R2 benötigt wird. Sein Wert sollte etwa 150 Ohm. Wenn der Schaltkreis bei 3 V betrieben wird, kann er trotzdem weggelassen werden. Dieses erste, was getan werden muss, ist die Quelle zu kompilieren. Beim Kompilieren muss der Compiler den Prozessortyp kennen, damit die Option - mmcu angegeben wird. Die Option - Os informiert den Compiler, um den Code für eine effiziente Platznutzung zu optimieren (auf Kosten der Codeausführungsgeschwindigkeit). Die - g wird verwendet, um Debug-Informationen einbetten. Die Debug-Info ist nützlich für disassemblies und nicht in der. Hex-Dateien, so dass ich in der Regel angeben. Schließlich sagt das - c dem Compiler zu kompilieren und zu stoppen - nicht verknüpfen. Diese Demo ist klein genug, um in einem Schritt kompilieren und verknüpfen zu können. Real-world-Projekte haben jedoch mehrere Module und müssen in der Regel den Bau des Projekts in mehrere Compiles und einen Link brechen. Die Zusammenstellung wird eine demo. o-Datei erstellen. Als nächstes verknüpfen wir es in eine Binärdatei namens demo. elf. Bei der Kopplung ist es wichtig, den MCU-Typ anzugeben. Der Compiler verwendet die Option - mmcu, um Startup-Dateien und Laufzeitbibliotheken auszuwählen, die miteinander verknüpft werden. Wenn diese Option nicht angegeben ist, verwendet der Compiler standardmäßig die 8515-Prozessorumgebung, was sicherlich das ist, was Sie nicht wollen. Jetzt haben wir eine Binärdatei. Können wir etwas Nützliches damit machen (außer es in den Prozessor) Die GNU Binutils Suite besteht aus vielen nützlichen Tools zum Manipulieren von Objektdateien, die generiert werden. Ein Werkzeug ist avr-objdump. Der Informationen aus der Objektdatei entnimmt und in vielfältiger Weise anzeigt. Wenn Sie den Befehl selbst eingeben, wird er seine Optionen auflisten. Um beispielsweise ein Gefühl der Anwendungsgröße zu erhalten, kann die Option - h verwendet werden. Die Ausgabe dieser Option zeigt, wie viel Speicherplatz in jedem der Abschnitte verwendet wird (die. stab und. stabstr Abschnitte halten die Debugging-Informationen und machen es nicht in die ROM-Datei). Eine noch nützliche Option ist - S. Diese Option disassembles die Binärdatei und intersperses der Quellcode in der Ausgabe Diese Methode ist viel besser, meiner Meinung nach, als die Verwendung des - S mit dem Compiler, weil diese Auflistung enthält Routinen aus den Bibliotheken und den Inhalt der Vektortabelle. Auch wurden alle Korrekturen erfüllt. Mit anderen Worten, die Auflistung, die durch diese Option erzeugt wird, entspricht dem tatsächlichen Code, den der Prozessor ausführen wird. Heres die Ausgabe, die in der demo. lst Akte gespeichert wird: avr-objdump ist sehr nützlich, aber manchmal sein notwendig, um Informationen über die Verbindung zu sehen, die nur durch den Linker erzeugt werden kann. Eine Map-Datei enthält diese Informationen. Eine Map-Datei eignet sich für die Überwachung der Größen von Code und Daten. Es zeigt auch, wo Module geladen werden und welche Module aus Bibliotheken geladen wurden. Es ist noch eine andere Ansicht Ihrer Anwendung. Um eine Map-Datei zu erhalten, füge ich gewöhnlich - Wl, - Map, demo. map zu meinem Link-Befehl hinzu. Verknüpfen Sie die Anwendung mit dem folgenden Befehl, um demo. map zu generieren (ein Teil davon wird unten gezeigt). Einige interessante Punkte in der Datei demo. map sind: Das. text-Segment (wo Programmanweisungen gespeichert sind) startet an der Stelle 0x0. Die letzte Adresse im. text-Segment ist die Position 0x114 (gekennzeichnet durch etext), so dass die Anweisungen bis zu 276 Byte FLASH verbrauchen. Das. data-Segment (wo initialisierte statische Variablen gespeichert sind) startet an der Stelle 0x60. Die die erste Adresse nach der Registerbank auf einem ATmega8-Prozessor ist. Die nächste verfügbare Adresse im. data-Segment ist ebenfalls 0x60. So dass die Anwendung keine initialisierten Daten hat. Das. bss-Segment (bei dem nicht initialisierte Daten gespeichert werden) beginnt an der Stelle 0x60. Die nächste verfügbare Adresse im Segment. bss ist Standort 0x63, so dass die Anwendung 3 Byte nicht initialisierte Daten verwendet. Das. eeprom Segment (wo EEPROM-Variablen gespeichert sind) startet an der Stelle 0x0. Die nächste verfügbare Adresse in der. eeprom-Segment ist auch Standort 0x0, so gibt es keine EEPROM-Variablen. Wir haben eine Binärdatei der Anwendung, aber wie bekommen wir es in den Prozessor Die meisten (wenn nicht alle) Programmierer akzeptieren eine GNU-Datei als Eingabedatei, so müssen wir ein wenig mehr Verarbeitung zu tun. Der nächste Schritt besteht darin, Teile der Binärdatei zu extrahieren und die Informationen in. hex-Dateien zu speichern. Das GNU-Dienstprogramm, das dies tut, heißt avr-objcopy. Der ROM-Inhalt kann aus unseren Projekten binär herausgezogen und mit folgendem Befehl in die Datei demo. hex eingefügt werden: Die resultierende demo. hex-Datei enthält: Die Option - j gibt an, dass die Informationen aus dem. text - und. data-Segment extrahiert werden sollen . Wenn wir das EEPROM-Segment angeben, können wir eine. hex-Datei erzeugen, mit der das EEPROM programmiert werden kann. Die resultierende demoeeprom. hex-Datei enthält: eine leere. hex-Datei (die erwartet wird, da wir keine EEPROM-Variablen definiert haben ). Anstatt diese Befehle immer und immer wieder einzugeben, können sie alle in einer Make-Datei platziert werden. Um das Demo-Projekt mit make zu erstellen. Speichern Sie die folgenden in einer Datei namens Makefile. Hinweis: Dieses Makefile kann nur als Eingabe für die GNU-Version von make verwendet werden.


No comments:

Post a Comment