関数を自分の目的に合わせてより適切に変更しようとしています。
int getc0 (void)
{
while ( (U0LSR & 0x01) == 0 ); //Wait for character
return U0RBR;
}
上記のコードは、シリアル ポート 0 で文字が受信されるまで関数をハングさせ、それを返します。そのようにwhileループを使用して呼び出していました。
while((str = getc0())!='\r'){
strcat(&route_buffer,&str);
}
そのため、シリアルポートを介してリターンキャリッジが受信されるまで待機し、これがバッファにコピーされる前の各文字が表示されます。今、私の問題です。現在、データの読み取りに問題があり、どこに問題があるのか を判断できません.どちらの方法でも、改行または改行が正しく認識されていませんが、一部の出力で検出されています! 完了したらすべてをファイルに保存しているので、これはわかっていますが、これを行うには、 while ループで ai!=5 を使用し、5 文字を読み取るだけです。20にすると、再びハングし、他に何も読み取っていないように見えます(uart経由でデータを送信しているにもかかわらず)
X時間読み取り、残りの機能を続行するように変更する方法はありますか?
編集:
char route_data[512], route_buffer[200];
編集2:
char *str;
わかりました、これはユーザー入力を読み取るために私が書いた関数です。
char* readInput(void){
userinput = 0;
str = 0;
while((str=getc0())!='\r'){
strcat(&userinput,&str);
}
return &userinput;
}
そしてそれはそのように呼ばれます。
strcat(config.nodeid,readInput());
よく呼ばれますが、これは私の呼び方の一例です。次に、これをファイルに出力すると、100% の確率で動作します。
問題全体を説明するのにおそらく役立つでしょう。シリアル ポート (RX および TX) にワイヤレス モジュールが接続された ARM ボードがあります。上記の readInput 関数は、ワイヤレス モジュールに telnet 接続したユーザーからの入力を読み取るために使用され、ARM ボードがユーザーからのすべての入力を読み取れるようにします。私が今達成しようとしているのは、コマンドを実行した後にワイヤレスモジュールからの入力を読み取ることです。printf ステートメントを使用すると、コマンドをステートメントに入れることでコマンドを実行できます。私が達成する必要があるのは、ワイヤレス モジュールからの出力を読み取ることです。ここで問題が発生します。私はいくつかの出力を取得していますが、それは非常に限られており、期待したものではありませんが、明らかにモジュールからのものです。