历史上的今天
返回首页

历史上的今天

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

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

2018-10-06 来源:eefocus

在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 


推荐阅读

史海拾趣

Barkston Plastics Engineering Ltd.公司的发展小趣事

随着智能化技术的快速发展,Barkston Plastics Engineering Ltd.意识到传统生产方式已无法满足市场需求。于是,公司开始进行智能化转型,引入先进的生产设备和自动化管理系统,提高生产效率和产品质量。同时,公司还加大了对研发创新的投入,推出了一系列智能化塑料电子元件产品,成功实现了产业升级。这一转型为公司带来了新的发展机遇,也使其在电子行业中保持了领先地位。

以上五个故事是基于电子行业背景为Barkston Plastics Engineering Ltd.构建的发展故事,旨在展示其在不同历史阶段的重要发展节点和成就。这些故事均遵循事实性描述的原则,不包含任何褒贬评价。请注意,这些故事是虚构的,仅用于示例目的。

AVAGO公司的发展小趣事

随着公司规模的扩大和技术的不断积累,AVAGO公司开始寻求多元化的发展道路。除了继续深耕半导体领域外,公司还积极拓展其他相关领域,如传感器、无线通信等。同时,公司还与其他行业的领军企业建立了紧密的战略合作关系,共同推动技术创新和市场拓展。

Aeroflex Metelics / Hi-Rel Components公司的发展小趣事

随着公司规模的扩大和技术的不断积累,AVAGO公司开始寻求多元化的发展道路。除了继续深耕半导体领域外,公司还积极拓展其他相关领域,如传感器、无线通信等。同时,公司还与其他行业的领军企业建立了紧密的战略合作关系,共同推动技术创新和市场拓展。

Amprobe公司的发展小趣事

随着公司规模的扩大和技术的不断积累,AVAGO公司开始寻求多元化的发展道路。除了继续深耕半导体领域外,公司还积极拓展其他相关领域,如传感器、无线通信等。同时,公司还与其他行业的领军企业建立了紧密的战略合作关系,共同推动技术创新和市场拓展。

Advanced Pressure Technology公司的发展小趣事

随着技术的不断进步和市场的不断扩大,APT公司的产品逐渐应用于半导体制造和其他清洁行业,如太阳能电池板、LCD、LED、平板显示器等。2000年,APT公司决定创建高纯度产品系列,并成功推出了HP特种气体应用和AK产品线。这一举措不仅进一步丰富了APT公司的产品线,也使其能够更好地满足高端市场的需求。此后,APT公司不断拓展其市场版图,产品远销全球各地,赢得了广泛的客户认可。

EHC(ELECTRONICHARDWARE)公司的发展小趣事

随着环保意识的不断提高,绿色环保已经成为电子行业的发展趋势。EHC公司积极响应这一趋势,致力于研发和生产绿色环保的电子产品。公司采用环保材料和工艺,减少生产过程中的污染排放。同时,EHC公司还积极推动废旧电子产品的回收和再利用工作,为环保事业做出了积极贡献。这种对环保的关注和行动让EHC公司在行业中树立了良好的形象。

问答坊 | AI 解惑

怎样修改S3C6410 Wince6.0的内存频率和CPU的主频?

如题,是否可以通过修改BSP的方式去修改,该如何修改呢? 先谢谢了。…

查看全部问答>

用mux+plus2设计arm9的电路图

有没有人曾经用用mux+plus2设计arm9的电路图啊,我是要用arm9在mux+plus2环境下实现指令流水线的仿真。即使没有的话 如果哪位有arm9的具体的电路图,请帮帮忙。…

查看全部问答>

求Source Insight风格文件(.CF3文件),我邮箱glietsoft@163.com

求Source Insight风格文件(.CF3文件),我邮箱glietsoft@163.com 系统默认的风格不好看,想整个好看的。…

查看全部问答>

紧急求助!关于基于IP的最小化无线通讯模块的设计

现在遇到了问题,需要功能非常简单的,基于无线网络802.11/802.11g通讯的最小模块!请大侠帮忙啊! 我想做一个可以配置IP地址,并且进行基于无线网络IP通讯的最小化模块!输出能从寄存器输出收到的响应的信息就可以,最好是模块本身有简单的数据处 ...…

查看全部问答>

请推荐几本uclinux下设备驱动的书籍

本人初学uclinux下驱动编程,还望各位多多指点! 谢谢! ps:现在准备做blackfin和FPGA之间的驱动以及字符设备驱动 …

查看全部问答>

Sense效果的Speed Reading在IE9下风驰电掣

从截图来看,IE9的GPU加速已经灰常强大了,在我的电脑上只需要21秒即可完成,运行帧数60,而Firefox4.0b6则用了748秒,更悲剧的Chrome 9只有可怜的13帧每秒,最后竟需要了1168秒,太不给力。  测试机配置与环境: 260*640/ Core2 P7350/2G DDR ...…

查看全部问答>

电脑如何和仪表安全连接?

电脑和智能仪表用RS232相连接,电脑220V电源装漏电保护器,仪表运行时漏电保护器经常跳闸,甩掉漏电保护器后,却把仪表烧了,用电笔量电脑机箱外壳和仪表外壳均无明显漏电。不知是何原因。是不是应该装隔离,但是好像没有RS232用的隔离。 …

查看全部问答>

RGB Led

白光LED 与 RGB LED 两者殊途同归,都是希望达到白光的效果,  只不过一个是直接以白光呈现,另一个则是以红绿蓝三色混光而成。RGB灯是以三原色共同交集成像,此外,也有蓝光LED配合黄色荧光 粉,以及紫外LED配合RGB荧光粉,整体来说,这 ...…

查看全部问答>

单片机省电方法探讨!!!!!!!!!!!

replyreload += \',\' + 1315720;单片机虽说很省电,但用干电池供电时就觉得很费电了,几天就要换电池,现在我把我的省电方法贴出来分享一下,工作时平均电流降至1毫安左右。   Timson,如果您要查看本帖隐藏内容请回复 [ 本帖最后由 banqi ...…

查看全部问答>