芯源半导体CW32
直播中

吴湛

11年用户 968经验值
擅长:电源/新能源
私信 关注
[经验]

微库与标准C库的区别

因为针对Arm的嵌入式系统,通常存储(代码)资源相对较小,为了使其能用上标准函数,工程师就针对Arm嵌入式系统,对标准C库进行了优化,以减小代码量。


优化标准库,肯定会带来一些差异,下面分享几点主要的差异:

1.代码(数据)量更小(对比上图)。

2.缺少一些不常用标准库函数,比如:文件 I/O 的库函数。

3.微库最大程度优化代码量,可能会导致有些库代码运行速度更慢。

4.可用于RTOS这类系统中,但不支持在像Windosw这类系统中。



MicroLib是缺省c库的备选库,它可装入少量内存中,与嵌入式应用程序配合使用,且这些应用程序不在操作系统中运行。

MicroLib进行了高度优化以使代码变得很小,功能比缺省c库少,不具备某些ISO c特性,部分库函数的运行速度也比较慢,如内存拷贝函数memcpy()。

MicroLib与缺省c库之间的主要差异在网上有许多文章都有写到,这里摘抄记录:


  • MicroLib 不符合 ISO C 库标准。不支持某些 ISO 特性,并且其他特性具有的功能也较少。

  • MicroLib 不符合 IEEE 754 二进制浮点算法标准。

  • MicroLib 进行了高度优化以使代码变得很小。

  • 无法对区域设置进行配置。缺省 C 区域设置是唯一可用的区域设置。

  • 不能将 main() 声明为使用参数,并且不能返回内容。

  • 不支持 stdio,但未缓冲的 stdin、stdout 和 stderr 除外。

  • MicroLib对 C99 函数提供有限的支持。

  • MicroLib不支持操作系统函数。

  • MicroLib不支持与位置无关的代码。

  • MicroLib不提供互斥锁来防止非线程安全的代码。

  • MicroLib不支持宽字符或多字节字符串。

  • 与stdlib不同,MicroLib不支持可选择的单或双区内存模型。MicroLib只提供双区内存模型,即单独的堆栈和堆区。


更多回帖

发帖
×
20
完善资料,
赚取积分