keil中勾选microlib使用printf

发布者:Radiant777最新更新时间:2018-10-06 来源: 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编译时出现错误和警告总结

推荐阅读最新更新时间:2024-03-16 16:15

STM32在IAR中如何使用printf函数
STM32使用printf函数给串口打印信息的执行步骤为: 1.重定向printf函数 给uart.c文件中增加如下函数: int fputc(int ch, FILE *f) { USART_SendData(USART2, (unsigned char) ch);// USART1 可以换成 USART2 等 while (!(USART2- SR & USART_FLAG_TXE)); return (ch); } 2.增加头文件stdio #include stdio.h 3.添加宏 在IAR中使用printf应在Options- C/C++Compler- Preprocess
[单片机]
STM32在IAR中如何使用<font color='red'>printf</font>函数
在STM8单片机中自己实现 printf()函数功能
  由于STM8单片机本身内存比较小,而系统自带的printf()函数又比较占据空间,所以在稍微大一点的工程中有时候一使用 printf() 函数就会导致单片机内存不足,于是想着能不能自己写一个比较小的函数来实现类似printf()函数的功能。经过网上查找资料和总结终于找到了一个占用内存比较小,又能实现串口打印功能的方法。   现在将自己的方法分享出来,这里使用 STM8S003F3P6单片机测试。   首先新建一个工程,专门用来测试串口功能。   串口部分相关代码如下: //串口 void Uart1_IO_Init( void ) { PD_DDR |= ( 1 5 ); //输出模式
[单片机]
在STM8单片机中自己实现 <font color='red'>printf</font>()函数功能
STM32—printf函数重定义
  为了便于调试,我们经常要使用到printf函数,打印出调试的信息。在Keil软件中,要使用printf输出函数的话,注意需要先把use MicrolLIB选项选上,如下图。   接着 ,在main函数的添加头文件下方添加printf函数的声明,代码如下: /* Includes ------------------------------------------------------------------*/ #include main.h #include stm32f4xx_hal.h // 添加的代码如下,进行函数重构 #ifdef __GNUC__ //gcc编译器宏定义 /* W
[单片机]
STM32—<font color='red'>printf</font>函数重定义
STM32 printf 方法重定向到串口UART
在嵌入式系统中调试代码是很麻烦的一件事, 如果能方便地输出调试信息(与调试者交互), 能使极大加快问题排查的过程. 串口在嵌入式领域是一个比较重要的通讯接口. 因为没有显示设备, 在单片机的程序里调用printf()打印内容是不可见的,但我们可以利用它的外设来实现printf(),比如串口, 串口基本上大多数单片机都有, 通常用串口来打印内容. 通过重写fputc()函数来实现. fputc()是printf()的底层函数, 通过它把要打印的数据发送到串口上去. 不使用 MicroLib的普通方式 禁用半主机模式, 禁用了半主机模式才能使用标准库函数printf()打印信息到串口 说明: 半主机模式是ARM单片机的一种调试机制
[单片机]
基于STM32在IAR中调用printf()函数
在主文件main.c中添加如下代码: #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; } #ifdef USE_F
[单片机]
STM32开发笔记62: 使用MicroLIB
单片机型号:STM32F407VGT6 microLIB 是缺省 C 库的备选库,它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。LwIP中使用了microLIB,如果不勾选microLIB选项,则程序不能够正常运行,其主要原因在于LwIP使用了microLIB提供的标准输入和输出函数。本文对microLIB做详细介绍。 1、microLIB介绍 Microlib is an alternative library to the default C library. It is intended for use with deeply embedded applications that must fit
[单片机]
STM32开发笔记62: 使用<font color='red'>MicroLIB</font>
关于STM32的printf()函数重映射
printf()函数的重映射: 在配置的target选项中选择use microlib,然后在main()函数之前添加函数重映射,如下: int fputc(int ch, FILE *f) { USART_SendData(USART1, (u8) ch); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); return ch; } 在main()函数中包含stdio.h头文件,在其他自己创建的函数中若使用printf()函数也应该包含改头文件,这样一来,prinft()函数重映射的使用便不会有警告以及错误。 若不是用微库,则应该在重映射printf()之前添
[单片机]
STM32F103串口配置,并且使用printf进行打印
首先要配置串口时钟: // USART1 clock enable RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); 然后再配置端口,在配置串口,再使能即可。 void USART1_Init(void) { /////// config the gpio GPIO_InitTypeDef GPIO_InitStructure; /* PA9 USART1_Tx */ GPIO_InitStructure.GPIO_Pin =
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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