我正在寻找一款适用于ARM7微控制器上的嵌入式小型libc,结合freertos使用。
我已经看过了newlib,但它对我的需求来说有些过于复杂。Newlib在许多函数(如printf())中调用malloc(),这对于小型嵌入式实时系统来说并不好。
是否有人知道一款小巧、可移植、开源的libc实现,能够适用于我的应用程序?
我正在寻找一款适用于ARM7微控制器上的嵌入式小型libc,结合freertos使用。
我已经看过了newlib,但它对我的需求来说有些过于复杂。Newlib在许多函数(如printf())中调用malloc(),这对于小型嵌入式实时系统来说并不好。
是否有人知道一款小巧、可移植、开源的libc实现,能够适用于我的应用程序?
PDCLib 可能 适合您的需求。然而,它仍然是不完整的 [链接失效],可能需要进行更多的实际测试。其作者在SO上使用用户名DevSolar。
更新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()
。
优点:不再调用malloc()
。
缺点:它不支持格式化float和double,而且这种方式并不是真正的可移植性。
printf()并不适用于小型嵌入式实时系统!事实上,它比许多方面的malloc还要糟糕。变量参数列表、非常复杂的格式化、在您不需要时支持浮点数等等。printf()带有巨大的开销,并且编译器无法将其减少,因为传递给它的每个参数都在运行时评估。
printf()可能适用于业余爱好者和初学C语言的人。但如果您是一名专业程序员,您真的应该编写自己的串行监视器/LCD例程。这将显著提高程序性能和闪存消耗。
printf
并无不妥,问题在于某些 printf
实现会调用 malloc
和执行各种无用操作。一个简单的 printf
实现(不带浮点数或者打印浮点数时忽略精度问题),也不包含 POSIX i18n 的 %n$
参数限定符,只需要约 2k 的代码便可实现。这样的实现使得调用应用程序可以更小、更简单,避免了将类似 printf
的功能无处不在地重复。 - R.. GitHub STOP HELPING ICEprintf()
。免责声明:我没有使用过它,但它似乎结构良好且正在积极开发中。