您的位置:首页 > 其它

STM32 use microlib是干什么的

2016-04-25 23:13 651 查看
1.选上”Use MicroLIB”这是KEIL自带的一个简易的库,例如你用printf函数的时候,就会从串口1 输出字符串,直接默认定向到串口1

2.microlib 是缺省 C 库的备选库。 它用于必须在极少量内存环境下运行的深层嵌入式应用程序。 这些应用程序不在操作系统中运行。microlib 不会尝试成为符合标准的 ISO C 库。 
microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。某些库函数的运行速度也比较慢,例如,memcpy()。 

3.

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 只提供双区内存模型,即单独的堆栈和堆区。 

可以合理地将 microlib 与 --fpmode=std 或 --fpmode=fast 配合使用。 
microlib 中的函数负责: 

创建一个可在其中执行 C 程序的环境。 这包括: 

创建一个堆栈 

创建一个堆(如果需要) 

初始化程序所用的库的部分组成内容。 

调用 main() 以开始执行程序。 

要使用 microlib 构建程序,必须使用命令行选项 ??library_type=microlib。 根据需要,编译器、汇编程序或链接器可使用此选项处理不同的文件。 将此选项与链接器配合使用时,将覆盖所有其他选项。

4.

//加入以下代码,支持printf函数,而不需要选择use MicroLIB 

#if 1 

#pragma import(__use_no_semihosting)              

//标准库需要的支持函数                  

struct __FILE  

{  

int handle;  

};  

FILE __stdout;        

//定义_sys_exit()以避免使用半主机模式     

_sys_exit(int x)  

{  

x = x;  

}  

//重定义fputc函数  

int fputc(int ch, FILE *f) 

{       

#ifdef COM_EX 

com_snd(COM2, 1, (unsigned char*)&ch); 

#else 

com_snd(COM1, 1, (unsigned char*)&ch); 

#endif 

return ch; 



#endif  

/*使用microLib的方法,在keil里面要勾选“Use MicroLIB”*/ 

// 以便使用 printf 函数 

// #define 

UTCHAR_PROTOTYPE int fputc(int ch, FILE *f) 

// 

UTCHAR_PROTOTYPE 

// { 

// #ifdef COM_EX 

//  com_snd(COM2, 1, (unsigned char*)&ch); 

// #else 

//  com_snd(COM1, 1, (unsigned char*)&ch); 

// #endif 

// 

//  return ch; 

// }  

我试了试确实是可以,不知道,如果不用Use MicroLIB,prinft 和sprintf  其他影响不,我去验证一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: