• 单片机中printf函数的重映射


    单片机中printf函数的重映射

    一、源自于:大侠有话说

    1.如果你在学习单片机之前学过C语言,那么一定知道printf这个函数.它最最好用的功能

    除了打印你想要的字符到屏幕上外,还能把数字进行格式化.例如十进制的33,用十进制

    方式输出就是33,用十六进制的形式就输出成21,如果用字符形式输出,那就是ASCII码

    表对应的’!’.

    2. 51年代,一些人软件仿真的时候也很喜欢使用printf,但实际代码运行中,用的人则不多,因

    为别说51年代,就是用AVR的,也会觉得printf这个函数耗费的CPU资源相当可观.所以

    printf在8位单片机时代,熟悉的人的确不多.但到了ARM时代,情况则大为不同.毕竟

    ARM的处理能力和51完全不是一个级别,这使得不少人开始喜欢使用printf在实际项目

    中作为调试过程的串口输出.因为它的格式化功能实在是相当方便.

    而本例程就是教会你这么使用printf.

    3.程序把printf的输出对象设定为串口1.有一个标准的函数是必须要自己定义的,那就是

    fputc,把这个函数的功能写成串口输出一个字符.建议在串口的初始化模块中定义

    int fputc(int ch)

    {

    USART_SendData(USART1, (u8) ch);

    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

    return ch;

    }

    然后记得一点,就是MicroLib要勾上.其实大部分情况下,都建议使用MDK附带的

    MicroLib,这东西是有一定用途的.留待以后再更多地介绍.

    以上两步做好后,还记得要包含printf的头文件:

    #include <stdio.h>

    那么,所有工作就大功告成了,你可以尽情的尝试printf带来的便利.

    4.另外大家是否意识到一点,就是printf输出到哪,其实是由fputc函数决定的.所以如果有兴

    趣,可以改写这个fputc函数,使得其printf的对象是DX-32板上的TFT屏或者黑白屏.大家有

    兴趣的不妨试试.

    二、源自于:STM32开发板(正点原子)

    //加入以下代码,支持printf函数,而不需要选择use MicroLIB  

    #if 1

    #pragma import(__use_no_semihosting)            

    //标准库需要的支持函数                 

    struct __FILE
    
    {
    
           int handle;
    
           /* Whatever you require here. If the only file you are using is */
    
           /* standard output using printf() for debugging, no file handling */
    
           /* is required. */
    
    };
    
    /* FILE is typedef’ d in stdio.h. */
    
    FILE __stdout;       
    
    //定义_sys_exit()以避免使用半主机模式   
    
    _sys_exit(int x)
    
    {
    
           x = x;
    
    }
    
    //重定义fputc函数 ,串口1
    
    int fputc(int ch, FILE *f)
    
    {     
    
           while((USART1->SR&0X40)==0);//循环发送,直到发送完毕  
    
           USART1->DR = (u8) ch;     
    
           return ch;
    
    }
    
    #endif
    

      

     

  • 相关阅读:
    leetcode108 Convert Sorted Array to Binary Search Tree
    leetcode98 Validate Binary Search Tree
    leetcode103 Binary Tree Zigzag Level Order Traversal
    leetcode116 Populating Next Right Pointers in Each Node
    Python全栈之路Day15
    Python全栈之路Day11
    集群监控
    Python全栈之路Day10
    自动部署反向代理、web、nfs
    5.Scss的插值
  • 原文地址:https://www.cnblogs.com/Ph-one/p/9317401.html
Copyright © 2020-2023  润新知