Ich habe bestehenden Code mit verschiedenen Debug-Meldungen. Unser Embedded-System hat keine externe Verbindung für ein Terminal. Ich möchte das printf so ändern, dass seine Ausgabe an einen Speicherort statt an STDOUT geht, der einem FIFO zugeordnet ist. Ich denke, ich muss mein eigenes Outbyte/Outnum schreiben. Ich kann einfach nicht den GNU Code finden, wo ich Dinge finden kann.C printf benutzerdefinierte Hardware
Ich betreibe einen Mikroprozessprozessor in einem Xilinx FPGA. Alle print-Anweisungen dienen zum Debuggen. Wir führen GNU-Tools (Xilinx SDK). Für die Entwicklung, konnte ein UART in das Design stecken und die UART auf ein paar Testpunkte verkabeln.
Während wir uns für die Bereitstellung bereit machen, habe ich diese Sichtbarkeit nicht mehr. Wir haben eine USB-zu-Seriell-Verbindung, aber es sieht wie ein Fifo aus, kein serieller Port zum eingebetteten System. Wir haben ein Protokoll zum Senden von Nachrichten über diesen Link. Ich dachte daran, unserem Protokoll eine Debug-Nachricht hinzuzufügen. Ich möchte meine print-Anweisung in einen Puffer umleiten und diesen Puffer dann verarbeiten.
Ich habe versucht, das vorhandene printf (xil_printf) zu nehmen und mein eigenes cc_printf zu erstellen, indem ich den Outbyte-Code umschrieb, aber einfach nicht in der Lage war, den Code weit genug zu durchforsten, um zu sehen, wie es geht. (Ehrlich gesagt, ich bin VHDL/Hardware-Typ).
Die Gesamtcodegröße beträgt Zehntausende Zeilen C-Code. Mein Abschnitt ist vielleicht 3-4 tausend Zeilen Code. Die Grundoperation besteht darin, dass Software-/Hardware-Updates des Systems über den USB-Port eingehen und in den FLASH-Speicher verschoben werden. Mein Code analysiert eingehende Pakete über die USB-zu-Seriell-Verbindung. Grundsätzlich gibt es ein Bit, das mir sagt, dass ein Paket in einem Empfangspuffer bereit ist. Ich verarbeite das Paket und schreibe nach FLASH. Als Teil des Protokolls gibt es ACK/NACKs/ABorts. Ich benutze derzeit den printf, um Status zu meiner Laborbankversion des Systems auszudrucken.
Wie gesagt, möchte ich diese Ausdrucke in unser Protokoll einbetten. Ich bin nicht mit printf verheiratet und würde eine andere Druckfunktion verwenden. Ich möchte Nachrichten und Daten ausdrucken. Wenn etwas anderes ein besserer Ausgangspunkt wäre, dann geht es mir gut. Es scheint, dass das größte Problem für mich ist, die Ausgabe des Druckes zu greifen und ihn wohin zu leiten.
'fprintf'? 'dprintf'? –
Es macht wenig Sinn, stdio.h auf eingebetteten Systemen zu verwenden. Sie verwenden wahrscheinlich eine generische UART-Druckroutine. Ihre MCU wird wahrscheinlich mit App-Notizen geliefert, die zeigen, wie Sie schnell einen UART-Treiber erstellen können. – Lundin
Welche Art und Größe des Codes (Tausende von Quellcodezeilen)? Welches Embedded-System-Ziel? Wie kompilierst du es? Mit welchem Compiler? Bitte ** bearbeiten Sie Ihre Frage **, um sie zu verbessern und zu motivieren! –