[問題] MCU 的多工處理

看板ASM (組合語言)作者 (answered)時間7年前 (2017/06/13 16:57), 7年前編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
各位前輩好,小弟不太確定這個標題夠不夠精確, 先說一下目前想實現的東西好了: 平台:Freedom - K64F IDE :Kinetis Design Studio with K-SDK 2.0 實現目標: 想讓這個程式有兩個功能 1.接收來自上層(APP、Cloud)的 TCP/UDP 連線並回應 2.跟區域網路內的 Ethernet 裝置透過 EV2 封包溝通 目前是透過 LwIP 的 RAW API 來實現 TCP/UDP 的部分 基本的 TCP/UDP Server Echo 我跟著 LwIP 裡面的範例做出來了 就是 accept-receive-sent-close 的流程 功能2的溝通單獨做的話也可以做到向指定的MAC位置收發封包 但目前遇到的瓶頸是: 我想透過 TCP 封包來對 MCU 下命令 命令內容可能是對其中一個 MAC 裝置發 EV2 封包 預想的流程是 Client Server Connect ---------> Accept Sent Command ------> Recv Analysis Sent EV2 EV2 Respond Recv <-------- Respond TCP 但跟著上述流程做的話 會不知道怎麼將處理好的狀況透過 TCP 再回傳 原因是這個 API 本身處理 TCP Stack 的方式是運用 Callback 沒辦法從外部程式呼叫 tcp_sent 的函式 直接用 API 中的 tcp_write 將要傳送的資料 enqueue 再用 tcp_output 試著送出 會得到 not connect error 並且在 output 的時候會掛掉 有想過如果用RTOS Multi-thread或許可以解決這個問題 嘗試了發現要開啟第二個thread時會有空間不足的狀況 想請教板上前輩有沒有更好的建議應該怎麼做 小弟懇請各位指導 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.99.25 ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1497344220.A.38A.html

06/13 22:59, , 1F
看起來好像在recv裡面做tcp_write不是嗎0.0
06/13 22:59, 1F
我本來也是這樣想 後來發現這個API的運作模式是透過polling ethernet input 再層層解析封包,才會進入tcp 控制區中 如果一個TCP封包進來大概是這樣 ethernet receive -> ip -> tcp -> tcp_process -> user function callback 也就是說如果我要把流程做成是 tcp_recv -> ethernet send -> ethernet receive -> tcp_send 是有點不合他原生流程的 目前有想到兩個解法 一個是把我要的ethernet 收送的部分 丟到 tcp 的 callback function 中處理 第二個是改用 FNet API 透過RTOS 的 Multi-thread 來處理 ※ 編輯: AnswerD (118.163.99.25), 06/14/2017 11:13:28
文章代碼(AID): #1PFwZSEA (ASM)
文章代碼(AID): #1PFwZSEA (ASM)