Подтвердить что ты не робот

Маленький libc для встроенных систем

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

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

4b9b3361

Ответ 1

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

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

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

update 2016-07-12: веб-сайт возвращается в исходное состояние, и DevSolar начал совершать повторные операции в 2016-03-01.

Ответ 2

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

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

Con: он не поддерживает форматирование float и double, и на самом деле он не переносится таким образом.

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Возможно, вы захотите взглянуть на Embedded Artistry libc, который обещает быть минимальным и хорошо протестированным. Включает в себя без malloc printf(). Отказ от ответственности: я не использовал это, но это кажется хорошо структурированным и активно развитым.

Ответ 8

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