找回密码
 立即注册
查看: 529|回复: 5

关于STC8H芯片 想要重定向printf函数问题

[复制链接]
  • TA的每日心情
    开心
    2024-1-27 13:25
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    14

    主题

    18

    回帖

    175

    积分

    注册会员

    积分
    175
    发表于 2023-8-2 11:53:20 | 显示全部楼层 |阅读模式
    关于STC8H芯片 想要重定向printf函数问题



    关于STC8H芯片 想要重定向printf函数问题-1.png


    关于STC8H芯片 想要重定向printf函数问题-2.png

    User\main.c(5): error C141: syntax error near '*', expected ')'


    如上图,但我想重定义fputc函数时,c51编译器会报错,C51编译器并不支持C标准库中所有的函数和特性,比如对FILE类型的支持就有限,这可能是我遇到问题的原因
    这个该如何解决呢。


    还有一个问题:
    我看的《STC32位8051单片机原理及C语言程序设计视频教程》


    里面有c语言printf函数这一章,但是里面的实现原理好像没有讲
    原理应该也是重定向,但是源代码是不是被封装到库里了。
    关于STC8H芯片 想要重定向printf函数问题-3.png




    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-27 13:25
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    14

    主题

    18

    回帖

    175

    积分

    注册会员

    积分
    175
     楼主| 发表于 2023-8-2 13:45:50 | 显示全部楼层
    第一个问题已经解决了!!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-27 13:25
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    14

    主题

    18

    回帖

    175

    积分

    注册会员

    积分
    175
     楼主| 发表于 2023-8-2 13:49:02 | 显示全部楼层
    第一步:
    int putchar(int dat) {
        UART1_WriteBuffer(dat);
        while(!TI);
        UART1_ClearTxInterrupt();
        return dat;
    }


    第二:
    #include<stdio.h>

    void main()
    {
       
        SYS_SetClock();
        // UART1, baud 115200, baud source Timer1, 1T mode, no interrupt
        UART1_Config8bitUart(UART1_BaudSource_Timer1, HAL_State_ON, 115200);
       
       


        while(1)
        {
           printf("fantastic");
           SYS_Delay(1000);
        }

    }
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:59
  • 签到天数: 143 天

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2023-8-2 18:25:08 | 显示全部楼层
    如果想使用USB CDC库进行printf输出的话,在“usb.h”头文件里开启以下定义即可:
    #define PRINTF_HID            //printf输出直接重定向到USB HID接口
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 122 天

    [LV.7]常住居民III

    9

    主题

    92

    回帖

    590

    积分

    高级会员

    积分
    590
    发表于 2023-8-4 20:21:03 | 显示全部楼层
    第一步      文件头文件引用  #include<stdio.h>
    第二步      添加以下2个函数    重构发送函数 UartPutc    putchar   就可以了  会优先使用重构函数
    void UartPutc(u8 dat)   
    {
        SBUF = dat;
        TX1_Busy = 1;
        while(TX1_Busy);
    }

    char putchar(char c)
    {
        UartPutc(c);
        return c;
    }
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    9 小时前
  • 签到天数: 140 天

    [LV.7]常住居民III

    3

    主题

    110

    回帖

    141

    积分

    注册会员

    积分
    141
    发表于 2023-10-4 14:31:01 | 显示全部楼层
    乘风飞扬 发表于 2023-8-2 18:25
    如果想使用USB CDC库进行printf输出的话,在“usb.h”头文件里开启以下定义即可:
    #define PRINTF_HID      ...

    感谢大佬的解惑,我难为在printf里面好长时间了,偶然看到大佬额解惑,豁然开朗
    You can you up!~No can no BB!~
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-19 17:44 , Processed in 0.065461 second(s), 53 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表