我想修改一個函數,以更明智的爲我的目的;C上的ARM - 等待UART接收
int getc0 (void)
{
while ((U0LSR & 0x01) == 0); //Wait for character
return U0RBR;
}
上面的代碼導致函數掛起,直到串行端口0上接收到一個字符,然後返回它。 我用這樣的while循環來調用它;
while((str = getc0())!='\r'){
strcat(&route_buffer,&str);
}
所以現在我有它等待,直到接收通過串行端口返回車廂而在此之前的每個字符複製到緩衝區中。 現在我的問題是,目前我正在閱讀數據時遇到一些問題,我無法確定問題出在哪裏,無論哪種方式都無法正確識別返回車廂或換行符,但它正在接收某些輸出! 我知道這一點,因爲我已經將所有內容保存到一個文件中,但是要做到這一點,我必須在while循環中有一個i!= 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%的時間內運行。
這可能有助於解釋整個問題; 我有一塊ARM板,連接到串口的無線模塊(RX和TX)。上面的readInput函數用於讀取遠程登錄到無線模塊的用戶的輸入,並使ARM板讀取用戶的所有輸入。 我現在想要實現的是在執行命令後從無線模塊讀取輸入。使用printf語句,我可以通過將命令放入語句來執行命令。我需要做的是讀取無線模塊的輸出,這是我遇到困難的地方。我得到了一些輸出,但它非常有限,並不是預期的結果,但它顯然是來自模塊的。
請顯示route_buffer的定義。 – Throwback1986 2011-03-10 21:07:41
如何定義'str'?如何定義'route_buffer'? 'str'應該是一個'int',與函數getc0()兼容,並且不能像這樣將'int'傳遞給'strcat()'! – pmg 2011-03-10 21:09:44
我已編輯上述內容以包含所需信息。給我五分鐘,我會詳細說明爲什麼我已經完成了上述以及我已經做了什麼來驗證它。 – Draineh 2011-03-10 21:12:49