MicroLib微库和ARM标准C库有什么区别?

关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | 嵌入式专栏

我们在使用Keil MDK编程,用到printf打印输出时,通常都会使能Keil工具自带的微库(MicroLib):

下面就来讲讲关于Keil MDK中的这个MicroLib微库。

1什么是MicroLib?

MicroLib是针对以C语言编写的基于ARM嵌入式应用程序的高度优化的库

与ARM Compiler工具链附带的标准C库相比,MicroLib具有明显的代码大小优势。

上图是一个性能基准测试代码,通过上图可以发现,微库在不同内核下代码量明显少很多。

补充:

C语言标准库,我们经常都会调用,比如:<stdio.h>、 <stdlib.h>、 <string.h>、 <math.h>、 <error.h>、 <assert.h>等库文件。

在这些文件下还有很多各类库函数,比如:printf()、 malloc()、 memcpy()、 strncpy()等。

2微库和ARM标准C库区别

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

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

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

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

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

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

3最后

微库函数也是一种函数,其很多库函数原型在网上都能找到,如果你有特殊需求,可以不用微库,在库函数原型的基础上进行修改。

比如:你的项目经过验证,发现微库的代码量,或者运行速度都不理想的情况下,可以自己修改原型函数。

当然,在万不得已的情况下才建议修改原型函数。通常还是建议直接使用微库,毕竟经过别人多次验证的库,出现bug的概率更小。

------------ END ------------

后台回复『Keil系列教程』『嵌入式软件设计与开发』阅读更多相关文章。

欢迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

<think>嗯,用户问的是MicroLIB是什么,我需要先回忆一下MicroLIB的相关知识。MicroLIB应该是一个C标准的替代品,主要用于嵌入式系统。对吧? 首先,得确认MicroLIB的基本定义。它是为资源受限的环境设计的,比如控制器,对吧?所以体积小、代码占用少应该是它的特点。对了,用户可能想知道为什么需要它,以及标准区别。 然后,主要特点应该包括更小的代码体积,减少内存占用。可能还提到它不支持某些标准的功能,比如文件I/O或者宽字符,这样能节省空间。另外,启动时间更短,适合实时系统。 应用场景的话,肯定是嵌入式开发,比如STM32、ARM Cortex-M这些平台。Keil MDK里默认使用MicroLIB,对吧?需要提到这一点,用户可能是在用Keil所以遇到相关问题。 接下来要考虑用户可能的深层需求。比如他们在编译时遇到链接错误,或者需要优化内存,所以想了解MicroLIB是否适用。需要说明优缺点,帮助用户决定是否使用。 还有注意事项,比如某些函数性能不如标准,或者兼容性问题。比如printf函数的行为不同,可能只支持少量格式,或者需要重定向底层函数如_syscalls.c里的函数。 需要结构清晰,分点解释,先定义,再特点,应用,最后注意事项。确保用中文,避免专业术语过多,但保持准确。同时检查LaTeX格式是否符合要求,虽然这个问题可能不太涉及数学公式,但如果有变量或代码示例的话,要用正确的格式。 现在组织一下内容:首先介绍MicroLIB是什么,然后主要特点分点列出,应用场景,标准区别,使用时的注意事项。这样用户能逐步了解,并且知道如何应用。</think>MicroLIB 是一个专为嵌入式系统设计的轻量级 C 标准替代品,主要应用于资源受限的控制器(MCU)环境。以下是其关键信息: --- ### 一、基本定义 - **目标场景**:针对 ARM Cortex-M 等低内存、低功耗的嵌入式设备。 - **开发者**:由 ARM 公司开发,集成在 Keil MDK 等编译工具链中。 - **核心特点**:代码体积小(通常比标准小 10-20 倍)、内存占用低、启动速度快。 --- ### 二、主要特点 1. **精简代码** - 移除不常用功能(如文件 I/O、宽字符支持),仅保留基本函数(如 `printf`, `malloc`)。 - 示例:`printf` 仅支持部分格式(如 `%d`, `%s`),不支持浮点(需手动启用)。 2. **优化内存** - 堆/栈配置更灵活,默认堆大小仅 1KB(可手动调整)。 - 静态链接策略,避免冗余代码。 3. **快速启动** - 无复杂初始化流程,适合实时性要求高的系统。 --- ### 三、与标准 C 区别 | **特性** | **MicroLIB** | **标准 (如 newlib)** | |------------------|--------------------|------------------------| | 内存占用 | 极低(KB 级) | 较高(MB 级) | | 功能完整性 | 部分功能缺失 | 完整支持 ANSI C | | 浮点支持 | 需额外配置 | 默认支持 | | 适用场景 | 裸机/RTOS 嵌入式 | Linux/桌面应用 | --- ### 四、典型应用场景 1. **ARM Cortex-M 开发**(如 STM32、NXP LPC 系列)。 2. **Keil MDK 项目**:默认启用 MicroLIB,需在工程设置中勾选。 3. **实时控制系统**:如传感器数据处理、电机控制等。 --- ### 五、使用注意事项 1. **功能限制**: - 无 `fork()`、`tmpfile()` 等系统级函数。 - `printf` 默认不输出浮点(需在编译选项中添加 `--u_printf_float`)。 2. **重定向系统调用**: - 需手动实现底层函数(如 `_write()` 用于串口输出): ```c int _write(int fd, char *ptr, int len) { HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, 1000); return len; } ``` 3. **性能权衡**: - 部分函数(如 `memcpy`)可能未针对速度优化,需根据需求评估。 --- ### 六、启用方法(以 Keil MDK 为例) 1. 打开工程选项 → Target 标签页 → 勾选 **Use MicroLIB**。 2. 若需浮点打印,在 Linker 选项中添加 `--u_printf_float`。 --- 通过 MicroLIB,开发者能在资源受限的嵌入式设备中高效运行 C 程序,但需根据具体需求权衡功能完整性。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strongerHuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值