1. 引入
- 目的是在CCS中对printf进行重定向。
- 关键是对fputc和fputs的重写。
- 由下图可知,在sys/bios中的printf函数,会调用fputc打印一般的字符,会调用fputs打印转义字符得到的新的字符串。
2. 改写
- 首先,根据实际情况,找到包含fputc和fputs的库文件lib,以及对应的源文件C文件。
- 新建一个建议工程,添加需要修改的文件。
- 将文件中的函数修改。(我这里是直接划掉了fputc和fputs两个函数)
- 在之后使用printf时,需要在正式工程中,重写fputc和fputs函数。下面为重写的fputc和fputs函数,支持串口打印输出。
#include <stdio.h>
int fputc(int ch, FILE *f)
{
while( (*(unsigned int* )0x02540004) &0x00000200);
*(unsigned int* )0x02540004 =(unsigned char)ch;
return (unsigned char)ch;
}
int fputs(const char *_ptr, FILE *_fp)
{
int i, ptr_strlen;
ptr_strlen = strlen(_ptr);
for(i=0;i<ptr_strlen;i++)
{
while( (*(unsigned int* )0x02540004) &0x00000200);
*(unsigned int* )0x02540004 =(unsigned char)_ptr[i];
}
return ptr_strlen;
}
3. 生成
- 使用ar6x工具,修改官方库rts6600_elf.lib。