色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    瀏覽量

    48136
  • 回調函數
    +關注

    關注

    0

    文章

    87

    瀏覽量

    11575
  • Ubuntu系統
    +關注

    關注

    0

    文章

    91

    瀏覽量

    3979
收藏 人收藏

    評論

    相關推薦

    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 ?2445次閱讀

    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 ?8008次閱讀

    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 ?6013次閱讀
    一起看一下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 ?1445次閱讀

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

    C語言編寫的動態鏈接相比,不同的地方在于extern int “C” __declspec(dllexport) add(int x,int y) 這一導出語句,在C代碼中沒有”
    發表于 06-11 09:15 ?7809次閱讀
    <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 ?1107次閱讀
    使用<b class='flag-5'>C++</b>編寫通用<b class='flag-5'>庫</b>并在 Rust 中使用它 (WASI)

    OpenHarmony標準系統C++公共基礎類案例:HelloWorld

    1、程序簡介該程序是基于凌蒙派OpenHarmony-v3.2.1標準系統C++公共基礎類的簡單案例:HelloWorld。主要講解C++公共基礎類案例如何搭建和編譯。2、程序解析
    的頭像 發表于 08-13 08:23 ?539次閱讀
    OpenHarmony標準系統<b class='flag-5'>C++</b>公共基礎類<b class='flag-5'>庫</b>案例:HelloWorld
    主站蜘蛛池模板: 精品国产人妻国语| 免费视频精品38| 日日摸夜夜嗷嗷叫日日拍| 成片免费观看视频在线网| 视频一区国产第一页| 国产热久久精| 一级做a爰片久久免费| 免费看美女的网站| 国产CHINESE HD精品| 亚洲精品无码不卡| 蜜饯1V1高H-| 国产精品亚洲一区二区三区久久| 亚洲无遮挡| 欧美日韩高清一区二区三区| 国产精品麻豆AV| 18岁末年禁止观看免费1000个| 日韩大胆视频| 久久国产乱子伦精品免费不卡 | 老师那里好大又粗h男男| 草莓视频在线观看完整高清免费| 亚洲高清在线天堂精品| 男女一边摸一边做羞羞的事情免费| 国产精品手机在线视频| 91九色网址| 亚洲精品九色在线网站| 强上轮流内射高NP男男| 久久er99热精品一区二区| 戳女人屁股流水羞羞漫画| 在教室伦流澡到高潮HNP视频| 色尼玛亚洲综合| 美妇教师双飞后菊| 国产在线观看成人| 成年人视频在线免费观看| 伊人最新网址| 亚洲 日韩 色 图网站| 青草在线在线d青草在线| 久久久精品免费视频| 国产精品免费观看视频播放| JIZJIZJIZ 日本老师水多| 印度最猛性ⅹxxxxx| 玄幻全黄h全肉后宫|