嵌入式系统的小型libc

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

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

PDCLib 可能符合您的需求。 尽管如此,它仍然是不完整的 [断链] ,并且可能需要更多的实际测试。 它的作者在这里通过DevSolar进行SO。

更新2012-11-01:截至2012-08-14,开发已由Owen Shepherd接管,完成了新的主页和bitbucket存储库 [断开链接,使用此链接]

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

更新2016-07-12:网站已备份,DevSolar于2016-03-01再次开始提交。

我在带有32kB RAM的Cortex_M3上使用newlib,为了消除malloc()你可以使用siprintf()sniprintf()

Pro:不再调用malloc()

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

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

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

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

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

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

这比PDCLib更受限制,如果您只需要一些基本function,例如printf和strtok,这是合适的。 包含所有function,编译为4kB。

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

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

或许可以查看uClibc和EGLIBC 。