关于51串口中断与printf函数的使用

今天写代码时发现了一个小问题,使用的是stc89c52rc芯片,目前处于学习阶段
使用串口中断时在中断服务程序中调用printf函数,打印常量字符串是正常的,但是一旦传入参数,打印传入的参数时就会报错,字符打印一直都是“语?”
这个问题研究了许久发现应该是中断的出发方式跟printf中函数有着一定的冲突,但是本人能力有限,希望在这里能够帮忙解答疑惑,
代码如下

#include "STC51PRJ.h"
void SerialInit(void)
{
 TMOD=0X20;//T1,MODE2
 TH1=0XFd;
 TL1=0XFd;
 SCON=0X50;//SM0=1;SM1=1;REM=1;
 EA=1;
 ES=1;
 TR1=1;
}
void SendData(uint8 Data)
{
 SBUF=Data;
 while(!TI);
}
char RecData;
uint16 RecData1=6;
//串口中断
void ReceiveData_ISR(void) interrupt 4
{
    if(TI)
    {

   printf("I get %s\n",RecData);
//        SendData(RecData);
   while(!TI);
   TI=0;
    }

    if(RI){
 RI=0;
 RecData=SBUF; 
// return RecData;
 F0=1;
        TI=1;
    }
}

以上代码只要串口中断打开,printf函数打印变量就异常,目前解决办法就是调用printf函数时关闭串口中断,调用完毕再次打开有以免发生冲突

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^