![]() |
發布時間: 2023-6-17 01:03
正文摘要:請問這個字符存到數組的語句,不應該使用for循環嗎?代碼是從上到下執行,只有這么一句,不是只能存入一個字符嗎?這段代碼是中斷程序中接收GPS發送的數據。求大神指點, |
每接收一個字節,都會產生中斷,只不過是在底層處理了。都是有協議處理的 |
/*************************************/ void Uart_Receive() interrupt 4 { static uchar ch=0; //靜態計數變量 RI=0; //接收中斷請求標志位清0 rev_buf[ch]=SBUF; //接收到的數據串保存在緩存數組 if(rec_buf[0]=='$') //驗證數據頭,如果錯誤,被后續數據覆蓋 { ch++; if(rec_buf[ch-1]=='\n')//結束 { flag=1; //接收完成標志置1 ch=0; //計數變量清0 } } } |
字符串不定長,以\n作為結束標志,你又不知道具體長度怎么循環??? |
![]() ![]() |
軟硬結合,兩手都要抓,要手都要硬,就能更好理解代碼了。 |
看來樓主對底層不了解。每接收一個字節數據,中斷都觸發一次,因此,當你意識到這個串口無法一次性識別一幀數據的時候,應該差不多明白了,需要用一個變量自加建立索引,來存儲每個字節數據。 |
先理解中斷是啥概念,別一上來就看程序 |
串口硬件收到一個字節,發出一個中斷執行這段程序,字節存入rev_buf數組,數組標號+1,程序轉入主程序,中斷一次存一個,不用for。 |