[APM32F4] MicroLIB库和半主机模式

[复制链接]
3424|23
 楼主| guguli 发表于 2023-11-28 22:56 | 显示全部楼层 |阅读模式
本帖最后由 guguli 于 2023-11-28 22:55 编辑

事情的起因是在调试程序时,发现串口助手打印结果有问题,最初以为是程序问题,经过仔细检查发现,程序没问题,就是跑不出想要的结果,最后询问朋友才发现是忘记在target-option选项卡中忘记勾选USE MicroLIB。
通过查阅资料得知,MicroLIB库是针对C语言编写的基于ARM嵌入式应用程序的高度优化的库,与ARMCompiler工具链附带的标准C库函数相比,MicroLIB具有明显的大小优势。使用MicroLIB,简化嵌入式开发操作,例如你用printf()函数的时候,就会从串口1输出字符串,当然也可以重定义到其他串口;使用MicroLIB会优化代码空间,但会降低某些程序的执行效率,效率换空间;Microlib不支持C++。
在启动文件中找到了关于MicroLIB的内容。如果勾选MicroLIB就将声明__initial_sp、__heap_base、__heap_limit为全局文件如果没定义MicroLIB就会启用双段存储器模式,执行__user_initial_stackheap。是否使用MicroLIB库会导致启动过程差异。启动文件里的__main函数,这个就是MicroLIB的入口地址,他会完成创建栈空间,创建堆空间,初始化用户可能用到的系统库等初始化动作,最后跳转到我们熟悉的main,当使用MicroLIB时,__main链接的是MicroLIB,当不使用MicroLIB时,__main链接的是标准库的C/C++;一旦在程序中调用printf等函数时,会让MCU进入半主机模式,进而程序会在__main位置卡死。使用C标准库(stdio.h)中的函数,例如printf()之类的函数,会进入半主机模式,发生软件异常,会导致程序无法运行。
若不使用MicLIB微库,则需添加代码退出半主机模式并重定向printf()函数。
前面说到,使用MicLIB微库优化代码空间,通过对比发现优化空间并不大。
使用MicLIB微库:

不使用MicLIB微库:


图片1.png
图片2.png
图片3.png
图片4.png
51xlf 发表于 2023-12-3 22:26 | 显示全部楼层
MicroLIB库通常由微控制器供应商提供,可以根据不同的微控制器型号进行选择和使用。
backlugin 发表于 2023-12-4 09:39 | 显示全部楼层
与标准C库相比,MicroLIB提供了许多嵌入式系统所需的显着代码大小优势。
robincotton 发表于 2023-12-4 11:21 | 显示全部楼层
MicroLIB库特别适用于没有操作系统支持的裸机编程环境。
mikewalpole 发表于 2023-12-4 14:59 | 显示全部楼层
MicroLIB库主要是用于优化程序存储和运行效率的,而半主机模式则是为了提供更加便利的调试手段。
qiufengsd 发表于 2023-12-4 16:22 | 显示全部楼层
MicroLIB库通常用于资源受限的嵌入式系统
tifmill 发表于 2023-12-5 11:36 | 显示全部楼层
将一些常用的C函数替换成汇编代码,以此来减少对内存的占用,提高程序运行效率。
linfelix 发表于 2023-12-5 13:29 | 显示全部楼层
MicroLIB库是一个C语言库,主要用于简化嵌入式系统的开发,提供了一些通用的功能
minzisc 发表于 2023-12-5 14:13 | 显示全部楼层
半主机模式则用于在开发时提供硬件的模拟
hudi008 发表于 2023-12-5 14:58 | 显示全部楼层
MicroLIB库主要作用是提供一些标准的函数库,而半主机模式则是一种机制
robertesth 发表于 2023-12-5 15:20 | 显示全部楼层
半主机模式是在嵌入式系统中通过修改操作系统或硬件配置来实现的,通常需要特定的硬件支持。
adolphcocker 发表于 2023-12-5 17:38 | 显示全部楼层
MicroLIB库是一个高度优化的库,适用于用C编写的基于ARM的嵌入式应用程序。
youtome 发表于 2023-12-5 17:59 | 显示全部楼层
MicroLIB库是一个小型的C库,它被设计用来在资源受限的嵌入式设备上运行。
ccook11 发表于 2023-12-5 18:16 | 显示全部楼层
旨在为嵌入式系统提供显著的代码大小优势,经过优化以最小化代码大小,某些函数的执行速度可能比ARM编译工具中可用的标准C库例程更慢。
abotomson 发表于 2023-12-5 18:42 | 显示全部楼层
半主机模式是一种机制,它使得在ARM目标上运行的代码
hilahope 发表于 2023-12-5 19:08 | 显示全部楼层
主要目的都是减小代码和数据的占用空间,提高系统的运行效率。
bestwell 发表于 2023-12-5 20:12 | 显示全部楼层
可以启用C库中的函数,如printf()和scanf()等输入与输出函数
caigang13 发表于 2023-12-6 11:08 来自手机 | 显示全部楼层
和标准库区别有好大,编译出来的代码会不会更小。
febgxu 发表于 2023-12-6 15:40 | 显示全部楼层
半主机模式主要应用于需要实现主机功能的嵌入式系统
benjaminka 发表于 2023-12-6 16:02 | 显示全部楼层
MicroLIB库是一种用于嵌入式系统开发的C语言库,它提供了一些精简版的C语言函数,用于替代标准C库中的函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部