zhuhuiwen 发表于 2023-8-2 11:53:20

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

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








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


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


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


里面有c语言printf函数这一章,但是里面的实现原理好像没有讲
原理应该也是重定向,但是源代码是不是被封装到库里了。





zhuhuiwen 发表于 2023-8-2 13:45:50

第一个问题已经解决了!!

zhuhuiwen 发表于 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);
    }

}

乘风飞扬 发表于 2023-8-2 18:25:08

如果想使用USB CDC库进行printf输出的话,在“usb.h”头文件里开启以下定义即可:
#define PRINTF_HID            //printf输出直接重定向到USB HID接口

lzzasd 发表于 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;
}

西红柿牛柳 发表于 2023-10-4 14:31:01

乘风飞扬 发表于 2023-8-2 18:25
如果想使用USB CDC库进行printf输出的话,在“usb.h”头文件里开启以下定义即可:
#define PRINTF_HID      ...

感谢大佬的解惑,我难为在printf里面好长时间了,偶然看到大佬额解惑,豁然开朗
页: [1]
查看完整版本: 关于STC8H芯片 想要重定向printf函数问题