ASM 板


LINE

看板 ASM  RSS
※ 引述《gg1122 (99通未接來電)》之銘言: : 因為目前UART Receive的部份都必須判斷收到CR : 或某個End of char 才能辦法收到完整資料 : 程式目前寫成如下 Buffer一直收到 爆掉 就直接overflow 重新Reset index : 目前遇到一個問題 我的真實資料前面會遇到0x0D 也就是CR : 搞不太懂要怎處理 因為本來想說判斷 資料沒到多少長度就繼續收 : 大於門檻值長度就整條直接做處理 今天測試是不行 不太懂什麼原因? : 難道要End of Char 要變連續二個BYTE 某個值 做判斷才能閃這個問題? : 還請各位先進 能夠幫忙 給意見 謝謝 定義好你的資料封包,沒有說結尾一定要是CR(0x0D) 比如0xAA是封包開始,0xFE是封包結尾,問題是如果資料 有0xFE怎麼辦,可以用控制字元填充,比如0xFD,只要資 料是0xAA、0xFE、0xFD,前方就填充0xFD,接收data時如 果收到0xFD,表示下一個byte是資料,不是封包控制字元 。 <0xAA><data 1>...<data n><0xFE> 或是偷懶,封包加入長度資料訊息,封包結尾用checksum檢查 <0xAA><data length n><data 1><data 2>...<data n><checksum> -- 不要問我從哪來,我只是一個浪跡天涯的工程師.... --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.232.21.114
1F:推 WolfLord:也可以用Base64或Code128來編碼(internet mime) 08/15 23:07
2F:推 gg1122:哪些封包都有包好 只是原始的資料進來哪邊不清楚 08/15 23:09
3F:→ gg1122:51做了什麼 把判斷0x0D弄掉 資料整段大於某個長度 再去拆 08/15 23:10
4F:→ gg1122:可是我看51哪邊就一直進不去拆封包的 程式段 覺得很怪 08/15 23:11
5F:推 WolfLord:如果你的資料是ascii,你也可以判斷比32比127大直接忽略 08/15 23:14
6F:→ WolfLord: 比32小 08/15 23:15
7F:→ WolfLord:不存入緩衝 08/15 23:15
8F:→ gg1122:我的資料0~0xFF都會出現 應該不可行 08/15 23:17
這樣很高的機率是程式問題,你的解封包怎樣做的?如果是用狀態 機去做,要檢查狀態機遷移的條件。整個解封包如果大雜燴的寫在 一起就比較難debug.如果是用指標函式去跑,可以"比較"容易透過 指標函式的遷移去檢查狀態機的狀態處發是否正確? ※ 編輯: MasterChang 來自: 118.232.21.114 (08/15 23:34)
9F:推 gg1122:if(UART_Buffer[0]=head1 && UART_Buffer[1]==head2) 08/15 23:40
10F:→ gg1122:這樣一層一層if掛下去 08/15 23:42
if(UART_Buffer[0]==head1 && UART_Buffer[1]==head2) 看得出來哪裡不一樣嗎? 而且這邏輯有問題,應該先檢查第一個接收資料是否為head1。 若為真才做檢查head2的動作。若為否則回到檢查接收資料是否 為head1。 因為資料開頭的head1有可能在UART_Buffer[1]裡....XD 簡單的說類似這樣的處理 ch = SURF; switch(msgstate) { case 0: if(ch == head1){msgstate++;} else{msgstate = 0;} break; case 1: if(ch == head2){msgstate++;} else{msgstate = 0;} break; case 3: ... default: } ※ 編輯: MasterChang 來自: 118.232.21.114 (08/15 23:48)
11F:推 gg1122:哪我筆誤 == 才對 其實主要是進不來這行 08/15 23:46
12F:→ gg1122:奇怪 判斷RX LEN多長在進來 怎會不行 搞不懂51動作 08/15 23:49
13F:→ gg1122:明天我改一個一個BYTE去處理 不過還是想不透必須補結尾字元 08/15 23:55
14F:→ gg1122:整個資料才會收進來 ... 08/15 23:56
是不是PC端程式必須收到CR字元才開始發送?PC端程式確認一下... ※ 編輯: MasterChang 來自: 118.232.21.114 (08/15 23:58)
15F:→ gg1122:上端丟的 我用VC寫GUI去丟到51的 所以資料格式都是我控制的 08/15 23:59
如果是呼叫win api,確認一下結構的設定,那部分我沒碰、不 熟,我都是用BCB + Victor元件。 ※ 編輯: MasterChang 來自: 118.232.21.114 (08/16 00:03)
16F:→ gg1122:明天再查不出來 我就改成一個一個BYTE去判斷了 08/16 00:00
17F:→ gg1122:謝謝! 08/16 00:01
18F:推 WolfLord:PC端如果你open stream piple的話,只有兩種狀況會真實 08/16 16:44
19F:→ WolfLord:真實傳送:buffer full跟收到\r\n 08/16 16:45
20F:→ WolfLord:解覺得方法有兩種:open raw 或把 file io buffer改成1 08/16 16:46
21F:推 gg1122:用成FSM就好了! 08/18 11:49
22F:推 timestoprun:GOOGLE一下FIFO的UART寫法!!應該可以解決唷!!! 10/22 21:12







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP