Code-Templates für AVR-Register

Warum sollte man sich für Dinge abmühen, die der Computer viel besser kann als man selbst?

Dieser Gedanke rückt viel zu oft in den Hintergrund. Auch wenn ich mich selbst immer wieder dabei erwische, Dinge manuell zu machen (weil man es halt doch nicht so oft braucht), poppt immer wieder folgender Gedanke hoch:

Wenn man einmal 2 Stunden für die Automatisierung einer 10-minütigen Aufgabe investiert, hat es sich nach 12-maliger Benutzung schon gelohnt. Mal ganz zu Schweigen von Flüchtigkeitsfehlern, Wiederholbarkeit, etc.

Mir war schon länger bekannt, dass Microchip Studio Definitionsdateien für Register mitbringt, das erste Mal aktiv genutzt habe ich sie beim updizombi (den ich im Nachhinein lieber updipuppeteer genannt hätte, weniger apokalyptisch), auf dessen Hilfsscript ein Tool entstand, das viel Fleißarbeit abnimmt:

Für die bessere Lesbar- und Wartbarkeit beim Schreiben von Registern habe ich mir angewöhnt, die Namensdefinitionen der Bits zu nutzen. Dafür liegt dann mindestens die Register Summary des Chips auf dem zweiten Bildschirm:

Das Abtippen ist reine (nervige, aber sinnvolle) Fleißarbeit. Nach einigen Jahren hat dann doch die Faulheit – oder Motivation? – gesiegt und es ist ein zusammengehacktes Script entstanden, das die beim Microchip Studio mitgelieferten Definitionsdateien in Codetemplates umwandelt.

Die Ausgabe sieht dann wahlweise so

...
/// Module USART - USART
/// Register group USART0 - USART
/// Register UDR0 - USART I/O Data Register 0
UDR0 = ;
/// Register UCSR0A - USART Control and Status Register A
UCSR0A = (0<<RXC0) | (0<<TXC0) | (0<<UDRE0) | (0<<FE0) | (0<<DOR0) | (0<<UPE0) | (0<<U2X0) | (0<<MPCM0);
/// Register UCSR0B - USART Control and Status Register B
...

oder so

...
/// Module USART - USART
/// Register group USART0 - USART
/// Register UDR0 - USART I/O Data Register 0
UDR0 = 
/// Register UCSR0A - USART Control and Status Register A
UCSR0A = 
      (0<<RXC0) // USART Receive Complete
    | (0<<TXC0) // USART Transmitt Complete
    | (0<<UDRE0) // USART Data Register Empty
    | (0<<FE0) // Framing Error
    | (0<<DOR0) // Data overRun
    | (0<<UPE0) // Parity Error
    | (0<<U2X0) // Double the USART transmission speed
    | (0<<MPCM0); // Multi-processor Communication Mode
...

aus.

Den Code und Details zur Benutzung gibt es im Git-Repository. Mal sehen, welche Tülchen in dem Dunstkreis sonst noch entstehen.

Unc2Clipboard – f..k me on GitHub

es ist natürlich „fork“ gemeint.

Ich habe mich lange gesträubt, einen Webservice für SCM (source code management) zu verwenden. Ok, ehrlich gesagt: für private Basteleien ist die Faulheit relativ groß, ein Werkzeug wie Subversion, Git oder Zip-Dateien zu verwenden.

Aber manchmal muss man einfach ein bisschen mit der Zeit gehen.

Das erste „vollständige“ Projekt ist ein kleines und hoffentlich praktisches Werkzeug für alle, die gemeinsam auf Netzwerkfreigaben auf Netzwerkfreigaben arbeiten: Unc2Clipboard.

Problemstellung: Man hat eine Ordnerfreigabe als Netzlaufwerk gemappt und möchte einen Link darauf teilen. Windows hat im Kontextmenü des Explorer zwar die Funktion „Als Pfad kopieren“ (man muss die Umschalttaste gedrückt halten, damit der Eintrag erscheint), allerdings hierbei wird der Pfad mit Laufwerksbuchstaben kopiert. Dieser funktioniert auf PC A, aber nicht zwangsläufig auf PC B.

Um Netzwerkressourcen zu adressieren benutzt Windows die Uniform Naming Convention, die unabhängig von lokalen Mappings funktioniert.

Lösung: Mit Unc2Clipboard wird ein neuer Eintrag im Kontextmenü erzeugt, mit dem der Pfad entsprechend formatiert und in die Zwischenablage kopiert werden kann:

Der Code ist unter https://github.com/chris-heo/Unc2Clipboard zu finden, für die Mutigen gibt es auch einen v1.0 Release mit Kompilat. Auch oder gerade weil der Code mit bestem Wissen und Gewissen zusammenkopiert wurde gilt: Benutzung auf eigene Gefahr.