OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 33690|回复: 23

use microlib问题

[复制链接]

74

主题

209

帖子

0

精华

高级会员

Rank: 4

积分
919
金钱
919
注册时间
2012-1-14
在线时间
5 小时
发表于 2012-2-2 23:32:27 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-2 23:53:04 | 显示全部楼层
回复【楼主位】1126163471:
---------------------------------
microlib 是缺省 C 库的备选库。 它用于必须在极少量内存环境下运行的深层嵌入式应用程序。 这些应用程序不在操作系统中运行。microlib 不会尝试成为符合标准的 ISO C 库。
microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。某些库函数的运行速度也比较慢,例如,memcpy()。

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-2 23:54:15 | 显示全部楼层
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。 根据需要,编译器、汇编程序或链接器可使用此选项处理不同的文件。 将此选项与链接器配合使用时,将覆盖所有其他选项。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

74

主题

209

帖子

0

精华

高级会员

Rank: 4

积分
919
金钱
919
注册时间
2012-1-14
在线时间
5 小时
 楼主| 发表于 2012-2-3 11:05:14 | 显示全部楼层
额  稀里糊涂的感觉,不过还是谢谢原子了!!
回复 支持 反对

使用道具 举报

47

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2011-12-22
在线时间
0 小时
发表于 2012-10-2 08:52:55 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
看到一句话---------选上”Use MicroLIB”这是KEIL自带的一个简易的库,例如你用printf函数的时候,就会从串口1 输出字符串-------此话的意思是否是选上”Use MicroLIB”后就可以直接使用printf进行串口输出了?
Charlesgnehc
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-10-2 10:18:45 | 显示全部楼层
回复【5楼】zhangcheng:
---------------------------------
是,直接默认定向到串口1.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-3-19
在线时间
0 小时
发表于 2013-4-3 22:06:20 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥,但是,我没有选Use MicroLIB,也把
#if 1
#pragma import(__use_no_semihosting)      
.......
#endif
也注释掉了,程序中有printf,但是编译确实没有错和警告?
专注挽尊30年,这些年我挽过的楼主连起来可以绕地球30圈。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-3 22:44:35 | 显示全部楼层
是不会报错,只是你没法用而已。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-5-17
在线时间
2 小时
发表于 2013-6-28 20:56:06 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
原子哥,我自己建了个工程,没有勾选Use MicroLIB,编译器没报错,但是下载程序后不能运行。
请问要想正常运行非要勾选Use MicroLIB吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-29 00:24:36 | 显示全部楼层
看你有没有用到库了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2013-10-6
在线时间
1 小时
发表于 2013-10-12 17:07:04 | 显示全部楼层
我在使用stm32f407 discovery调7寸屏的时候发现,不使用microlib,刷屏速度大约是1.5M个点每秒,使用该库可以将速度提高到4.5M每秒,难道差距这么大吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-12 22:43:34 | 显示全部楼层
回复【11楼】dream1e:
---------------------------------
不是吧。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-12-3
在线时间
0 小时
发表于 2013-12-19 11:01:34 | 显示全部楼层
回复【6楼】正点原子:
回复【5楼】zhangcheng:
---------------------------------
是,直接默认定向到串口1.
---------------------------------
现在最新版本的是重定义了fputc函数后就可以 不用勾选microlib了是吧 如果没有重定义那段代码
#if 1
#pragma import(__use_no_semihosting)             
//标准......

就要勾选是么
不用谢了……
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-19 16:23:07 | 显示全部楼层
回复【13楼】eling13:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-9-6
在线时间
2 小时
发表于 2014-1-16 16:07:00 | 显示全部楼层
站长知识渊博啊!
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-5-27
在线时间
0 小时
发表于 2014-5-30 10:53:43 | 显示全部楼层
又学习了一个知识点。。。。。。
回复 支持 反对

使用道具 举报

3

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2012-10-15
在线时间
4 小时
发表于 2014-6-3 14:25:14 | 显示全部楼层
使用sprintf函数的时候,运行速度特别慢
回复 支持 反对

使用道具 举报

0

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
157
金钱
157
注册时间
2014-12-25
在线时间
20 小时
发表于 2015-1-23 21:01:03 | 显示全部楼层
回复【11楼】dream1e:
---------------------------------
怎么速度差这么多啊
回复 支持 反对

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-2-26
在线时间
0 小时
发表于 2015-5-18 15:38:25 | 显示全部楼层
//加入以下代码,支持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  其他影响不,我去验证一下
回复 支持 反对

使用道具 举报

13

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2013-7-9
在线时间
6 小时
发表于 2015-10-20 17:25:24 | 显示全部楼层
回复【9楼】雪鹰:
---------------------------------
我也遇到不能运行的情况,程序中就是一个LED灯闪烁,和micro lib应该没有什么关系啊,不解
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2016-2-19
在线时间
19 小时
发表于 2016-6-2 11:51:58 | 显示全部楼层
原子哥解释精辟。然而我想知道为什么勾了之后他直接默认的就是UART1  而不是其他,这一过程中keil5到底做了什么
回复 支持 反对

使用道具 举报

2

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
981
金钱
981
注册时间
2015-9-20
在线时间
148 小时
发表于 2016-9-17 04:29:25 | 显示全部楼层
h-xiaoguaishou 发表于 2016-6-2 11:51
原子哥解释精辟。然而我想知道为什么勾了之后他直接默认的就是UART1  而不是其他,这一过程中keil5到底做了 ...

四年前的帖子大哥。。。。。。。。
回复 支持 反对

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2018-1-19 15:54:44 | 显示全部楼层
正点原子 发表于 2013-12-19 16:23
回复【13楼】eling13:
---------------------------------
是的

那到底是勾选 use microlib好呢?还是不勾好呢?勾上以后好像代码量变少了,会不会有副作用?
回复 支持 反对

使用道具 举报

55

主题

151

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2018-3-12
在线时间
53 小时
发表于 2018-9-17 08:54:33 | 显示全部楼层
正点原子 发表于 2012-10-2 10:18
回复【5楼】zhangcheng:
---------------------------------
是,直接默认定向到串口1.

“是,直接默认定向到串口1. ”
如果我沟了这个,要使用串口1是不是还是要按照IO口复用的程序来配置串口呀?
如果我沟了这个,不使用串口1,是不是直接忽视这个,然后按照串口配置的一般模式配置其他的串口就可以了,就可以使用其他的串口输出?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 05:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表