Небольшой libc для встроенных систем - PullRequest
25 голосов
/ 07 февраля 2011

Я ищу маленький libc для встраиваемого использования с freertos на микроконтроллере ARM7.Я посмотрел на newlib, но это слишком сложно для моих нужд.Newlib вызывает malloc () для ряда функций (например, printf ()), что не подходит для небольших встроенных систем реального времени.

Кто-нибудь знает о небольшой переносимой реализации libc с открытым исходным кодом, которая подойдет мне?приложение?

Ответы [ 7 ]

11 голосов
/ 07 февраля 2011

PDCLib может соответствовать вашим потребностям.Это все еще не завершено [неработающая ссылка] , хотя и, вероятно, нуждается в гораздо большем количестве реальных испытаний.Его автор: DevSolar здесь, на SO.

обновление 2012-11-01: Начиная с 2012-08-14, разработка перешла к Оуэну Шепердувместе с новой домашней страницей и хранилище битовых корзин [неработающая ссылка, используйте эту ] .

обновление 2015-10-31: Кажется, что выделенный веб-сайт мертв, но код все еще можно найти в битовой корзине .Последнее принятие в этот репозиторий произошло 2014-11-24.

обновление 2016-07-12: Сайт вернулся, и DevSolar снова начал фиксироваться в 2016-03-01.

9 голосов
/ 10 февраля 2011

Я использую newlib на своем Cortex_M3 с 32 КБ ОЗУ, а для исключения malloc() вы можете использовать siprintf() или sniprintf().

Pro: больше нет вызовов malloc().

Con: не поддерживает форматирование float и double и не является действительно переносимымвот так.

6 голосов
/ 12 февраля 2011

Если вы используете newlib и не реализуете системный вызов sbrk, то любая используемая вами функция, требующая malloc, выдаст ошибку компоновщика, которая не позволит вам непреднамеренно использовать вызов, требующий динамической памяти. Поэтому я бы посоветовал вам сделать это, а затем просто избегать тех функций, которые вызывают ошибку компоновщика. Вы можете изменить или переопределить любые библиотечные функции, которые вы не хотите использовать.

3 голосов
/ 07 февраля 2011

printf () не подходит для небольших встроенных систем реального времени!

На самом деле это во многих отношениях хуже, чем malloc. Переменные списки аргументов, очень сложное форматирование, поддержка чисел с плавающей запятой, когда вам это не нужно, и т. Д. И т. П. Printf () идет с огромными накладными расходами, и компилятор не сможет его уменьшить, так как каждый передаваемый ему параметр оценивается в во время выполнения.

printf (), возможно, подходит для любителей и начинающих, которые еще учатся C. Но если вы профессиональный программист, вам действительно следует написать свои собственные последовательные программы для монитора / LCD. Вы значительно улучшите производительность программы и потребление флэш-памяти.

2 голосов
/ 10 сентября 2011

У меня были похожие потребности, и я обнаружил, что klibc вполне подходит.Единственным недостатком (для коммерческого использования) является то, что дистрибутив включает в себя несколько файлов, лицензированных по лицензии GPL, хотя большинство из них имеет лицензию BSD.Я взломал минимальную версию этого здесь .

Это даже более ограничено, чем PDCLib, и подходит, если вам просто нужно несколько основных функций, таких как printf и strtok.Компилируется до 4 КБ со всеми включенными функциями.

1 голос
/ 07 февраля 2011

Вы можете проверить LGPL µClibc , который должен быть близок к glibc, но гораздо больше подходит для встроенных систем.

Он также имеет страницу , ссылающуюся на другие библиотеки C с открытым исходным кодом, включая newlib и eCos , которые могут больше подходить для не-Linux сред.

0 голосов
/ 07 февраля 2011

Посмотрите на uClibc и EGLIBC , возможно.

...