历史上的今天

今天是:2024年10月06日(星期日)

2018年10月06日 | keil中勾选microlib使用printf

发布者:Radiant777 来源: eefocus关键字:kei  microlib  printf 手机看文章 扫描二维码
随时随地手机看文章

在keil (我用的是realview mdk3.11)建立ARM的工程时

其中有一项是选 use MicroLIB


由于对KEIL不是很熟悉,于是就查了查,得到了以下信息:

microlib 是缺省 C 库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行。

microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,例如,memcpy()。

与缺省 C 库之间的差异

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。 根据需要,编译器、汇编程序或链接器可使用此选项处理不同的文件。 将此选项与链接器配合使用时,将覆盖所有其他选项。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

加入下列代码,再勾选USE_MIcro LIB,使用printf


#ifdef __GNUC__
 
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif   


PUTCHAR_PROTOTYPE
{
 
 
  USART_SendData(EVAL_COM1, (uint8_t) ch);
 
  while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
  {
  }
  return ch;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

加入下列代码,不用勾选USEmicrolib,使用printf

#if 1
#pragma import(__use_no_semihosting)                          
struct __FILE 

int handle; 
}; 
FILE __stdout;       
_sys_exit(int x) 

x = x; 

int fputc(int ch, FILE *f)
{      
while((USART1->SR&0X40)==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï   
    USART1->DR = (u8) ch;      
return ch;
}
#endif 


关键字:kei  microlib  printf 引用地址:keil中勾选microlib使用printf

上一篇:单片机中Delay延时函数的缺点与改善
下一篇:keil编译时出现错误和警告总结

推荐阅读

在Keil MDKARM中unsigned int value2=0x80000000;unsigned int value4=2147483648;value2编译时不产生警告,而value4就产生警告main.c(17): warning: #1134-D: literal treated as "long long" 解决方法: 关键是2147483648是一个字面常量,类型是int型,而不是unsigned int.上面这个语句,需要先将int类型,转换成unsigned int类型,再赋值给val...
翻译自——spectrum,Jeremy Hsu 中文和英文密码的差异对现在流行的Web服务有很大的安全影响。 无论语言和文化有何不同,中、英文互联网用户都能在通过使用“123456”等密码变体时找到共同点。但最近研究发现,从比较两种语言密码模式来看,中文密码具有显著而独特的特点,对中国以外的互联网安全具有重大影响。 令人惊讶的是,由于使用中文用户的密码只...
  工业机器人的使用越来越广泛,即使是普通群众,对工业机器人也愈来愈了解。就普通人而言,对工业机器人的认识大多停留在感性认识层面,对工业机器人的相关技术却未必了解。为此,本文中小编将对工业机器人的7大技术予以介绍。如果你对工业机器人具有兴趣,不妨继续往下阅读哦。   技术参数是不同工业机器人之间差距的直接表现形式,不同的机器人...
来源:学习军团·解放军新闻传播中心融媒体作者:解放军报记者 韩 成 通讯员 于 晨“机器人技术正在深刻改变着人类的生产和生活方式,中国空间站机械臂也助力我们完成了两次出舱任务。”9月中旬,在北京亦庄开幕的2021世界机器人大会上,神舟十二号飞行乘组3位航天员聂海胜、刘伯明、汤洪波从中国空间站传来“太空点赞”。被表扬的主角,是我国自主研...

史海拾趣

问答坊 | AI 解惑

TA8783

TA8783芯片的简单介绍…

查看全部问答∨

库存免费送!

送走了妩媚的春天,迎来了热情奔放的夏天!夏天的阳光,是炎热的,它像一个热情奔放的女郎,向人们张开了双臂,娇人的阳光像火一样地照耀着大地,不过,值此艳阳高照的季节我们将为您送去凉爽的轻风!    只需7元平邮邮资即可获赠下列电子元 ...…

查看全部问答∨

“美亚光电”杯安徽省第三届大学生电子设计竞赛赛题

本帖最后由 paulhyde 于 2014-9-15 09:26 编辑 “美亚光电”杯安徽省第三届大学生电子设计竞赛赛题  …

查看全部问答∨

wince5.0下两个怪问题

操作系统是wince5.0,硬件平台是S3C2440 问题1:我用ActiveSync4与pc进行同步的时候,可以连接正常,从PC到板子,或从板子到PC,        拷贝文件都正常,但是,我想通过PB下的工具“tools”--“remote registry editor” ...…

查看全部问答∨

问个CE下SDK中的PLAYWND例子问题

我在VC里用的SDK中的例子DSPlay中的程序,播放视频文件一点问题也没有,清晰度和速度都很好,而且,RMVB,RM,AVI,MPEG格式都能支持,但我改用CE下的PLAYWND例子上开发板上播放就不行了,只支持一个MPEG格式的电影,AVI格式能识别但不能播放,RMVB等格式干脆 ...…

查看全部问答∨

谁说ST的I2C能用我跟他拼命!

                                 谁说ST的I2C能用我跟他拼命!ST的I2C绝对是芯片设计时存在BUG,我用STM32,我的同事用STM8都出现同样的现象:I2C会 ...…

查看全部问答∨

DE1的相关问题

本帖最后由 paulhyde 于 2014-9-15 09:34 编辑 最近在做FPGA,用的是terasic的DE1的学习板,但是上面没有A/D D/A ,现在想配A/D D/A上去,求用过此板的机油给说说方法啥的  …

查看全部问答∨

2011D题的一些个人建议(原创)

本帖最后由 paulhyde 于 2014-9-15 03:59 编辑 关于衰减器:肯定用电阻网络,π还是T型都可以,但40DB+-2DB光用电阻很难达到,别说什么1%高精度电阻都是扯淡,我建议做35DB左右衰减器+10DB左右可调衰减量的衰减器达到要求精度。可调?不是浮云!提 ...…

查看全部问答∨

用C#如何封装函数生成dll文件

ARM的程序基本写完了,现在要跟上位机通讯,需要封装一个dll文件,供上位机调用,用网口连接的! 没做过,不会写啊,请高手赐教!感激不尽!本人QQ:656691002,会的加我,教教我吧! 谢谢了!…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved