2010-02-04 54 views
5

我的任務是爲公司傳統嵌入式C編譯器的庫添加流支持(C89/C90)。 我們的目標硬件通常具有1MB或更少的代碼空間,並且沒有操作系統。在嵌入式平臺上實現C文件流

我們在整個代碼庫中都有很多類似於流的實現,我可以用它作爲起點。例如,通過TCP套接字或串行端口工作的控制檯,從SD卡或內存文件中的FAT中讀取的Web服務器,甚至可以從多個源讀取的固件更新程序。

在我開始重新發明輪子之前,我想知道是否有現有的實現可以作爲我工作的起點。 儘管我們向客戶提供完整的源代碼,但由於我們的客戶不想將源代碼發佈到其產品,因此GPL授權代碼不是一種選擇。

任何人都可以推薦一本書(帶註釋的Unix源代碼,CompSci文本)或公共領域/ BSD許可來源嗎?我更喜歡看一個針對單個設備的較早的操作系統,因爲當前的操作系統包含宏和層次的類型定義,使得即使簡單的結構定義也很困難。

回答

8

看看P.J. Plauger的書The Standard C Library,其中詳細描述了一個可能的實現完整的C89標準庫。

+0

正是我在找的東西 - 我會在一天結束之前訂購它。謝謝! – tomlogic 2010-02-04 18:17:45

+2

一本非常好的書,但請注意,書中發佈的圖書館來源不是免費分發的。嚴格地說,你必須自己重新實現自己的體系(不是一個大工作,但取決於你的公司對IP的嚴格程度,可能需要跳過一些環節)。請注意,Plauger出售圖書館並以重新分配權利出售。我目前使用的MSVC庫和IAR庫最初都是從Plaugher的Dinkumware許可的,我相信其他一些編譯器廠商也這樣做。如果你想要走這條路線,我不知道成本會是多少。 – 2010-02-04 18:35:07

+0

快速跟進 - 我收到了這本書,它是一個很好的參考。只需對C90文檔的stdlib摘錄進行評論就非常方便。我能夠記錄更新現有庫到C90合規性的計劃,並且一直致力於完全支持流的設計。謝謝你的提示,尼爾。 – tomlogic 2010-02-19 18:10:26

2

不會* BSD(Net | Open | Free)的libc是否合適?至少作爲一個起點。

5

您應該能夠從GNU C standard library的源代碼中獲取所需的大部分內容。它的許可證號碼爲Lesser GPL,這意味着您可以鏈接到該庫,而不會影響軟件的許可證(或強制客戶發佈其代碼)。將其移植到您的平臺(從而將LGPL編輯的代碼保存在自己的庫中)可能比從頭開始自己的實現更容易。

幾個不同的項目採用GNU GLIBC並針對嵌入式系統進行了優化。你可能想看看:

尤其EGLIBC和uLIBC設計正常運行在缺乏MMU的嵌入式系統上。

你也可以看看BSD's implementation of libc

或者有STLSoft,誰提供一個BSD許可下幾個庫(包括C標準庫)。我無法證實他們的質量,因爲我自己並沒有使用他們的代碼,但是如果你不能在你的項目中使用LGPL編碼的代碼,那麼值得一看。

+0

作爲更正:Newlib不是基於GNU GLIBC;這是它自己的東西。此外,大部分BSD許可或等效的,除了一些Linux特定的部分和一些其他的東西。 無論如何,這不是一個糟糕的地方開始。 – 2010-02-06 04:23:43

+0

@Brooks Moses:謝謝你的澄清 – bta 2010-02-08 16:07:19

0

檢查您的開發工具。一些開發工具隨附其源代碼軟件庫。

我接受了編譯器的源代碼printf,並且適用於嵌入式系統上的調試端口。當你有一個基礎來建造時,你的工作量會減少。

+0

這就是我正在做的 - 爲我們銷售的開發工具添加源代碼到軟件庫。 – tomlogic 2010-02-04 22:24:56