历史上的今天

今天是: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编译时出现错误和警告总结

推荐阅读

单片机中接收到奥串口的指令一般为字符串,如果使用strncmp比较是否为我们的指令集中的指令,则不能区分大小写,这里可以使用strcasecmp( )函数和strncasecmp( )函数,来对接收到的字符串指令进行接收比较,并且可以不区分大小写,包含头文件include“stdio.h”下面对strcasecmp( )函数和strncasecmp( )函数的原型以及应用进行介绍:strcasecmp( )函...
正受经济增长、城市化以及视频监控技术发展所驱动,全球视频监控市场保持续强劲的两位数增长,中国是其中最大、增长最快的市场,近年来表现持续强劲,发展速度超过全球其他地区。在技术和方案实践层面,随着智慧城市的兴起,中国也因快速发展和容量巨大,成为应用和锤炼全球最先进技术方案的场所。近年来,伴随无线通信技术的发展,以及人工智能等技术广泛...
  工业机器人已不是梦想,越来越多的工厂正采用工业机器人以节约劳动力成本。本文中,将基于两点对工业机器人加以介绍:1.工业机器人中的铸造机器人是什么?2.工业机器人有何功用特征?如果你对本文内容具有兴趣,不妨继续往下阅读哦。   一、何为铸造机器人   在众多的工业机器人中,有一种工业机器人在铸造生产的过程中可以将铸造、清理、机加...
来源:学习军团·解放军新闻传播中心融媒体作者:解放军报记者 韩 成 通讯员 于 晨“机器人技术正在深刻改变着人类的生产和生活方式,中国空间站机械臂也助力我们完成了两次出舱任务。”9月中旬,在北京亦庄开幕的2021世界机器人大会上,神舟十二号飞行乘组3位航天员聂海胜、刘伯明、汤洪波从中国空间站传来“太空点赞”。被表扬的主角,是我国自主研...

史海拾趣

问答坊 | AI 解惑

华为管理模式经验

1、“王小二卖豆浆,能卖一块钱一碗,为什么要卖五毛钱?我们产品的毛利,要限定在一定水平,太高或太低都不合适。” 注解:有时,自己给自己的优势产品降价,不要等竞争对手进入后再降价,用抬高进入的门槛,来阻止新的竞争者进入,反而 ...…

查看全部问答∨

显摆!STM32的FSMC挂3.5寸RGB数字屏

来源:http://www.ramtron-online.cn/user109685/blog/09-04/169227_6912c.html STM32确实强大,前些时间说的那个小板就是做来试试看STM32的外部总线是否能直接挂3.5寸的RGB数字屏的; 得益于它灵活而还算实用的DMA,呵呵,如下图: RGB总线的数字屏 ...…

查看全部问答∨

数字滤波器中去直流滤波器的设计问题

分布式算法作了一个滤波器,系数字长是21位,前面有一个cic的前置滤波器,但是我看有的文章说需要一个去直流滤波器,用以消去cic中遗留的直流分量。这个问题我在matlab的时候发现了,加了去直流后就好了,但是我用verilog代码写的去仿的时候就不存 ...…

查看全部问答∨

arm 总线 连接处 发热 严重

我在YL270的扩展槽上通过排针(母排)引出nCS5,DATA[0:8],ADDR[1:5],nWE,nOE,nRESET_out至 FPGA(XC2Sxxx); 总线是经过16245芯片至扩展槽,从扩展槽到FPGA是用超小型安装线飞线连接的,245至FPGA的距离大概有7-12cm, 不论是否给FPGA供电,排针的 ...…

查看全部问答∨

MODBUS RTU传输

用MODBUS RTU格式传输数据时,怎么样才能判断出开始和结束呢 是用3.5个字符时间来判断吗? 那么该怎样实现呢   请多多指教!!!    谢谢!!…

查看全部问答∨

STM8采用查询方式获取串口数据(求助)

我用查询的方式获取串口数据不成功是怎么回事,代码如下: void GetStr(void) {    UART3_CR2 &=~ MASK_UART3_CR2_RIEN;    //关中断    while(UART_Time)    {       & ...…

查看全部问答∨

LSD-S2E21-01 嵌入式串口转以太网控制器入手,求一起研究

  如题,最近淘宝上买了块: 串口转网络模块LSD-S2E21-01,刚开始捣鼓,寻找朋友一起研究,交流。     PS:我用的硬件是利尔达给的串口转以太网模块           1、 ...…

查看全部问答∨

胜败和努力常识,人若有志应该不怕迟!

诉苦篇:同一个大学,同一个痛(与全国千百万曾在大学里的游民同样的经历)    07年在一个二线城市的二流大学读一个二本(几个月才明白选择大学时的选择有多二。。。)。读书的时候一直觉得学校太破,专业太边缘(学校是老牌的石油 ...…

查看全部问答∨

MSP430之ADC多路采集DMA传输?

有没有做过MSP430之ADC多路采集DMA传输的朋友? 能不能分享一下配置过程呢?…

查看全部问答∨

TMS570 FLEXRAY CAN 例程

TMS570 FLEXRAY CAN 例程 …

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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