zoukankan      html  css  js  c++  java
  • 半主机模式和_MICROLIB 库

    半主机是这么一种机制,它使得在ARM目标上跑的代码,如果主机电脑运行了调试器,那么该代码可以使用该主机电脑的输入输出设备。 
      这点非常重要,因为开发初期,可能开发者根本不知道该 ARM 器件上有什么输入输出设备,而半主基机制使得你不用知道ARM器件的外设,利用主机电脑的外设就可以实现输入输出调试。 
      所以要利用目标 ARM器件的输入输出设备,首先要关掉半主机机制。然后再将输入输出重定向到 ARM 器件上,如 printf 和 scanf,你需要重写 fputc和 fgetc 函数。下面就是将 scanf 和 printf 重定向到 uart 的代码。 
     

    int fputc(int ch, FILE *f)  

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


    int fgetc(FILE *f)  

        int ch; 
        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) 
        { 
        } 
        ch = USART_ReceiveData(USART1); 
         
        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) 
        { 
        } 
        USART_SendData(USART1, (uint8_t) ch); 
        return ch; 
    }
    printf() 之类的函数,使用了半主机模式。使用标准库会导致程序无法运行 ,以下是解决方法 :
    方法 1.使用微库 ,因为使用微库的话 ,不会使用半主机模式 .
    如果使用的是 MDK,请在工程属性的 “Target “- 》”Code Generation “中勾选 ”Use MicroLIB “这样以后就可以
    使用 printf ,sprintf 函数了
    方法 2.仍然使用标准库 ,在主程序添加下面代码 :
    /*为确保没有从 C 库链接使用半主机的函数,因为不使用半主机,标准 C 库 stdio.h 中有些使用半主机的
    函数要重新写 ,您必须为这些函数提供自己的实现 */

    #pragma import(__use_no_semihosting)  // 确保没有从 C 库链接使用半主机的函数
    _sys_exit(int  x) //定义 _sys_exit() 以避免使用半主机模式
    {
    x = x;
    }
    struct __FILE  // 标准库需要的支持函数
    {
    int handle;
    };
    /* FILE is typedef ’ d in stdio.h. */
    FILE __stdout;

    在独立应用程序中,您不太可能支持半主机操作。 因此,必须确保您的应用程序中没有链接 C 库半主机函数。
    为确保没有从 C 库链接使用半主机的函数, 必须导入符号 __use_no_semihosting 。可在您工程的任何 C 或汇编语言源文件中执行此操作,如下所示:
    在 C 模块中,使用 #pragma 指令:
    #pragma import(__use_no_semihosting)
    在汇编语言模块中,使用 IMPORT 指令:
    IMPORT __use_no_semihosting
    如果仍然链接了使用半主机的函数,则链接器会报告错误。
    ————————————————
    版权声明:本文为CSDN博主「Robben.Han」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/hxlawf/article/details/89491088

  • 相关阅读:
    ue4 官网IK流程记录
    ue4-C++中加载一个蓝图类(二)-C++中绑定Blueprint武器
    UE4 c++ 创建刚体Cube
    UE4的AI学习(1)——基本概念
    UE4的AI学习(2)——官方案例实例分析
    行为树(Behavior Tree)实践(1)– 基本概念
    Animation Blueprint, Set Custom Variables Via C++
    ue4 c++ anim notify
    ue4 动画相关方法杂记
    [UE4]Montage动画设置Slot
  • 原文地址:https://www.cnblogs.com/jack-hzm/p/11464816.html
Copyright © 2011-2022 走看看