|
也許用過串口調(diào)試助手的人都會(huì)覺得,它發(fā)出去了就發(fā)出去了,不管有沒有回復(fù)都不影響。那你有試過只插上一根USB-串口線到電腦上,另一頭讓它空著么?
助手版本:v2.2
問題發(fā)現(xiàn):本人在學(xué)習(xí)C51單片機(jī)(別說什么已經(jīng)過時(shí)的廢話,我就是在學(xué)),到串口這一節(jié),試著讓單片機(jī)接到指定的結(jié)尾符號(hào)時(shí)才回發(fā)反饋,否則默認(rèn)為繼續(xù)接收字符,然而奇怪的事情發(fā)生了,當(dāng)發(fā)送了一次不帶結(jié)尾符的語句之后,不管調(diào)試助手再發(fā)什么,包括帶不帶結(jié)束符,都不再進(jìn)行消息回發(fā),甚至看不到開發(fā)板串口接收消息的指示燈閃爍(測試后接收中斷應(yīng)該也是沒有進(jìn)入),調(diào)試很久沒有發(fā)現(xiàn)問題到底在哪里。開始的時(shí)候以為單片機(jī)串口的機(jī)制是接收一個(gè)消息回發(fā)一個(gè),但很快就被否定了:在發(fā)送有結(jié)尾符的正常字符串時(shí)是分開一個(gè)個(gè)字符接收的,它們最后接收到一個(gè)結(jié)束符才回送消息,卻沒有出現(xiàn)這個(gè)問題,這說明單片機(jī)收到字符不一定需要返回。
后來又發(fā)現(xiàn)出問題的時(shí)候CPU的占用率非常高,甚至達(dá)到90%-100%之間居高不下,其中調(diào)試助手持續(xù)占用CPU(要知道正常情況下調(diào)試助手發(fā)送完消息后就會(huì)閑置下來的)。因此把注意力轉(zhuǎn)移到助手上來。我做了個(gè)實(shí)驗(yàn):把連接單片機(jī)那頭串口線拔掉(可能因?yàn)轵?qū)動(dòng)的關(guān)系,此時(shí)系統(tǒng)仍然是可以打開串口的),然后打開串口再發(fā)送字符,這時(shí)候不管發(fā)什么都會(huì)出現(xiàn)前述的問題?磥,跟單片機(jī)沒關(guān)系,應(yīng)該是調(diào)試助手發(fā)送消息后會(huì)等待反饋,至于為什么會(huì)這樣,我不知道這么做有什么目的。
證實(shí)單片機(jī)通信方式不需要反饋:用超級(jí)終端嘗試驗(yàn)證之前的編程思路發(fā)現(xiàn)是可行的,(編程思路是接到字符以;號(hào)為結(jié)尾符,否則視為指令的一部分,繼續(xù)等待命令傳輸直到接到結(jié)尾符后把收到的字符拼接成一個(gè)字符串返回),結(jié)果顯示它把接到的幾組字符串做了拼接才回發(fā)(即前幾組字符接收后并未做回發(fā)但是不影響后續(xù)的接收,不存在問題),更證實(shí)了本次試驗(yàn)遇到的問題不在于單片機(jī),而在于調(diào)試助手。
|
|