在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用vsomeip開源C++庫呢?

冬至子 ? 來源:拖拉機日記 ? 作者:活到一百歲 ? 2023-01-18 16:26 ? 次閱讀

在說vsomeip之前,先介紹一下它的貢獻者——GENIVI,是一個非營利汽車行業聯盟。這個聯盟成立于2009年,已經成功地完成了最初的使命,提供了一個開放的、基于linux的車載信息娛樂(IVI)平臺,并擴大了其范圍,幫助汽車制造商及其供應商開發標準方法。

在汽車行業,GENIVI的項目被非常廣泛地應用,比如:vsomeip,CommonAPI C++,DLT…沒見用過的就不列出來了,感興趣可以到官網了解更多。

vsomeip是一個開源C++庫,它實現了SOME/IP協議棧。接下來,我們通過一個demo,感受一下SOME/IP的通信過程,以及如何使用vsomeip,廢話不多說,讓我們開始吧~

首先,需要搭建環境(這里以Ubuntu16.04為例),vsomeip依賴Boost(1.55以上版本),因此我們需要先編譯和安裝Boost:

2.jpg

接著,編譯和安裝vsomeip:

2.jpg

上面這個配色,著實讓人匪夷所思(還是我用的有問題?),總之,我不喜歡,所以以后不再插入bash代碼,環境配置相關內容盡可能寫進README里,放到Github上,關注公眾號,回復“演示代碼”,就可以看到全部文章里涉及到的工程地址啦~

官方的helloworld,稍微有點簡單,demo的思路是這樣的:

實現一個服務端,可以:1. 響應請求,內容為請求的反轉;2. 觸發事件

實現一個客戶端,可以:1. 發送請求;2. 訂閱、接收事件

首先,服務端和客戶端需要約定一些ID,包括:

2.jpg

對于服務端,主要代碼如下:

// 創建應用對象
app = vsomeip::runtime::get()->create_application("World");
// 創建事件組,并添加事件組SAMPLE_EVENTGROUP_ID
std::set

其中,請求消息的回調函數:

void on_message(const std::shared_ptr {
    std::shared_ptr

對于客戶端,主要代碼如下:

// 同樣地,創建應用對象
app = vsomeip::runtime::get()->create_application("Hello");
// 初始化應用
app->init();
// 注冊服務是否可用的回調
app->register_availability_handler(SAMPLE_SERVICE_ID, SAMPLE_INSTANCE_ID, on_availability);
// 請求服務
app->request_service(SAMPLE_SERVICE_ID, SAMPLE_INSTANCE_ID);
// 注冊接收所有消息的回調
app->register_message_handler(vsomeip::ANY_SERVICE, vsomeip::ANY_INSTANCE, vsomeip::ANY_METHOD, on_message);
// 發送請求線程
std::thread sender(run);
// 啟動應用
app->start();

其中,監聽服務是否可用的回調函數:

void on_availability(vsomeip::service_t _service, vsomeip::instance_t _instance, bool _is_available) {
    std::cout << "CLIENT: Service ["
              << std::setw(4) << std::setfill('0') << std::hex << _service << "." << _instance
              << "] is "
              << (_is_available ? "available." : "NOT available.")
              << std::endl;
    // 服務可用了,可以去發送請求啦:)
    if (_is_available) { condition.notify_one(); }
}

接收所有消息的回調函數:

void on_message(const std::shared_ptr {
    std::stringstream its_message;
    its_message << "CLIENT: received a notification for event ["
            << std::setw(4) << std::setfill('0') << std::hex
            << _response->get_service() << "."
            << std::setw(4) << std::setfill('0') << std::hex
            << _response->get_instance() << "."
            << std::setw(4) << std::setfill('0') << std::hex
            << _response->get_method() << "] to Client/Session ["
            << std::setw(4) << std::setfill('0') << std::hex
            << _response->get_client() << "/"
            << std::setw(4) << std::setfill('0') << std::hex
            << _response->get_session()
            << "] = ";
    std::shared_ptr

客戶端發送請求線程函數:

void run() {
    std::unique_lock

編譯,運行結果如下:

2.jpg

通過打印出來的日志,我們可以比較清晰地看到整個通信的過程,并且實現了預期的效果。這個例子只能說明如何快速地上手vsomeip,其實,還有很多東西可以挖掘,比如vsomeip怎么配置,routing manager怎么配置,和dlt怎么聯動等等,真是學無止境呀,今天就先到這兒吧~

審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Boost
    +關注

    關注

    5

    文章

    370

    瀏覽量

    48471
  • 回調函數
    +關注

    關注

    0

    文章

    87

    瀏覽量

    11629
  • Ubuntu系統
    +關注

    關注

    0

    文章

    91

    瀏覽量

    4041
收藏 人收藏

    評論

    相關推薦

    C/C++開源及示例代碼簡介

    C/C++ 開源及示例代碼Table of Contents說明1 綜合性的2 數據結構 & 算法2.1 容器2.1.1 標準容器2.1
    發表于 08-20 08:23

    如何編譯已有的C++去生成可在OpenHarmony系統使用的動態文件

    原有Linux環境下的C++ 項目,可通過在CMakeList文件中設置使用的工具鏈,編譯出各平臺開發板上可使用的so文件。請問,我現在在Hi3516開發板上,燒錄OpenHarmony V3.1Beta版本的標準系統,該如何編譯已有的C++項目,生成可在OpenHarm
    發表于 03-16 10:42

    用Visual C++做數據開發

    實驗 用Visual C++做數據開發 一、實驗目的1、了解數據的訪問方式,掌握ADO 方式訪問數據2、用 Visual C++制作
    發表于 05-10 10:54 ?2461次閱讀

    c++標準手冊

    C++的標準手冊,新手學習的好資料,同時也是開發人員的必備手冊。里面涵蓋了標準C++的所有的庫函數。
    發表于 11-03 14:05 ?43次下載

    The C++ Standard Library

    C++標準英文版。 C++強大的功能來源于其豐富的類及庫函數資源。
    發表于 05-13 14:41 ?0次下載

    一文讀懂boost的概念和安裝方式

    一、boost簡介boost是一個功能強大,構造精巧,跨平臺的免費的C++開源。它使得C++
    的頭像 發表于 09-23 09:47 ?8047次閱讀

    C++開源的詳細資料合集免費下載

    程序員要站在巨人的肩膀上,C++擁有豐富的開源,這里包括:標準、Web應用框架、人工智能、數據、圖片處理、機器學習、日志、代碼分析等。
    發表于 05-30 17:55 ?2次下載
    <b class='flag-5'>C++</b><b class='flag-5'>開源</b><b class='flag-5'>庫</b>的詳細資料合集免費下載

    C++的框架、和資源資料匯總大全

    關于 C++ 框架、和資源的一些匯總列表,由 fffaraz發起和維護。內容包括:標準、Web應用框架、人工智能、數據、圖片處理、機器學習、日志、代碼分析等。
    發表于 05-07 18:22 ?6次下載
    <b class='flag-5'>C++</b>的框架、<b class='flag-5'>庫</b>和資源資料匯總大全

    C++開源大全詳細資料說明

     程序員要站在巨人的肩膀上,C++擁有豐富的開源,這里包括:標準、Web應用框架、人工智能、數據、圖片處理、機器學習、日志、代碼分析等
    發表于 05-06 18:23 ?4次下載
    <b class='flag-5'>C++</b>的<b class='flag-5'>開源</b><b class='flag-5'>庫</b>大全詳細資料說明

    C++的框架、和代碼分析的資料大全

    C++是在C語言的基礎上開發的一種集面向對象編程、泛型編程和過程化編程于一體的編程語言。應用較為廣泛,是一種靜態數據類型檢查的,支持多重編程的通用程序設計語言。 關于 C++ 框架、
    發表于 04-24 18:29 ?3次下載
    <b class='flag-5'>C++</b>的框架、<b class='flag-5'>庫</b>和代碼分析的資料大全

    一起看一下CommonAPI C++是怎么使用的吧

    搭建CommonAPI的開發環境,有點費勁的,除了依賴于boost和vsomeip,還有CommonAPI和CommonAPI-SomeIP,以及C++代碼生成工具,這里就不一一說明了
    的頭像 發表于 01-18 16:34 ?6171次閱讀
    一起看一下CommonAPI <b class='flag-5'>C++</b>是怎么使用的吧

    如何使用DevEco Studio創建Native C++應用

    for OpenAtom OpenHarmony (以下簡稱“OpenHarmony”)創建一個Native C++應用。應用采用“Native C++”模板,實現了通過Node-API調用C標準
    的頭像 發表于 02-21 14:30 ?1543次閱讀

    CC++編寫環境下LabVIEW如何調用動態

    C語言編寫的動態鏈接相比,不同的地方在于extern int “C” __declspec(dllexport) add(int x,int y) 這一導出語句,在C代碼中沒有”
    發表于 06-11 09:15 ?8009次閱讀
    <b class='flag-5'>C</b>和<b class='flag-5'>C++</b>編寫環境下LabVIEW如何調用動態<b class='flag-5'>庫</b>?

    使用C++編寫通用并在 Rust 中使用它 (WASI)

    使用 C++ 編寫通用并在 Rust 中使用它 (WASI) WebAssembly 簡介 WebAssembly 是一種二進制指令格式,旨在成為一種低級虛擬機,可以在 Web 瀏覽器中以接近本機
    的頭像 發表于 06-16 10:03 ?1173次閱讀
    使用<b class='flag-5'>C++</b>編寫通用<b class='flag-5'>庫</b>并在 Rust 中使用它 (WASI)

    基于OpenHarmony標準系統的C++公共基礎類案例:ThreadPoll

    1、程序簡介該程序是基于OpenHarmony標準系統的C++公共基礎類的線程池處理:ThreadPoll。本案例完成如下工作:創建1個線程池,設置該線程池內部有1024個線程空間。啟動5個線程
    的頭像 發表于 02-10 18:09 ?58次閱讀
    基于OpenHarmony標準系統的<b class='flag-5'>C++</b>公共基礎類<b class='flag-5'>庫</b>案例:ThreadPoll
    主站蜘蛛池模板: 免费毛片软件 | 毛片网站网址 | brazzers在线播放 | 毛片录像| 人人爽天天爽夜夜爽曰 | 精品热99| 美女网站色黄 | 日韩在线免费看网站 | 成 人色 网 站999 | 国产又黄又免费aaaa视频 | 天天草天天干天天 | 天天操天天摸天天射 | 天天玩夜夜操 | 手机看片国产福利 | 色婷婷5月| 天天爱夜夜做 | 国产精品美女免费视频大全 | 欧美日韩亚洲国产 | 99自拍视频| 天堂影院jav成人天堂免费观看 | 美女被艹视频网站 | 大桥未久加勒比女热大陆在线 | 天天干夜夜爽 | 四虎国产精品免费久久影院 | 欧美性天天影视 | eeuss久久久精品影院 | 亚洲精品91大神在线观看 | 色婷婷激婷婷深爱五月小说 | 免费啪视频在线观看免费的 | 欧美八区 | 午夜免费视频 | 久久精品五月天 | 中文字幕第8页 | 天天天做天天天天爱天天想 | 色国产精品| 天天天射| 在线你懂的网址 | 国产成在线观看免费视频 | 天堂社区在线视频 | 婷婷四房综合激情五月性色 | 亚洲天天综合网 |