2010-02-04 2 views
5

Ich wurde beauftragt, die Bibliotheken für den Legacy-Embedded-C-Compiler meines Unternehmens um die Unterstützung von Streams (C89/C90) zu erweitern. Unsere Zielhardware hat normalerweise 1 MB oder weniger Coderaum und hat kein Betriebssystem.Implementieren von C-Datenströmen (FILE *, fopen, fread usw.) auf der eingebetteten Plattform

Wir haben viele Stream-ähnliche Implementierungen in der Codebasis, die ich als Ausgangspunkt verwenden kann. Zum Beispiel eine Konsole, die über einen TCP-Socket oder einen seriellen Port arbeitet, ein Webserver, der von FAT auf SD-Karte oder In-Memory-Datei liest, und sogar ein Firmware-Updater, der von vielen Quellen liest.

Bevor ich das Rad neu erfinde, frage ich mich, ob es Implementierungen gibt, die ich entweder portieren oder als Ausgangspunkt für meine Arbeit verwenden könnte. Obwohl wir unseren Kunden den vollständigen Quellcode zur Verfügung stellen, ist GPL-lizenzierter Code keine Option, da unsere Kunden den Quellcode nicht für ihre Produkte freigeben möchten.

Kann jemand ein Buch (mit Anmerkungen versehene Unix-Quelle, CompSci-Text) oder eine öffentlich zugängliche/BSD-lizenzierte Quelle empfehlen? Ich würde es vorziehen, ein älteres Betriebssystem zu betrachten, das auf ein einzelnes Gerät abzielt, da aktuelle Betriebssysteme ein Wirrwarr von Makros und Ebenen von Typdefinitionen enthalten, die das Folgen selbst einer einfachen Strukturdefinition erschweren.

Antwort

8

Werfen Sie einen Blick auf P. J. Plauger Buch The Standard C Library, die im Detail eine mögliche Implementierung der kompletten C89-Standardbibliothek beschreibt.

+0

Genau das, was ich suche - ich werde es vor dem Ende des Tages bestellen. Vielen Dank! – tomlogic

+2

Ein sehr gutes Buch, aber beachten Sie, dass die im Buch veröffentlichte Bibliotheksquelle nicht frei verteilbar ist. Genau genommen müssten Sie die Bibliothek selbst neu implementieren (keine große Aufgabe, aber je nachdem, wie streng Ihre Firma in Bezug auf IP ist, können einige Reifen durchgespult werden müssen). Beachten Sie, dass Plauger die Bibliothek verkauft und sie mit Weiterverkaufsrechten verkauft. Die MSVC-Bibliothek und die IAR-Bibliothek, die ich momentan verwende, sind beide ursprünglich von Plaugher's Dinkumware lizenziert, und ich bin mir sicher, dass einige andere Compiler-Anbieter das gleiche tun. Ich habe keine Ahnung, wie hoch die Kosten wären, wenn du diesen Weg gehen würdest. –

+0

Eine schnelle Folge - ich habe das Buch, und es war eine gute Referenz. Den Kommentar zu den stdlib-Auszügen aus dem C90-Dokument kommentieren. Ich konnte einen Plan für die Aktualisierung unserer vorhandenen Bibliothek nach C90-Konformität dokumentieren und arbeitete an einem Design, um Streams vollständig zu unterstützen. Danke für den Tipp, Neil. – tomlogic

2

Wäre nicht * BSD (Net | Open | Free) 's libc geeignet? Zumindest als Ausgangspunkt.

5

Sie sollten in der Lage sein, das meiste von dem, was Sie brauchen, aus dem Quellcode für das GNU C standard library zu ziehen. Es ist lizenziert mit der Lesser GPL, was bedeutet, dass Sie eine Verbindung zur Bibliothek herstellen können, ohne die Lizenz Ihrer Software zu beeinträchtigen (oder Ihre Kunden zur Freigabe ihres Codes zu zwingen). Dies auf Ihre Plattform zu portieren (und somit den LGPL-Ed-Code in seiner eigenen Bibliothek zu halten) ist möglicherweise einfacher als die eigene von Grund auf zu implementieren.

Mehrere verschiedene Projekte haben GNU GLIBC übernommen und für Embedded-Systeme optimiert. Sie können wünschen, betrachten:

Insbesondere eglibc und uLIBC wurden entwickelt, ordnungsgemäß ausgeführt auf eingebetteten Systemen, denen eine MMU fehlt.

Sie können auch einen Blick auf BSD's implementation of libc

Alternativ ist es STLSoft, die (einschließlich der C-Standard lib) unter einer BSD-Lizenz mehrere Bibliotheken zur Verfügung stellt. Ich kann ihre Qualität nicht bestätigen, da ich ihren Code nicht selbst verwendet habe, aber es könnte sich lohnen, zu prüfen, ob Sie den LGPL-Code in Ihrem Projekt nicht bearbeiten können.

+0

Zur Korrektur: Newlib basiert nicht auf GNU GLIBC; es ist seine eigene Sache. Außerdem ist das meiste BSD-lizenziert oder gleichwertig, abgesehen von einigen Linux-spezifischen Stücken und ein paar anderen Dingen. In jedem Fall ist es kein schlechter Startpunkt. –

+0

@Brooks Moses: Danke für die Klarstellung – bta

0

Überprüfen Sie Ihre Entwicklungswerkzeuge. Einige Entwicklungswerkzeuge werden mit ihrer On-Source-Software für ihre Softwarebibliotheken geliefert.

Ich nahm die Quelle für den Compiler printf und angepasst für einen Debug-Port auf einem Embedded-System. Es gibt weniger Arbeit, wenn Sie eine Grundlage zum Bauen haben.

+0

Das ist, was ich tue - Quelle zu den Softwarebibliotheken für das Entwicklungstool hinzufügen, das wir verkaufen. – tomlogic