電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 20|回復: 0
收起左側

推薦一個嵌入式 RPC 通信框架

[復制鏈接]

484

主題

484

帖子

2859

積分

三級會員

Rank: 3Rank: 3

積分
2859
跳轉到指定樓層
樓主
發(fā)表于 昨天 11:38 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
一、RPC簡介RPC(Remote Procedure Call,遠程過程調(diào)用)機制是一種常用的通信機制。實際上就是要像調(diào)用本地的函數(shù)一樣去調(diào)遠程函數(shù)。
RPC機制,在互聯(lián)網(wǎng)中應用得比較廣泛。在我們嵌入式中,把傳輸層拓展到IPC、TPC/IP、UART、USB等,很多場景下也都可以用得上。
如:
? 需要發(fā)送確認的場景,比如發(fā)送某個數(shù)據(jù),需要對端回復一個數(shù)據(jù)進行確認,這種場景,我們可以在應用上進行實現(xiàn),隨著協(xié)議越加越多,對應的回復的代碼也越來越多,但基本都是很相似的代碼。這種下使用RPC機制就比較優(yōu)雅了,本地發(fā)起遠端調(diào)用請求,遠端執(zhí)行完后會將結果返回。
? 應用于進程間的交互:你寫了一段代碼,這段代碼可以調(diào)用你電腦上某個服務提供的功能,而不需要關心這個服務運行在你的電腦上還是在網(wǎng)絡的另一端。
? 應用于板間的交互:多個控制板之間需要通信和協(xié)作來協(xié)調(diào)生產(chǎn)過程。使用RPC可以簡化這些控制單元之間的調(diào)用和數(shù)據(jù)共享。
? 應用于端云的交互:IoT設備通常需要和云端服務器或其他設備交互。通過RPC,設備可以遠程調(diào)用云服務,實現(xiàn)數(shù)據(jù)同步、功能升級等操作。
二、RPC的基本原理

嵌入式RPC機制主要由客戶端和服務器兩部分組成:
1、客戶端:發(fā)起調(diào)用請求,將參數(shù)傳遞給遠程方法,并接收服務端返回的結果。在嵌入式系統(tǒng)中,客戶端通常作為非安全環(huán)境中的應用程序。
2、服務器:執(zhí)行客戶端調(diào)用的遠程過程,并將結果返回給客戶端。在嵌入式系統(tǒng)中,服務器通常位于安全環(huán)境中的可信執(zhí)行環(huán)境(TEE)中,如OP-TEE框架。
這張圖里的network傳輸鏈路,在我們嵌入式中,對于不同的應用場景可以是UART、USB等。
RPC的基本工作原理如下:
1、定義遠程方法接口(服務契約),包括方法名稱、參數(shù)類型、返回值類型等信息。
2、生成客戶端和服務端的stub(樁)和skeleton(骨架)代碼。
3、客戶端通過stub調(diào)用遠程方法,stub將請求序列化為網(wǎng)絡傳輸格式,然后通過網(wǎng)絡發(fā)送給服務端。
4、服務端接收到請求后,通過skeleton進行反序列化,根據(jù)接口定義執(zhí)行遠程方法,并將返回值序列化為網(wǎng)絡傳輸格式,發(fā)送給客戶端。
5、客戶端接收到服務端的響應后,通過stub進行反序列化,獲取返回值。
三、RPC的主要特點跨平臺性:RPC框架可以在不同的操作系統(tǒng)和平臺上運行,實現(xiàn)跨平臺的遠程調(diào)用。這一特點使得RPC框架能夠廣泛應用于各種異構環(huán)境中,提高了系統(tǒng)的靈活性和適應性。
透明性:RPC框架隱藏了底層的通信細節(jié),使得客戶端能夠像調(diào)用本地函數(shù)一樣調(diào)用遠程函數(shù),無需關注網(wǎng)絡通信的具體實現(xiàn)。這一特點簡化了開發(fā)者的編程模型,降低了開發(fā)難度。
高效性:RPC框架通常采用二進制數(shù)據(jù)傳輸和壓縮等技術,使得網(wǎng)絡通信效率更高,比如使用protobuf進行序列化與反序列化。
四、嵌入式RPC框架推薦:erpceRPC(嵌入式RPC)是NXP開源的、用于多芯片嵌入式系統(tǒng)和異構多核SoC的開源遠程過程調(diào)用(RPC)系統(tǒng)。與其他現(xiàn)代RPC系統(tǒng)(如出色的Apache Thrift)不同,eRPC的與眾不同之處在于它是為緊密耦合的系統(tǒng)設計的,使用純C實現(xiàn)遠程功能,并且代碼大小較。

erpc源碼:
https://github.com/EmbeddedRPC/erpc


? 函數(shù)的參數(shù)和標識符(用于被調(diào)用的例程)被序列化成字節(jié)流。
? 該字節(jié)流通過通信通道(IPC、TPC/IP、UART等)傳輸?shù)椒⻊掌鳌?br /> ? 服務器對參數(shù)進行反序列化,確定調(diào)用了哪個函數(shù),然后調(diào)用它。
? 如果函數(shù)返回一個值,那么該值將被序列化并通過通信通道發(fā)送回客戶端。
erpc主要特點? 輕量級但可擴展
? 生成的代碼較小
? 抽象傳輸接口
? 序列化數(shù)據(jù)的大小較小
? 非常適合C語言的環(huán)境,也足夠靈活,可以支持面向?qū)ο蟮恼Z言,如c++
? 從服務器到客戶機的異步通知
? 最小化延遲影響
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關閉

站長推薦上一條 /1 下一條


聯(lián)系客服 關注微信 下載APP 返回頂部 返回列表