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