不使用微库MicroLIB
Program Size: Code=23010 RO-data=16190 RW-data=1076 ZI-data=21412
使用微库
Program Size: Code=17356 RO-data=15636 RW-data=1076 ZI-data=20804
各项缩减
代码(Code):-5654 字节,缩减了约24.55%。
只读数据(RO-data):-554 字节,缩减了约3.42%,
读写数据( RW-data) :0 字节(没有变化)
零初始化数据(ZI-data):-608 字节缩减了约2.84%。
ROM(Program Size)— 缩减15.84%
ROM包括Code和RO-data两部分。
不使用微库
Code: 23010 bytes
RO-data: 16190 bytes
ROM总大小: 23010 + 16190 = 39200 bytes
使用微库
Code: 17356 bytes
RO-data: 15636 bytes
ROM总大小: 17356 + 15636 = 32992 bytes
ROM缩减情况
总结
缩减大小: 39200 - 32992 = 6208 bytes
缩减比例: (6208 / 39200) * 100% ≈ 15.84%
RAM(Data Size)— 缩减 2.70%
RAM包括RW-data和ZI-data两部分。
不使用微库
RW-data: 1076 bytes
ZI-data: 21412 bytes
RAM总大小: 1076 + 21412 = 22488 bytes
使用微库
RW-data: 1076 bytes(未变化)
ZI-data: 20804 bytes
RAM总大小: 1076 + 20804 = 21880 bytes
RAM缩减情况
总结
缩减大小: 22488 - 21880 = 608 bytes
缩减比例: (608 / 22488) * 100% ≈ 2.70%
在这里插入图片描述
MicroLib 是 Keil MDK-ARM 中针对基于 ARM 的嵌入式应用程序优化的 C 语言库,它相比于标准 C 库,在代码大小上具有显著的优势,特别适用于对存储空间要求严格的嵌入式系统 。MicroLib 专为深度嵌入式应用设计,优化了代码和数据内存的使用,但牺牲了一部分功能和性能。例如,它不支持文件 I/O 或宽字符,且某些函数执行速度可能比标准库慢 。
MicroLib 的主要特点包括:
为无操作系统的嵌入式应用设计。
优化以减少代码占用,但可能在执行速度上有所折中。
不支持 ANSI C 标准中的某些特性,如文件 I/O、宽字符支持等。
不支持与操作系统交互的函数,如 abort()、exit() 等。
对浮点数的支持有限,不完全符合 IEEE 754 标准 。
在使用 MicroLib 时,可以通过在 µVision 中勾选 “Use MicroLIB” 选项来启用。这将自动链接 MicroLib 并减小程序大小。需要注意的是,MicroLib 从 MDK-ARM v3.1 版本开始包含在内 。如果需要使用符合 ANSI C 标准的 stdio.h 库,可以通过特定的编译器指令来启用 。
开发者在使用 MicroLib 时应考虑到其限制,例如 main 函数不能带参数也不能返回值,且不生成信号,除非显式调用 raise() 来产生信号。此外,MicroLib 不支持多字节或宽字符字符串,也不支持单或双区内存模型,仅提供双区内存模型 。
在实际开发中,如果项目对代码空间有严格要求,可以选择使用 MicroLib 来减小应用程序的体积。但若应用需要更多标准库支持的功能,或者在操作系统环境中运行,则可能需要使用更完整的标准 C 库 。
|