又大又粗又猛免费视频久久_国产理论在线播放_久久男人av资源网站免费软件_99国产精品无码

一個(gè)開(kāi)源的QT的串口示波器,很nice

一個(gè)開(kāi)源的QT的串口示波器,很nice

摘要:逛github時(shí)看到這個(gè)QT的串口示波器,完全開(kāi)源,支持串口、TCP、波形顯示、通信協(xié)議。感覺(jué)很不錯(cuò),跟以前分享的那個(gè)vofa 有點(diǎn)像。感興趣的可以下載下來(lái)學(xué)習(xí)學(xué)習(xí)。

相關(guān)文章:QT上位機(jī)合集

Sailor Project功能說(shuō)明

一個(gè)開(kāi)源的QT的串口示波器,很nice

串口調(diào)試助手功能

  • 支持傳統(tǒng)的串口調(diào)試助手的基本收發(fā)功能,同時(shí)可以刷新大量的數(shù)據(jù)而不卡頓
  • 支持保存接收的數(shù)據(jù)
  • 支持最大200條可編輯指令的設(shè)置,并用于多條發(fā)送
  • 支持定時(shí)器發(fā)送
  • 支持換行符替換時(shí)間戳功能
  • 支持較多的中文編碼格式
  • 值得注意的是支持Linux簡(jiǎn)單的串口調(diào)試
  • 支持加載csv表格數(shù)據(jù)到200條可編輯指令
  • 支持部分窗口配置的保存和重啟恢復(fù)(前提是你不會(huì)刪除配置文件)

操作說(shuō)明

注意由于QT自帶文本顯示窗口加載大量數(shù)據(jù)后會(huì)造成軟件卡頓,現(xiàn)解決方案為設(shè)定一個(gè)顯示緩沖區(qū),在有刷新數(shù)據(jù)階段(即串口接收數(shù)據(jù)階段),如果需要保持刷新?tīng)顟B(tài)(即實(shí)時(shí)顯示接收得數(shù)據(jù)),則僅顯示顯示緩沖區(qū)的內(nèi)容,你可以使用鼠標(biāo)移動(dòng)向上滾動(dòng)條,停止數(shù)據(jù)刷新,同時(shí)當(dāng)你向上移動(dòng)滾動(dòng)條到一定程度,便會(huì)開(kāi)始加載所有數(shù)據(jù),如果你想再次觸發(fā)實(shí)時(shí)刷新數(shù)據(jù)狀態(tài),只需要將滾動(dòng)條移動(dòng)到最低端,并確保有數(shù)據(jù)接收。

由于保存數(shù)據(jù)為顯示界面的數(shù)據(jù),如果出于刷新?tīng)顟B(tài),則無(wú)法保存所有數(shù)據(jù),正確的做法是關(guān)閉串口后,將滾動(dòng)條移動(dòng)到最頂端,加載全部數(shù)據(jù),然后保存窗口數(shù)據(jù)。

嵌入式物聯(lián)網(wǎng)單片機(jī)學(xué)習(xí)資料】整理了全套精華學(xué)習(xí)資料,除了教程外,還有一些大廠面經(jīng) 筆試面試題,開(kāi)源共享給大家。

點(diǎn)擊加V自?。侯I(lǐng)取資料私信我 或者點(diǎn)擊鏈接 http://s.pdb2.com/l/CMIsoKcnATFIF4M

一個(gè)開(kāi)源的QT的串口示波器,很nice

TCPServer界面

一個(gè)開(kāi)源的QT的串口示波器,很nice一個(gè)開(kāi)源的QT的串口示波器,很nice一個(gè)開(kāi)源的QT的串口示波器,很nice一個(gè)開(kāi)源的QT的串口示波器,很nice一個(gè)開(kāi)源的QT的串口示波器,很nice

SEASKY串口通信協(xié)議

通信方式是串口,配置為波特率115200, 8位數(shù)據(jù)位, 1位停止位, 無(wú)硬件流控, 無(wú)校驗(yàn)位。

1、通信協(xié)議格式

幀頭設(shè)備類型設(shè)備ID數(shù)據(jù)ID幀尾Protocol_header(4-byte)equipment_type(2-byte)equipment_id (2-byte)data_id(2-byte)frame_tail(2-byte,CRC16,整包校驗(yàn))

2、幀頭詳細(xì)定義

一個(gè)開(kāi)源的QT的串口示波器,很nice

3、串口通信協(xié)議

int parse_protocol(protocol_struct* pProtocol,uint16_t parseDataLen){ //解析數(shù)據(jù),使用前需提前緩沖 pProtocol->message_st.pData int ret = -1; uint16_t pos_offset; frame_struct* pFrameStruct = &pProtocol->frame_st; message_struct* pMessageStruct = &pProtocol->message_st; if (check_protocol_heade(pMessageStruct->pData) == PROTOCOL_RESULT_OK) { //更新幀頭數(shù)據(jù) pFrameStruct->header.sof = pMessageStruct->pData[0]; //獲取data段的數(shù)據(jù)長(zhǎng)度 pFrameStruct->header.data_length = (pMessageStruct->pData[2] << 8) | (pMessageStruct->pData[1]); pFrameStruct->header.crc_check = pMessageStruct->pData[3]; //獲取此次數(shù)據(jù)包長(zhǎng)度 pMessageStruct->data_len = pFrameStruct->header.data_length PROTOCOL_DATA_OFFSET 2; //計(jì)算解析后得到的 data_union 數(shù)據(jù)長(zhǎng)度 pFrameStruct->frame_user.cmd_data.data_len = (pFrameStruct->header.data_length) / sizeof(data_union); if(pMessageStruct->data_len<=parseDataLen) { if (pMessageStruct->data_len <= pMessageStruct->max_data_len) { if(CRC16_Check_Sum(&pMessageStruct->pData[0], pMessageStruct->data_len) != 0) { pFrameStruct->frame_user.equipment_type = (pMessageStruct->pData[5]<<8) | (pMessageStruct->pData[4]); pFrameStruct->frame_user.equipment_id = (pMessageStruct->pData[7] << 8) | (pMessageStruct->pData[6]); pFrameStruct->frame_user.data_id = (pMessageStruct->pData[9] << 8) | (pMessageStruct->pData[8]); //拷貝 data段 指定長(zhǎng)度數(shù)據(jù) ret = (int)memcpy(&pFrameStruct->frame_user.cmd_data.pData[0], &pMessageStruct->pData[PROTOCOL_DATA_OFFSET], pFrameStruct->header.data_length); pos_offset = pFrameStruct->header.data_length PROTOCOL_DATA_OFFSET; pFrameStruct->frame_tail = (pMessageStruct->pData[pos_offset 1] << 8) | (pMessageStruct->pData[pos_offset]); return PROTOCOL_RESULT_OK; } else { //待解析BUFF超過(guò)預(yù)定解析數(shù)據(jù)容量,避免內(nèi)存越界 PROTOCOL_ERROR_PRINTF("parse_protocol->>CRC16_Check_Sum err!n"); return PROTOCOL_RESULT_CHECK_FRAME_ERR; } } else { //待解析BUFF超過(guò)預(yù)定解析數(shù)據(jù)容量,避免內(nèi)存越界 PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d] > max_data_len[%d]!n", pMessageStruct->data_len, pMessageStruct->max_data_len); return PROTOCOL_RESULT_OUT_OF_LEN; } } else { //通過(guò)包頭計(jì)算,還未收到完整的數(shù)據(jù)包// PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d] > max_data_len[%d]!n",// pMessageStruct->data_len,// pMessageStruct->max_data_len); return PROTOCOL_RESULT_OUT_OF_LEN; } } else { //待解析BUFF超過(guò)預(yù)定解析數(shù)據(jù)容量,避免內(nèi)存越界 PROTOCOL_ERROR_PRINTF("parse_protocol->>check_protocol_heade err!n"); return PROTOCOL_RESULT_CHECK_HEAD_ERR; } PROTOCOL_DEBUG_PRINTF("parse_protocol->>check_protocol_heade ok!n"); return PROTOCOL_RESULT_ERR;}

軟件截圖

一個(gè)開(kāi)源的QT的串口示波器,很nice一個(gè)開(kāi)源的QT的串口示波器,很nice一個(gè)開(kāi)源的QT的串口示波器,很nice一個(gè)開(kāi)源的QT的串口示波器,很nice

項(xiàng)目開(kāi)源地址:

https://github.com/SEASKY-Master/vSailorProject

原文鏈接:https://mp.weixin.qq.com/s/Bf619Q3bQuon5d4CNxrt-Q

文章轉(zhuǎn)載自:果果小師弟

文章來(lái)源于:一個(gè)開(kāi)源的QT的串口示波器,很nice!

版權(quán)聲明:本文來(lái)源于網(wǎng)絡(luò),免費(fèi)傳達(dá)知識(shí),版權(quán)歸原作者所有,如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系我進(jìn)行刪除

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
在線咨詢
分享本頁(yè)
返回頂部