Textdarstellung eines Bytes

7

Ich habe in vielen Projekten eine coole Präsentation von Bytes gesehen, wie zum Beispiel:

      Sicherung High Byte:  
      0xc9 = 1 1 0 0 1 0 0 1 - BOOTRST (Boot-Reset-Vektor bei 0x0000)  
             ^^^^^^^ ------ BOOTSZ0  
             | | | | | + -------- BOOTSZ1  
             | | | | + --------- EESAVE (EEPROM nicht über Chip löschen)  
             | | | + -------------- CKOPT (voller Ausgangsschwung)  
             | | + ---------------- SPIEN (serielle Programmierung zulassen)  
             | + ------------------ WDTON (WDT nicht immer eingeschaltet)  
            + -------------------- RSTDISBL (Reset-Pin ist aktiviert)  

oder

    Sicheres Low-Byte:
     0x9f = 1 0 0 1 1 1 1 1
            ^^ \ / \ - + - /
            | | | + ------- CKSEL 3..0 (extern> 8M Kristall)
            | | + --------------- SUT 1..0 (Quarzoszill, BSB aktiviert)
            | + ------------------ BODEN (BrownOut Detector aktiviert)
            + -------------------- BODLEVEL (2.7V)

Ich frage mich, ob mir jemand sagen kann, wie oder wo ich einige davon herstellen kann.

edit: Ich meine, ich sehe diese Art von Präsentation oft im Texte-Format, also denke ich, dass sie nicht von Hand gemacht wird. Ich war auf der Suche nach der Software / URL, um das Samme zu generieren.

Jojo l'abricot
quelle
Wenn Sie Text in <pre> -Tags umgeben, wird nicht versucht, ihn durch Syntax hervorzuheben, aber es sollte (sollte) immer noch Monospace sein.
Kevin Vermeer
10
Sie werden normalerweise von Hand gemacht, ernsthaft. :)
Bjarkef
Ich habe sie immer von Hand gemacht und wahrscheinlich Hunderte von verdammten Dingen gemacht. Wirklich überhaupt nicht knifflig.
Akohlsmith

Antworten:

5

Mit graphviz und dot können Sie mit etwas spielen . Mit diesen Tools erstellt doxygen die Diagramme. Es ist nicht genau das, wonach Sie suchen, aber es ist schnell und einfach zu skripten und die Ausgabe sieht gut aus (auch wenn es ein wenig schwierig ist, einigen Zeilen zu folgen ...)


Dieses Beispiel generiert so etwas

Alt-Text

Dazu erstellen Sie zunächst eine Datei mit dem Namen byte.dot

digraph structs { 
node [shape=plaintext] 

struct1 [label=< 
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" ALIGN="left">  
    <TR>
        <TD>0xc9</TD>
        <TD PORT="f0"> 1 </TD>
        <TD PORT="f1"> 1 </TD>
        <TD PORT="f2"> 0 </TD>
        <TD PORT="f3"> 0 </TD>

        <TD PORT="f4"> 1 </TD>
        <TD PORT="f5"> 0 </TD>
        <TD PORT="f6"> 0 </TD>
        <TD PORT="f7"> 1 </TD>
    </TR> 
</TABLE>>]; 

struct2 [label=< 
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" >  
    <TR> <TD ALIGN="left" PORT="f0"> RSTDISBL (reset pin is enabled) </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f1"> WDTON (WDT not always on) </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f2"> SPIEN (allow serial programming)  </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f3"> CKOPT (full output swing) </TD> </TR>

    <TR> <TD ALIGN="left" PORT="f4"> EESAVE (don't preserve EEPROM over chip erase)  </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f5"> BOOTSZ1 </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f6"> BOOTSZ0 </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f7"> BOOTRST (boot reset vector at 0x0000) </TD> </TR>
</TABLE>>]; 

struct1:f0:s -> struct2:f0:w;
struct1:f1:s -> struct2:f1:w;
struct1:f2:s -> struct2:f2:w; 
struct1:f3:s -> struct2:f3:w;

struct1:f4:s -> struct2:f4:w;
struct1:f5:s -> struct2:f5:w;
struct1:f6:s -> struct2:f6:w; 
struct1:f7:s -> struct2:f7:w;
} 

Führen Sie dann einen dieser Befehle aus.

dot -Tpng byte.dot -o byte.png 
dot -Tps  byte.dot -o byte.ps

Vielleicht ist es schöner, wenn wir nicht alle Linien in der Mitte kreuzen?

Alt-Text

Ich habe gerade den Namen in der zweiten Tabelle von f0..f7 in f7..f0 geändert.

<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" >
    <TR> <TD ALIGN="left" PORT="f7"> RSTDISBL (reset pin is enabled) </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f6"> WDTON (WDT not always on) </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f5"> SPIEN (allow serial programming)  </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f4"> CKOPT (full output swing) </TD> </TR>

    <TR> <TD ALIGN="left" PORT="f3"> EESAVE (don't preserve EEPROM over chip erase)  </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f2"> BOOTSZ1 </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f1"> BOOTSZ0 </TD> </TR>
    <TR> <TD ALIGN="left" PORT="f0"> BOOTRST (boot reset vector at 0x0000) </TD> </TR>
</TABLE>>];
Johan
quelle
5

Das ist eine ziemlich langwierige Art, die Felder in einer Binärzahl anzuzeigen. Hier ist ein Ausschnitt aus dem eigentlichen Quellcode, der zeigt, wie ich es mache:

         setreg b'00010000 ', eccp1as
                 ;; 0 ------- Löschen Sie alle vorhandenen Abschaltereignisse
                 ;; -001 ---- PWM am Komparator 1 hoch abschalten
                 ;; ---- 00-- Der Abschaltzustand von P1A und P1C ist niedrig
                 ;; ------ 00 Der Abschaltzustand von P1B und P1D ist niedrig

         setreg b'10000000 ', pwm1con
                 ;; 1 ------- automatischer Neustart, sobald die Abschaltbedingung behoben ist
                 ;; -0000000 keine Neustartverzögerung

         setreg b'00000001 ', pstrcon
                 ;; XXX ----- unbenutzt
                 ;; --- 0 ---- Die Steuerung des Ausgangsstifts wird sofort wirksam
                 ;; ---- 0 --- P1D-Pin nicht angesteuert, hat normale Portfunktion
                 ;; ----- 0-- P1C-Pin nicht angesteuert, hat normale Portfunktion
                 ;; ------ 0- P1B-Pin nicht angesteuert, hat normale Portfunktion
                 ;; ------- 1 P1A-Pin-Antrieb vom PWM-Signal

Ich denke, das ist einfacher als Ihr ausführliches Beispiel, zeigt aber immer noch die gleichen Informationen. Ja, ich schreibe wirklich so einen Code.

Olin Lathrop
quelle
4

In Ihrem bevorzugten Texteditor. Ich kann vim empfehlen .

Toby Jaffey
quelle
2
Genau das mache ich ... Ich verstehe diese Frage nicht wirklich. :-)
Akohlsmith
Ich schlage auch vor, dass diese von Hand gemacht werden, wie alle richtigen AA. :)
XTL
1

Im Editor von Dos Navigator gibt es einen speziellen Zeichenmodus. Sie können das Zeichnen von doppelten Linien aktivieren, indem Sie F4 drücken, dann erneut F4 für eine einzelne Linie und erneut deaktivieren. Sie können mit den Cursortasten einfach Linien zeichnen, während Sie die Umschalttaste gedrückt halten.

1 1 0 0   1 1 0 0 ───────┬┐
│ │   ║       ║ │        │├───────┐
│ │   ║       ║ └────────┴┘       │
│ │   ║       ║                   │
│ │   ║       ║                   │
│ │   ║       ║                   │
│ │   ║       ╚═════════════╗     │
│ │   ╚═════════════════════╝     │
│ │                               │
│ │                               │
│ └───────────────────────┬┐     ┌┘
│                 ┌┬┐┌┐  ┌┘└┐   ┌┘
└───────────────┐┌┤│││└┐┌┘  └┐ ┌┘
                └┘└┘└┘ └┘    └─┘
csadam
quelle
2
Der Emacs Artist-Modus macht so etwas auch, ohne auf Nicht-ASCII-Symbole zurückzugreifen. Ich tippe diese Dinge immer noch einfach ein, obwohl Überschreiben, freie Platzierung und Wiederholungsbefehle helfen können.
Yann Vernier
0

ditaa macht was du suchst. Das folgende Bild wird aus Ihrem obigen Rohtext generiert.

Alt-Text

Möglicherweise muss ein wenig bearbeitet werden, um die richtige Formatierung zu erhalten ...

J. Polfer
quelle
1
Weißt du was? Dies ist nicht das, wonach das OP sucht, trotz seiner Coolness. Er möchte etwas, das ASCII-Kunst für ihn erzeugt ... Ich kann meinen eigenen Beitrag nicht ablehnen ...
J. Polfer