mikrocontroller.net

Forum: Projekte & Code Binär-Dezimal Präprozessor für Linux gcc


Autor: Daniel Stengel (danst0)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade auf Linux umgestiegen und mir gefällt die Einschränkung
des neuen Compilers, dass ich keine Binären Zahlen (alla "0b") mehr
verwenden kann, nicht, daher habe ich einen Präprozessor in Python
geschrieben, mit dem man Binärwerte in den Quelldateien automatisch in
Dezimalwerte umwandeln kann.

Ich werde ihn mir noch in mein Makefile einbauen, damit ich mich darum
nicht mehr zu kümmern brauche, ein vorläufiger Entwurf sieht so aus:

[...]
convert:
  @echo "Backup alter Source-Dateien machen..."
  mkdir ConvBackup
  cp $(PRJSRC) ConvBackup/
  @echo "Konvertieren..."
  /pfad/zur/datei/bindec.py $(PRJSRC) >> /dev/null

convbackupback:
  @echo "Backup zurück..."
  cp ConvBackup/* .
  rm -R ConvBackup/
[...]

Wichtig ist dabei vor allem das Backup der Original Quelldateien,
Binärwerte sind nunmal (vor allem bei Bitmasken, o.ä) einfach besser zu
lesen, nicht vergessen dieses dann wiederherzustellen!

Noch ein paar Anmerkungen:
Leider hat das Programm (noch) keine Fehlererkennung, es unterstützt
zudem nur exakt 8bit lange Binärwerte (z.B.: 0b10101010) und sie müssen
auch genauso geschrieben werden, alles andere führt zu unerwünschten
Ergebnissen. Aber das könnt ihr ja gerne ändern. Wäre super, wenn ihr
verbesserte Versionen wieder hier einstellt!

Natürlich kann ich keine Haftung für verlorene oder kaputte Dateien
übernehmen...;-)

Ich hoffe, irgendwer kann das Programm gebrauchen,

viele Grüße,

Daniel

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Daniel,

du solltest die binär-Werte besser prüfen.
Ein Binärwert sieht so aus:

[Trennzeichen]"0bxxxxxxxx"[Trenzeichen]
mit x=0 oder 1

schick mal folgende Teststrings durch dein Programm:
"a0babcefg"
"0B10101010"
"0b101010101010101010"

Grüße
Werner

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich bin gerade auf Linux umgestiegen und mir gefällt die
> Einschränkung des neuen Compilers, dass ich keine Binären Zahlen
> (alla "0b") mehr verwenden kann, nicht,

Das ist eigentlich keine Einschränkung, sondern der Normalfall. Das
0b... ist eine Nichstandard-Erweiterung. Ansonsten aber eine nette
Idee.
Übrigens kann man da in C++ auch mit Template-Metaprogramming was
nettes machen. Das sieht dann z.B. so aus:
#include <stdint.h>
#include <avr/io.h>

template<uint64_t>
struct Bin
{
    static const uint64_t value = (N%10) + 2 * Bin<N/10>::value;
};

template<>
struct Bin<0>
{
    static const uint64_t value = 0;
};

int main()
{
    PORTB = Bin<10010101>::value;
}

Der Overhead dieser Lösung ist 0. Das ist eine einfache Version, die
keine Prüfung der Ziffern auf 0 oder 1 macht, aber das wäre auch
möglich. Solchen Code findet man dann auch leicht per Google.

Autor: Tobias Schneider (tobias)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
was ich in diesem Zusammenhang auch schon gesehen habe sind
Headerdateien in dieser Form:

#define B00000000 0
#define B00000001 1
#define B00000010 2
#define B00000011 3
...

Das ist zwar nicht elegant aber dafuer garantiert portabel :)

Gruss Tobias

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.