KEIL微库MicroLIB与程序大小

2024-08-21 16:04

本文主要是介绍KEIL微库MicroLIB与程序大小,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不使用微库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 字节
  • RO-data :-554 字节
  • RW-data :0 字节(没有变化)
  • ZI-data :-608 字节

因此,总的变化为:
Code段 + RO-data段 + RW-data段 + ZI-data段
= 5654 + 554 + 0 + 608
= 6816 字节

在这里插入图片描述

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 库 。

这篇关于KEIL微库MicroLIB与程序大小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093627

相关文章

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创