[問題] 等待資料回傳的邏輯

看板C_and_CPP (C/C++)作者 (asldj)時間15年前 (2011/02/14 22:23), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C/C++ 問題(Question): 目前在寫單晶片的程式 系統非常簡單, 只有接RS232跟電腦互相傳送字串 用來控制周邊動作, 如LED, 馬達...etc 1. 我打算用RS232模擬command line進行一些硬體動作 對於RS232字串的Parsing實在不太好做, 剛剛爬文有使用Stringstream, strtok (不確定單晶片的C++有沒有stringstream, 但是確定有strtok) 太晚來爬, 所以已經用sscanf來做, 遇到的問題是是不能用空白鍵當分隔字元 所以我就用逗點當PC傳到單晶片的命令, 如 open,led,1 open,motor,1 open,led,2 close,motor,1 close,led,2 close,led,1 (<=下這種好白癡的命令) 其實...我想做的跟command一樣, 但是做不出來XD 想請問各位, 空白鍵該怎麼在sscanf的%[]下實作呢? 2. 另一個問題是程式運作的邏輯問題 就是通電之後單晶片就開始動作, 用RS232跟一個sensor要資料, sensor會在幾秒後回傳資料 所以我在main()裡面用無窮迴圈讓程式一直運作, 類似 /* 程式是虛構的 */ void main() { ...... // 系統的初始化 while(1) { Send_Sensor_Request_Command(); // 傳送命令給sensor while ( Wait_Sensor_Response() ) // 等待sensor回傳資料 { // 回傳1表示收到sensor資料 Do_Something(); // 執行一些動作 } Other_Operation(); // 其他與sensor無關的動作 } } 因為sensor會隔幾秒後才傳, 所以程式會卡在等待sensor資料的地方 然後後面一些該做的都沒做.... 我有想過用個變數來表示已經收到sensor的資料, 不要讓while ( Wait_Sensor_Response() ) 卡住整個程式, 如 if( Sensor_Data_Ready ) // 1表示收到sensor資料 { Do_Something(); } 但是感覺這不是很好的做法, sensor一多, 就會多出一狗票的變數 >_< 想問問各位有怎樣的作法或是程式運作的邏輯可以改善? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.254.139.100 ※ 編輯: killop 來自: 111.254.139.100 (02/14 22:26) ※ 編輯: killop 來自: 111.254.139.100 (02/14 22:27) ※ 編輯: killop 來自: 111.254.139.100 (02/14 22:29)

02/15 07:55, , 1F
CMD用一個或兩個BYTE來判斷會不會比較簡潔? EX:0x0A =>LED
02/15 07:55, 1F

02/15 07:56, , 2F
1 open ,這樣就不用parsing string
02/15 07:56, 2F

02/15 09:59, , 3F
這樣要用程式才能, 我想用超級終端機key指令Q_Q
02/15 09:59, 3F

02/15 11:10, , 4F
你可以key "LED" 卻送出 '0x0A' 阿XDD
02/15 11:10, 4F

02/15 13:23, , 5F
終端機只能KEY文字, 除非另外寫程式去轉, 有點多此一舉 呵
02/15 13:23, 5F
文章代碼(AID): #1DMJhrS9 (C_and_CPP)
文章代碼(AID): #1DMJhrS9 (C_and_CPP)