Ergebnis 1 bis 4 von 4

Thema: [C Preprozessor] Text in Define oder ID umwandeln

  1. #1
    Registered User
    Registriert seit
    Oct 2007
    Beiträge
    246
    Renommee
    234

    Lightbulb [C Preprozessor] Text in Define oder ID umwandeln

    Für ein Projekt soll das Logging abgestellt werden und bei Bedarf wieder aktiviert werden. Soweit ist das kein Problem.
    Die Daten müssen aber über UART übertragen werden. Dabei will ich nur die benötigten Daten übertragen.

    Die Daten werden aktuell folgendermaßen über die serielle Schnittstelle gesendet:

    Code:
    log("ganz wichtige Daten mit Wert %d %d\n", a, b);
    Effizienter wäre es allerdings, nur die Werte a, b und eine Text_ID zu übertragen.
    Da aber der Text, welcher an verschiedenen Stellen auch gleich sein kann und es auch ist, nicht immer durch ein
    #define im Quellcode ersetzt werden soll, suche ich nach einer Möglichkeit, diese automatisch beim Kompilieren erzeugen zu lassen.
    Es soll dann eine Art Datenbank als Header erstellt werden.

    log(TEXT1, a, b); soll dann dem eigentlichen Compiler übergeben werden.
    Weiterhin soll das #define TEXT1 automatisch in einer separaten Datei angelegt werden (.h-File),
    um es im Code des Anzeigeprogramms auf dem PC wiederverwenden zu können.

    Kennt Ihr hier eine schnelle und effiziente Möglichkeit, eventuell mit Makros, Preprozessor o.Ä.?

  2. #2
    Member
    Registriert seit
    May 2004
    Beiträge
    1.432
    Renommee
    1142

    AW: [C Preprozessor] Text in Define oder ID umwandeln

    Die möglichen Texte zu extrahieren und das Header-File zu füllen sollte mit UNIX relativ einfach sein: Die log-Aufrufe greppen und mit sed defines daraus machen.

    Weiter kann ich Dir nicht helfen, da ich das noch nicht ganz durchschaue. Verstehe ich es richtig, dass Du pro Text zwei defines haben willst, nämlich einmal eine numerische ID, die dann in die log-Funktion gefüttert wird und einmal den dazugehörigen Text?

  3. #3
    Registered User
    Registriert seit
    Oct 2007
    Beiträge
    246
    Renommee
    234

    AW: [C Preprozessor] Text in Define oder ID umwandeln

    Danke für die Antwort

    z.B.

    PHP-Code:
    // main.c
    int main()
    {
      ...
      
    log("Messwerte 1:%d %d %d\n"abc);
      
    log("Messwerte 2:%d %d %d\n"def);
      ...
      
      
    log("Ganz wichtiger Infotext\n");
      
    log("Messwerte 1:%d %d %d\n"xyz);

     return 
    0;

    daraus soll nach dem Durchlauf des preprozessors folgendes rauskommen:

    PHP-Code:
    // main.c
    #include "data.h"
    int main()
    {
      ...
      
    log(TEXT1abc);
      
    log(TEXT2def);
      ...
      
      
    log(TEXT3);
      
    log(TEXT1xyz);

     return 
    0;

    je nachdem, ob ich jetzt die Datei für das µC System kompiliere, wird entweder die ID verwendet (welche man noch anpassen kann)
    oder die echte Nachricht. Das Header kann man dann auch im Zielsystem verwenden und entsprechend menschenlesebare Logeinträge verweden.
    Wie mans genau verpackt, binär, TLV oder als CSV kann man immer noch definieren.

    PHP-Code:
    //dataid.h - auch binär, CSV oder TLV kodierung möglich
    #define TEXT1 "1,%d,%d,%d"
    #define TEXT2 "2,%d,%d,%d"
    #define TEXT3 "3" 
    PHP-Code:
    //datatxt.h
    #define TEXT1 "Messwerte 1:%d %d %d\n"
    #define TEXT2 "Messwerte 2:%d %d %d\n"
    #define TEXT3 "Ganz wichtiger Infotext\n" 
    Somit ist es möglich, den Text als Zahlenfolge über die serielle schnittstelle zu schicken und spart Bandbreite.
    Die Texte können natürlich auch länger sein.

    @Shakademus hast du vlt ein sed Kommando für ein Makefile (nur als ersten Startpunkt)?
    Insbesondere die Nummerierung und das wiederfinden wäre wichtig, sonst habe ich viele gleiche Logeinträge, was wieder das ELF File groß macht.

  4. #4
    Member
    Registriert seit
    May 2004
    Beiträge
    1.432
    Renommee
    1142

    AW: [C Preprozessor] Text in Define oder ID umwandeln

    Ersetzung z. B. durch
    Code:
    n=0; while read line; do n=$((++n)) && echo $line | sed -e 's/log("[^"]*"/log(TEXT_main_c_'$n'/'; done < main.c
    Defines durch
    Code:
    n=0; while read line; do n=$((++n)) && echo $line | grep log\( | sed -e 's/log("\([^"]*\)".*);/#define TEXT_main_c_'$n' "\1"/'; done < main.c

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. AES oder Twofish als Ausdruckbaren Text?
    Von Cielo im Forum Kryptologie
    Antworten: 2
    Letzter Beitrag: 25.11.2012, 21:16
  2. problem mit #define
    Von thinkaboutit im Forum C / C++
    Antworten: 6
    Letzter Beitrag: 25.10.2005, 17:19
  3. .txt Dateien in .ldif oder .civ Umwandeln
    Von MackyMesser im Forum Technisches Off-Topic
    Antworten: 1
    Letzter Beitrag: 26.06.2002, 22:00
  4. Elemente oder Text drehen
    Von fizefaze im Forum VisualBasic / VBScript
    Antworten: 2
    Letzter Beitrag: 03.06.2001, 22:17
  5. Text Formatieren - Leerzeichen in Umbrüche umwandeln?
    Von -=das innere ich=- im Forum (In)Security allgemein
    Antworten: 10
    Letzter Beitrag: 08.02.2001, 22:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •