女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用vsomeip開(kāi)源C++庫(kù)呢?

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

在說(shuō)vsomeip之前,先介紹一下它的貢獻(xiàn)者——GENIVI,是一個(gè)非營(yíng)利汽車(chē)行業(yè)聯(lián)盟。這個(gè)聯(lián)盟成立于2009年,已經(jīng)成功地完成了最初的使命,提供了一個(gè)開(kāi)放的、基于linux的車(chē)載信息娛樂(lè)(IVI)平臺(tái),并擴(kuò)大了其范圍,幫助汽車(chē)制造商及其供應(yīng)商開(kāi)發(fā)標(biāo)準(zhǔn)方法。

在汽車(chē)行業(yè),GENIVI的項(xiàng)目被非常廣泛地應(yīng)用,比如:vsomeip,CommonAPI C++,DLT…沒(méi)見(jiàn)用過(guò)的就不列出來(lái)了,感興趣可以到官網(wǎng)了解更多。

vsomeip是一個(gè)開(kāi)源C++庫(kù),它實(shí)現(xiàn)了SOME/IP協(xié)議棧。接下來(lái),我們通過(guò)一個(gè)demo,感受一下SOME/IP的通信過(guò)程,以及如何使用vsomeip,廢話不多說(shuō),讓我們開(kāi)始吧~

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

2.jpg

接著,編譯和安裝vsomeip:

2.jpg

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

官方的helloworld,稍微有點(diǎn)簡(jiǎn)單,demo的思路是這樣的:

實(shí)現(xiàn)一個(gè)服務(wù)端,可以:1. 響應(yīng)請(qǐng)求,內(nèi)容為請(qǐng)求的反轉(zhuǎn);2. 觸發(fā)事件

實(shí)現(xiàn)一個(gè)客戶(hù)端,可以:1. 發(fā)送請(qǐng)求;2. 訂閱、接收事件

首先,服務(wù)端和客戶(hù)端需要約定一些ID,包括:

2.jpg

對(duì)于服務(wù)端,主要代碼如下:

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

其中,請(qǐng)求消息的回調(diào)函數(shù):

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

對(duì)于客戶(hù)端,主要代碼如下:

// 同樣地,創(chuàng)建應(yīng)用對(duì)象
app = vsomeip::runtime::get()->create_application("Hello");
// 初始化應(yīng)用
app->init();
// 注冊(cè)服務(wù)是否可用的回調(diào)
app->register_availability_handler(SAMPLE_SERVICE_ID, SAMPLE_INSTANCE_ID, on_availability);
// 請(qǐng)求服務(wù)
app->request_service(SAMPLE_SERVICE_ID, SAMPLE_INSTANCE_ID);
// 注冊(cè)接收所有消息的回調(diào)
app->register_message_handler(vsomeip::ANY_SERVICE, vsomeip::ANY_INSTANCE, vsomeip::ANY_METHOD, on_message);
// 發(fā)送請(qǐng)求線程
std::thread sender(run);
// 啟動(dòng)應(yīng)用
app->start();

其中,監(jiān)聽(tīng)服務(wù)是否可用的回調(diào)函數(shù):

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;
    // 服務(wù)可用了,可以去發(fā)送請(qǐng)求啦:)
    if (_is_available) { condition.notify_one(); }
}

接收所有消息的回調(diào)函數(shù):

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

客戶(hù)端發(fā)送請(qǐng)求線程函數(shù):

void run() {
    std::unique_lock

編譯,運(yùn)行結(jié)果如下:

2.jpg

通過(guò)打印出來(lái)的日志,我們可以比較清晰地看到整個(gè)通信的過(guò)程,并且實(shí)現(xiàn)了預(yù)期的效果。這個(gè)例子只能說(shuō)明如何快速地上手vsomeip,其實(shí),還有很多東西可以挖掘,比如vsomeip怎么配置,routing manager怎么配置,和dlt怎么聯(lián)動(dòng)等等,真是學(xué)無(wú)止境呀,今天就先到這兒吧~

審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Boost
    +關(guān)注

    關(guān)注

    5

    文章

    383

    瀏覽量

    49326
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    88

    瀏覽量

    11818
  • Ubuntu系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    4233
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C/C++開(kāi)源庫(kù)及示例代碼簡(jiǎn)介

    C/C++ 開(kāi)源庫(kù)及示例代碼Table of Contents說(shuō)明1 綜合性的庫(kù)2 數(shù)據(jù)結(jié)構(gòu) & 算法2.1 容器2.1.1 標(biāo)準(zhǔn)容器2.1
    發(fā)表于 08-20 08:23

    如何編譯已有的C++去生成可在OpenHarmony系統(tǒng)使用的動(dòng)態(tài)庫(kù)文件

    原有Linux環(huán)境下的C++ 項(xiàng)目,可通過(guò)在CMakeList文件中設(shè)置使用的工具鏈,編譯出各平臺(tái)開(kāi)發(fā)板上可使用的so文件。請(qǐng)問(wèn),我現(xiàn)在在Hi3516開(kāi)發(fā)板上,燒錄OpenHarmony V3.1Beta版本的標(biāo)準(zhǔn)系統(tǒng),該如何編譯已有的C++項(xiàng)目,生成可在OpenHarm
    發(fā)表于 03-16 10:42

    用Visual C++做數(shù)據(jù)庫(kù)開(kāi)發(fā)

    實(shí)驗(yàn) 用Visual C++做數(shù)據(jù)庫(kù)開(kāi)發(fā) 一、實(shí)驗(yàn)?zāi)康?、了解數(shù)據(jù)庫(kù)的訪問(wèn)方式,掌握ADO 方式訪問(wèn)數(shù)據(jù)庫(kù)2、用 Visual C++制作
    發(fā)表于 05-10 10:54 ?2533次閱讀

    c++標(biāo)準(zhǔn)庫(kù)手冊(cè)

    C++的標(biāo)準(zhǔn)庫(kù)手冊(cè),新手學(xué)習(xí)的好資料,同時(shí)也是開(kāi)發(fā)人員的必備手冊(cè)。里面涵蓋了標(biāo)準(zhǔn)C++的所有的庫(kù)函數(shù)。
    發(fā)表于 11-03 14:05 ?43次下載

    The C++ Standard Library

    C++標(biāo)準(zhǔn)庫(kù)英文版。 C++強(qiáng)大的功能來(lái)源于其豐富的類(lèi)庫(kù)及庫(kù)函數(shù)資源。
    發(fā)表于 05-13 14:41 ?0次下載

    一文讀懂boost庫(kù)的概念和安裝方式

    一、boost庫(kù)簡(jiǎn)介boost庫(kù)是一個(gè)功能強(qiáng)大,構(gòu)造精巧,跨平臺(tái)的免費(fèi)的C++開(kāi)源庫(kù)。它使得C++
    的頭像 發(fā)表于 09-23 09:47 ?8224次閱讀

    C++開(kāi)源庫(kù)的詳細(xì)資料合集免費(fèi)下載

    程序員要站在巨人的肩膀上,C++擁有豐富的開(kāi)源庫(kù),這里包括:標(biāo)準(zhǔn)庫(kù)、Web應(yīng)用框架、人工智能、數(shù)據(jù)庫(kù)、圖片處理、機(jī)器學(xué)習(xí)、日志、代碼分析等。
    發(fā)表于 05-30 17:55 ?2次下載
    <b class='flag-5'>C++</b><b class='flag-5'>開(kāi)源</b><b class='flag-5'>庫(kù)</b>的詳細(xì)資料合集免費(fèi)下載

    C++的框架、庫(kù)和資源資料匯總大全

    關(guān)于 C++ 框架、庫(kù)和資源的一些匯總列表,由 fffaraz發(fā)起和維護(hù)。內(nèi)容包括:標(biāo)準(zhǔn)庫(kù)、Web應(yīng)用框架、人工智能、數(shù)據(jù)庫(kù)、圖片處理、機(jī)器學(xué)習(xí)、日志、代碼分析等。
    發(fā)表于 05-07 18:22 ?6次下載
    <b class='flag-5'>C++</b>的框架、<b class='flag-5'>庫(kù)</b>和資源資料匯總大全

    C++開(kāi)源庫(kù)大全詳細(xì)資料說(shuō)明

     程序員要站在巨人的肩膀上,C++擁有豐富的開(kāi)源庫(kù),這里包括:標(biāo)準(zhǔn)庫(kù)、Web應(yīng)用框架、人工智能、數(shù)據(jù)庫(kù)、圖片處理、機(jī)器學(xué)習(xí)、日志、代碼分析等
    發(fā)表于 05-06 18:23 ?4次下載
    <b class='flag-5'>C++</b>的<b class='flag-5'>開(kāi)源</b><b class='flag-5'>庫(kù)</b>大全詳細(xì)資料說(shuō)明

    C++的框架、庫(kù)和代碼分析的資料大全

    C++是在C語(yǔ)言的基礎(chǔ)上開(kāi)發(fā)的一種集面向?qū)ο缶幊?、泛型編程和過(guò)程化編程于一體的編程語(yǔ)言。應(yīng)用較為廣泛,是一種靜態(tài)數(shù)據(jù)類(lèi)型檢查的,支持多重編程的通用程序設(shè)計(jì)語(yǔ)言。 關(guān)于 C++ 框架、庫(kù)
    發(fā)表于 04-24 18:29 ?3次下載
    <b class='flag-5'>C++</b>的框架、<b class='flag-5'>庫(kù)</b>和代碼分析的資料大全

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

    搭建CommonAPI的開(kāi)發(fā)環(huán)境,有點(diǎn)費(fèi)勁的,除了依賴(lài)于boost和vsomeip,還有CommonAPI和CommonAPI-SomeIP,以及C++代碼生成工具,這里就不一一說(shuō)明了
    的頭像 發(fā)表于 01-18 16:34 ?6580次閱讀
    一起看一下CommonAPI <b class='flag-5'>C++</b>是怎么使用的吧

    如何使用DevEco Studio創(chuàng)建Native C++應(yīng)用

    for OpenAtom OpenHarmony (以下簡(jiǎn)稱(chēng)“OpenHarmony”)創(chuàng)建一個(gè)Native C++應(yīng)用。應(yīng)用采用“Native C++”模板,實(shí)現(xiàn)了通過(guò)Node-API調(diào)用C標(biāo)準(zhǔn)
    的頭像 發(fā)表于 02-21 14:30 ?1932次閱讀

    CC++編寫(xiě)環(huán)境下LabVIEW如何調(diào)用動(dòng)態(tài)庫(kù)?

    C語(yǔ)言編寫(xiě)的動(dòng)態(tài)鏈接庫(kù)相比,不同的地方在于extern int “C” __declspec(dllexport) add(int x,int y) 這一導(dǎo)出語(yǔ)句,在C代碼中沒(méi)有”
    發(fā)表于 06-11 09:15 ?8884次閱讀
    <b class='flag-5'>C</b>和<b class='flag-5'>C++</b>編寫(xiě)環(huán)境下LabVIEW如何調(diào)用動(dòng)態(tài)<b class='flag-5'>庫(kù)</b>?

    使用C++編寫(xiě)通用庫(kù)并在 Rust 中使用它 (WASI)

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

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類(lèi)庫(kù)案例:ThreadPoll

    1、程序簡(jiǎn)介該程序是基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類(lèi)庫(kù)的線程池處理:ThreadPoll。本案例完成如下工作:創(chuàng)建1個(gè)線程池,設(shè)置該線程池內(nèi)部有1024個(gè)線程空間。啟動(dòng)5個(gè)線程
    的頭像 發(fā)表于 02-10 18:09 ?281次閱讀
    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的<b class='flag-5'>C++</b>公共基礎(chǔ)類(lèi)<b class='flag-5'>庫(kù)</b>案例:ThreadPoll