上位機圖像處理和嵌入式模塊部署(上、下位機通信的三個注意點)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】

? ? ? ? 如果最終部署在客戶現場的是一個嵌入式設備,那么上位機在做好了算法編輯和算法部署之后,很重要的一步就是處理上位機和下位機之間的通訊了。當然,我們可以通過一些開源庫來解決通信問題,比如xmlrpc。但是,我們有時候可能需要自定義協議來處理。自定義協議還是有很多好處的,比如說你的嵌入式設備只能和你的上位機進行通信。

? ? ? ? 這樣如果是自定義協議的話,那么有三個注意點就要小心一下。

1、CPU大小端

? ? ? ? 目前我們的筆記本電腦、臺式機都是x86或者x64 cpu,這些cpu都是小端結構。而報文協議一般都是大端結構。所謂的小端、大端,主要代表了數據字節的存儲次序。舉個例子來說,如果有一個整數是0x12345678,那么0x78如果保存在低端地址,那么cpu就是小端;如果0x12保存在低端地址,那么cpu就是大端。寫成函數就是這樣的,

bool isCpuLittleEndian()
{unsigned int val = 0x12345678;unsigned char* p = (unsigned char*)&val;return (*p == 0x78) ? true : false;
}

? ? ? ? 既然是這樣,那我們在編寫報文的時候,就需要把數據從小端轉成大端結構。等到收到報文、解析報文的時候,再把數據從大端解析成小端。這個過程都是少不了的。

2、數據補齊

? ? ? ? 很多時候,編譯器考慮到cpu訪問數據的效率和便利,會有意、無意幫我們做數據對齊的動作。這些動作如果在平時,通常關系不大。但是通信的時候,我們的報文是要和別人的設備做數據交接的,這種情況下一個byte的偏移都是不應該的。所以,在上下文交互的時候,這種數據補齊必須是要避免發生的。舉個例子來說,下面這個結構體,

typedef struct _DataVal
{short a;char b;int c;
}DataVal;

? ? ? ? 如果不做特殊處理的話,這個數據結構體的大小就是8。但是實際大小應該是7。因為short長度是2,char長度是1,int長度是4,所以整體長度是7。這個時候,如果我們不想編譯器幫助我們做數據補齊,應該怎么處理呢,

#pragma pack(1)
typedef struct _DataVal
{short a;char b;int c;
}DataVal;
#pragma unpack

? ? ? ? 這個語法目前在visual studio和gdb上都是支持的,大家自己可以好好測試下。通過測試,我們可以清楚地看到,加了pack之后,DataVal的大小是7。

3、json數據的使用

? ? ? ? 早期協議開發的時候,特別是協議還沒有穩定的時候,臨時增添數據、減少數據,這都是很常見的事情。另外,即使協議比較穩定,添加新的客戶需求,變更協議,這也不罕見。所以,建議大家可以在協議開發的時候,對于其中一部分內容,可以考慮用json保存和傳遞,還不用考慮字節序的問題。比如說,發送前,把json轉成字節碼。收到報文后,再恢復為json數據。雖然傳輸的效率效率有所降低,但是勝在穩定,易于拓展。朋友們可以在開發的過程中參考下。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715288.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715288.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715288.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

beets,一個有趣的 Python 音樂信息管理工具!

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站AI學習網站。 目錄 前言 什么是Beet庫? 安裝Beet庫 使用Beet庫 Beet庫的功能特性 1. 多種音樂格式支持 2. 自動標簽識…

【學習筆記】數據結構與算法05:樹、層序遍歷、深度優先搜索、二叉搜索樹

知識出處:Hello算法:https://www.hello-algo.com/ 文章目錄 2.4 樹2.4.1 「二叉樹 binary tree」2.4.1.1 二叉樹基本操作2.4.1.2 二叉樹的常見類型「完美二叉樹 perfect binary tree」「完全二叉樹 complete binary tree」「完滿二叉樹 full binary tre…

H12-821_106

106.如圖所示,RTA的GEO/0/0、GEO/0/1接口分別連接部門1和2,其網段分別為10.1.2.0/24、10.1.3.0/24網段,為限制部門1和2之間的相互訪間,在RTA上部署traffic-filter,以下哪些部署方式是正確? A.配置ACL3000拒…

職場的過早優化

過早優化,指的是還沒弄清楚需求未來的變化的走向的時候,忽略了更重要的問題。 放在職業發展上:你在沒有積累足夠職場資源(眼界、能力、人脈等等),也沒有對職業發展形成清晰認知的時候,就過早地進…

【c++】構造函數(下)——初始化列表

Hello,everybody!構造函數的內容比較多,語法還有些復雜。我分成了兩篇文章進行講解,大家在看過構造函數(上)后再來看這篇文章更容易理解喲! 1.初始化列表的格式 類似這種格式,在初始化列表中第一行用冒號開頭,剩下的用…

力扣每日一題 使二叉樹所有路徑值相等的最小代價 滿二叉樹 貪心

Problem: 2673. 使二叉樹所有路徑值相等的最小代價 文章目錄 思路復雜度Code 思路 👨?🏫 靈神題解 復雜度 ? 時間復雜度: O ( n ) O(n) O(n) 🌎 空間復雜度: O ( 1 ) O(1) O(1) Code class Solution {public int minIncrements(int …

ai智能電銷機器人搭建需要注意什么?人工智能電話機器人源碼技術

電銷機器人的出現,讓越來越多的企業意識到了電銷機器人的好處,不僅提高了工作效率,也讓我們更省心,但我們在選擇電話機器人的時候應該注意看語音識別技術、看話術模板制造、還要看公司研制才能等。 一、電銷機器人的選擇要素 1、看…

拿金幣 藍橋杯ALGO1006 有一個N x N的方格,問如何走才能拿到最多的金幣

問題描述 有一個N x N的方格,每一個格子都有一些金幣,只要站在格子里就能拿到里面的金幣。你站在最左上角的格子里,每次可以從一個格子走到它右邊或下邊的格子里。請問如何走才能拿到最多的金幣。 輸入格式 第一行輸入一個正整數n。   以下n行描述該方格。金幣數保證是不超過…

Vue+SpringBoot打造無代碼動態表單系統

目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 動態類型模塊2.2 動態文件模塊2.3 動態字段模塊2.4 動態值模塊 三、系統設計3.1 用例設計3.2 數據庫設計3.2.1 動態類型表3.2.2 動態文件表3.2.3 動態字段表3.2.4 動態值表 四、系統展示五、核心代碼5.1 查詢檔案類型5.…

通過vue實現左側樹狀右側的組件

隨著后臺管理項目的開發&#xff0c;左側樹狀&#xff0c;右側則為列表的需求越來越多&#xff0c;還有就是拆分該數組&#xff0c;只展示其中一個對象等需求。廢話不多說&#xff0c;直接上代碼 <template><div><el-row :gutter"20"><el-col …

(四)優化函數,學習速率與反向傳播算法--九五小龐

多層感知器 梯度下降算法 梯度的輸出向量表明了在每個位置損失函數增長最快的方向&#xff0c;可將它視為表示了在函數的每個位置向那個方向移動函數值可以增長。 曲線對應于損失函數。點表示權值的當前值&#xff0c;即現在所在的位置。梯度用箭頭表示&#xff0c;表明為了增…

GEE入門篇|圖像處理(三):閾值處理、掩膜和重新映射圖像

閾值處理、掩膜和重新映射圖像 本章前一節討論了如何使用波段運算來操作圖像&#xff0c; 這些方法通過組合圖像內的波段來創建新的連續值。 本期內容使用邏輯運算符對波段或索引值進行分類&#xff0c;以創建分類圖像。 1.實現閾值 實現閾值使用數字&#xff08;閾值&#xf…

PXE網絡啟動實戰(第一篇 啟動WinPE)

免責聲明:文中有一些圖片來源自網絡,如有版權請通知我刪除,謝謝! 目錄 一、無盤站 二、PXE啟動 三、PXE啟動原理 四、啟動WinPE 1、服務器準備 2、客戶端 3、TFTP服務 4、WinPE選擇 5、具體操作: 預告 一、無盤站 網絡啟動最早用于無盤系統,那時的電腦只配備軟…

【python量化】多種Transformer模型用于股價預測(Autoformer, FEDformer和PatchTST等)_neuralforecast

寫在前面 在本文中&#xff0c;我們利用Nixtla的NeuralForecast框架&#xff0c;實現多種基于Transformer的時序預測模型&#xff0c;包括&#xff1a;Transformer, Informer, Autoformer, FEDformer和PatchTST模型&#xff0c;并且實現將它們應用于股票價格預測的簡單例子。 …

Libero集成開發環境中Identify應用與提高

Libero集成開發環境中Identify應用與提高 Identify的安裝

小米手機相冊閃退

環境&#xff1a; HyperOS 1.0 小米手機分身 處理步驟&#xff1a; 1&#xff09;清理相冊緩存&#xff1a;設置->應用設置->相冊->清理數據->清除緩存&#xff08;注意&#xff1a;別點清理全部數據&#xff1b;這個方法對我沒用&#xff09;。 2&#xff09;卸…

操作系統原理與實驗——實驗三優先級進程調度

實驗指南 運行環境&#xff1a; Dev c 算法思想&#xff1a; 本實驗是模擬進程調度中的優先級算法&#xff0c;在先來先服務算法的基礎上&#xff0c;只需對就緒隊列到達時間進行一次排序。第一個到達的進程首先進入CPU&#xff0c;將其從就緒隊列中出隊后。若此后隊首的進程的…

多租戶 TransmittableThreadLocal 線程安全問題

在一個多租戶項目中&#xff0c;用戶登錄時,會在自定義請求頭攔截器AsyncHandlerInterceptor將該用戶的userId,cstNo等用戶信息設置到TransmittableThreadLocal中,在后續代碼中使用.代碼如下: HeaderInterceptor 請求頭攔截器 public class HeaderInterceptor implements Asyn…

阿里云國際云服務器全局流量分析功能詳細介紹

進行全局流量分析時&#xff0c;內網DNS解析會作為一個整體模塊&#xff0c;其他模塊的邊緣虛框顏色會置灰&#xff0c;示意作為一個整體進行全局分析&#xff0c;左側Region可以展開/匯總&#xff0c;也可以單獨選中某個Region模塊進行分析&#xff08;這時其他Region的流量線…

【Java面試題】Redis的用途

以下是一些常見的用途 1.緩存 Redis 可以用作緩存系統&#xff0c;&#xff0c;將頻繁訪問的數據存儲在內存中&#xff0c;從而加快數據訪問速度&#xff0c;減少對數據庫的訪問壓力。 2.消息隊列 Redis 支持發布/訂閱模式和列表數據結構&#xff0c;可以用作消息隊列系統的…