次のコードを使用して、p89v664 からシリアル端末にメッセージを出力しようとしています。
#include<P89V66x.H>
#include<stdio.h>
char putchar(char c) {
if (c == '\n') {
while (!TI);
TI = 0;
S0BUF = 0x0d;
}
TI = 0;
S0BUF = c;
while (!TI);
return c;
}
int printf(char*str) {
unsigned int cnt = 0;
while(*str != '\0')
{
putchar(*str);
cnt++;
str++;
}
}
void delay(unsigned int i) {
int d = 100;
for(;i!=0;i--) {
for(;d!=0;d--);
d = 100;
}
}
int main(void) {
/**Serial init*/
S0CON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xF6; /* TH1: reload value for 9600 baud */
TR1 = 1; /* TR1: timer 1 run */
TI = 1;
while(1) {
printf("Hello\n");
delay(300);
printf("Hello World\n");
delay(10000);
}
}
上記のプログラムは、このプログラムの printf 関数定義がコメントされていないときまで正常に動作します。上記のプログラムの printf 関数が標準ライブラリの printf を使用するようにコメントされている場合、ジャンク文字がシリアル コンソールに出力されます。(私はパテを使いました)。Keil uVision V4.14.4.0 コンパイラを使用しました。
何か足りないものはありますか?このプログラムの何が問題なのかわかりません。