瑞萨芯片RL78添加printf打印日志
标准库要打开,C99或C90都可以。
在main文件添加标准头文件
/* Start user code for include. Do not edit comment generated here */
#include "stdio.h"
/* End user code. Do not edit comment generated here */
重映射putchar函数
int __far putchar(int c)
{
debug_uart0_snd_flag=R_UART0_Send((uint8_t*)&c,1);
while(debug_uart0_snd_flag==0)
{
//debug_uart0_snd_flag = 0;
}
return c;
}
重映射函数要注意,如果用中断发送一定要增加等待发送结束命令,我之前没有添加,打印出来的只有第一个字母。
这样就可以正常使用printf命令了。
调试的时候发现,在中断优先级高的函数里调用printf会造成系统重启。解决的办法有两个,一个是把uart0的发送中断优先级调到最高。第二个就是不用中断方式发送串口数据,改为循环发送。我用的是第二个方式,更方便一点。直接写寄存器。
int __far putchar(int c)
{
STMK0 = 1U; /* disable INTST0 interrupt */
SDR00L = (uint8_t)c;
while(STIF0==0)
{
}
STIF0 = 0;//clear INTST0 flag
return c;
}
今天在调试boot项目的时候发现加上printf后,代码超出预留的flash空间,看了一下map,两个C库占了大约7k多。只能自己写个printf了。反正批量的时候还是要把调试代码屏蔽掉的。