嵌入式系统的小型libc

时间:2011-02-07 12:56:07

标签: c embedded libc freertos

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

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

8 个答案:

答案 0 :(得分:11)

PDCLib 可能符合您的需求。不过,它是still incomplete [断开链接] ,可能还需要更多的实际测试。它的作者在DevSolar点到了SO。

更新2012-11-01:截至2012-08-14,Owen Shepherd接管了开发工作,完成了new homepagebitbucket repository [链接断开,请使用this one]

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

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

答案 1 :(得分:9)

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

专业:不再拨打malloc()

Con:它不支持格式 float double ,并且不是真的可移植。

答案 2 :(得分:5)

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

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

您可能想研究一下Embedded Artistry libc,它保证是最少的,并且经过了严格的测试。它包括无malloc的printf()。免责声明:我没有使用过它,但是它看起来结构良好并且开发活跃。

答案 7 :(得分:-1)

或许可以查看uClibcEGLIBC