25

我正在寻找一个小型 libc,用于在 ARM7 微控制器上与 freertos 一起使用。我看过 newlib,但它对我的需要来说有点太复杂了。Newlib 在许多函数(例如 printf())中调用 malloc(),这对小型嵌入式实时系统不利。

有谁知道适合我的应用程序的小型可移植开源 libc 实现?

4

8 回答 8

12

PDCLib 可能适合您的需求。但是,它仍然不完整 [broken link],可能需要更多的实际测试。它的作者在 SO 上是DevSolar

2012 年 11 月 1 日更新:截至 2012 年 8 月 14 日,开发工作已由 Owen Shepherd 接管,并配备了新的主页bitbucket 存储库 [断开的链接,使用链接]

2015 年 10 月 31 日更新:专用网站似乎已经死了,但仍然可以在 bitbucket上找到代码。对该存储库的最后一次提交发生在 2014 年 11 月 24 日。

2016 年 7 月 12 日更新:网站已备份,DevSolar 于 2016 年 3 月 1 日再次开始提交。

于 2011-02-07T13:09:54.297 回答
10

我在具有 32kB RAM 的 Cortex_M3 上使用 newlib,并消除malloc()您可以使用siprintf()sniprintf().

优点:不再调用malloc().

缺点:它不支持格式化floatdouble,并且这种方式不是真正可移植的。

于 2011-02-10T11:29:11.167 回答
7

如果您使用 newlib 并且没有实现 sbrk 系统调用,那么您使用的任何需要 malloc 的函数都会生成链接器错误,这将防止您无意中使用需要动态内存的调用。所以我建议你这样做,然后简单地避免那些导致链接器错误的函数。您可以修改或覆盖您不想使用的任何库函数。

于 2011-02-12T00:19:41.793 回答
3

printf () 不适合小型嵌入式实时系统!

实际上它在很多方面都比 malloc 差。可变参数列表、非常复杂的格式、不需要时的浮点数支持等。 printf() 会带来巨大的开销,编译器将无法减少它,因为传递给它的每个参数都在运行。

printf() 对于仍在学习 C 的业余爱好者和初学者来说可能还可以。但如果你是一名专业程序员,你真的应该编写自己的串行监视器/LCD 例程。您将显着提高程序性能和闪存消耗。

于 2011-02-07T14:00:46.133 回答
2

我有类似的需求,发现klibc非常适合它。唯一的缺点(用于商业用途)是该发行版包含一些 GPL 许可的文件,尽管其中大部分是 BSD 许可的。我在这里破解了它的最小版本。

这比 PDCLib 更受限制,如果您只需要一些基本功能,例如 printf 和 strtok,则适用。编译为仅 4kB,包含所有功能。

于 2011-09-09T20:21:04.653 回答
2

您可能想查看Embedded Artistry libc,它承诺最小化且经过良好测试。它包括一个无 malloc 的printf(). 免责声明:我没有使用过它,但它看起来结构良好并且正在积极开发。

于 2019-09-03T17:48:30.320 回答
1

您可以查看 LGPL µClibc,它应该接近glibc但更适合嵌入式系统。

它还有一个引用其他开源 C 库的页面,包括newlibeCos,它们可能更适合非 Linux 环境。

于 2011-02-07T13:11:46.360 回答
-2

也许看看uClibcEGLIBC

于 2011-02-07T13:12:11.940 回答