Micro.lib MDK/KEILL

一、简介
       microlib中是用C写的时候相比,包括ARM编译器工具链的标准C库的基于ARM的嵌入式应用提供了高度优化的库,microlib中提供所需的许多嵌入式系统显著代码大小的优点。

二  、 microlib中和标准C库之间的主要区别是: 

       microlib中是专为深度嵌入式应用。 
      microlib中被优化使用比使用ARM标准库更少的代码和数据存储器。 
      microlib中已经设计没有操作系统的工作,但是这并不妨碍它被与任何操作系统或RTOS如Keil RTX一起使用。 
      microlib中不包含任何文件I/ O或宽字符支持。 
      由于microlib中进行了优化,以尽量减少代码大小,一些功能将会比ARM编译工具提供了标准C库函数更慢执行。 
microlib中双方和ARM标准库都包含在Keil MDK-ARM。 
三、 存在问题
         本人有过经历在做串口 接收大量数据时,选择微型库,接收到几百K的数据,就会出现问题,仿真时发现,程序跑飞了,但是一样的代码 ,在不选择微型库时,又完好,能接收7,8百K 的字节数据,所以个人感觉,这个库因为是进行了优化,而引发的错误。
 四 、编译出现问题。
       首先      use microlib, 使用printf的时候不需要重映像使用。不选 use microlib  时,需要重映射
                                       //重定义fputc函数 
                          int fputc(int ch, FILE *f)
             {      
            while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
                    USART1->DR = (u8) ch;      
          return ch;
            }
     如果在 不选  use microlib  时,出现了某个错误时,
     首先添加  #include <stdlib.h>  和 include "string.h",如果还不能解决 ,把下面的注销掉就好,这在 原子 历程里面经常用(如红色字体部分)
      #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)
       {      
        while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
              USART1->DR = (u8) ch;      
     return ch;
        }
       #endif 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值