2010-02-04 1 views
5

Мне было поручено добавить поддержку потоков (C89/C90) в библиотеки для встроенного компилятора C моей компании. Наше целевое оборудование обычно имеет 1 МБ или меньше пространства кода и не имеет операционной системы.Реализация потоков файлов C (FILE *, fopen, fread и т. Д.) На встроенной платформе

У нас есть много потоковых реализаций всей кодовой базы, которые я могу использовать в качестве отправной точки. Например, консоль, работающая через сокеты TCP или последовательный порт, веб-сервер, который читает с FAT на SD-карте или в памяти, и даже прошивку, которая читает из многих источников.

Прежде чем я пойду и заново изобретаю колесо, мне интересно, существуют ли существующие реализации, которые я мог бы использовать или использовать в качестве отправной точки для моей работы. Несмотря на то, что мы предоставляем полный исходный код нашим клиентам, лицензионный код GPL не является вариантом, так как наши клиенты не хотят выпускать исходный код для своих продуктов.

Может ли кто-нибудь рекомендовать книгу (аннотированный источник Unix, текст CompSci) или источник, основанный на общедоступном домене/BSD? Я бы предпочел посмотреть на более старую ОС, ориентированную на одно устройство, поскольку текущие операционные системы содержат путаницу макросов и слоев typedefs, которые затрудняют выполнение даже простого определения структуры.

ответ

8

Посмотрите на книгу P.J. Plauger в The Standard C Library, который подробно описывает одну возможную реализацию полной стандартной библиотеки C89.

+0

Точно, что я ищу - я закажу его до конца дня. Благодаря! – tomlogic

+2

Очень хорошая книга, но обратите внимание, что источник библиотеки, опубликованный в книге, не является свободно распространяемым. Строго говоря, вам придется переопределить lib самостоятельно (не огромная работа, но зависящая от того, насколько строгая ваша компания относится к IP, может потребоваться перехват обручей). Обратите внимание, что Plauger продает библиотеку и продает ее с правами перераспределения. Библиотека MSVC и библиотека IAR, которую я сейчас использую, первоначально лицензированы у Dinkumware Plaugher, и я уверен, что некоторые другие производители компиляторов делают то же самое. Я понятия не имею, какова будет цена, если вы хотите пойти по этому маршруту. –

+0

Быстрое наблюдение - я получил книгу, и это была отличная рекомендация. Просто был комментарий к отрывкам stdlib документа C90. Я смог задокументировать план обновления существующей библиотеки до соответствия требованиям C90 и работал над проектом, полностью поддерживающим потоки. Спасибо за подсказку, Нейл. – tomlogic

2

Не будет * BSD (Net | Open | Free) libc подходит? По крайней мере, в качестве отправной точки.

5

Вы должны убрать большую часть того, что вам нужно, из исходного кода для GNU C standard library. Он лицензируется с помощью Lesser GPL, что означает, что вы можете ссылаться на библиотеку, не затрагивая лицензию своего программного обеспечения (или вынуждая своих клиентов выпускать свой код). Портирование этого на вашу платформу (таким образом, сохранение кода LGPL-ed в его собственной библиотеке) может быть проще, чем реализовать свой собственный с нуля.

Несколько различных проектов приняли GNU GLIBC и оптимизировали его для встроенных систем. Вы можете посмотреть на сайте:

В частности, EGLIBC и uLIBC были разработаны, чтобы работать должным образом на встроенных системах, в которых отсутствует MMU.

Вы также можете посмотреть на BSD's implementation of libc

В качестве альтернативы есть STLSoft, который предоставляет несколько библиотек (включая стандартный Lib C) под лицензией BSD. Я не могу подтвердить их качество, так как я сам не использовал их код, но, возможно, стоит взглянуть на то, что вы не можете использовать код LGPL-ed в своем проекте.

+0

В качестве поправки: Newlib не основан на GNU GLIBC; это его собственная вещь. Кроме того, большинство из них лицензированы BSD или эквивалентны, кроме некоторых частей, специфичных для Linux, и нескольких других вещей. В любом случае, это не плохое место для начала. –

+0

@Brooks Moses: Спасибо за разъяснение – bta

0

Проверьте свои инструменты для разработки. Некоторые средства разработки поставляются с исходным кодом для своих программных библиотек.

Я взял источник для компилятора printf и адаптирован для порта отладки встроенной системы. Работы, когда у вас есть основа для создания, меньше.

+0

Это то, что я делаю - добавление источника в библиотеки программного обеспечения для инструмента разработки, который мы продаем. – tomlogic