众所周知,使用32的时候,只需要重写fputc就可以了
但是我在MSP430重写fputc后,发现printf只能发送字符串,不能带%符号,也就是无法格式化。
printf("Pressed{%.2f}\r\n",3.1111);
输出为
Pressed{
后面的数据统统消失了~
后来才发现,除了要重写fputc外,还要重写fputs
把以下这段代码加到一个任意引用了"stdio.h"和"string.h"的c文件中
int fputc(int ch,FILE *f)
{
UCA1TXBUF = ch&0xff;
while(!(UCA1IFG & UCTXIFG));//等待发送完成
return ch;
}
int fputs(const char *_ptr, register FILE *_fp)
{
unsigned int i, len;
len = strlen(_ptr);
for(i=0 ; i<len ; i++){
UCA1TXBUF = _ptr[i]&0xff;
while(!(UCA1IFG & UCTXIFG));//等待发送完成
}
return len;
}
要依据实际情况修改寄存器,我用的是MSP430F5529LP
注意
可能会报以下错误
只需要修改一下CCS工程设置
如图所示更改为full
最后输出为
Pressed{3.11}
题外话
Scanf的重要性不言而喻,在32中重写fgetc就可以使用。
所以有可能在msp430中重写fgetc、fgets就可以使用scanf