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

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

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

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

淺談OpenAMP的應(yīng)用程序中RPMSG_ADDR_ANY含義

454398 ? 來(lái)源:賽靈思中文社區(qū)論壇 ? 作者:賽靈思中文社區(qū)論 ? 2020-09-29 13:43 ? 次閱讀

在OpenAMP的應(yīng)用程序中,經(jīng)常看到地址被設(shè)置成RPMSG_ADDR_ANY。在通信過(guò)程中,為什么可以把源地址、目的地址設(shè)置成任意值?

這個(gè)宏的名字不夠清楚,它的本意是讓系統(tǒng)自動(dòng)選擇。如果設(shè)置源地址為RPMSG_ADDR_ANY,則系統(tǒng)自動(dòng)選擇一個(gè)空閑的源地址。如果設(shè)置目的地址為RPMSG_ADDR_ANY,則系統(tǒng)會(huì)自動(dòng)發(fā)送一個(gè)查詢消息,根據(jù)名稱查詢對(duì)方的地址,相當(dāng)于TCP/IP中的域名解析。

查看代碼,我們可以確認(rèn)以上結(jié)論。第一個(gè)函數(shù)是rpmsg_create_ept(),提供源地址、目的地址后,它創(chuàng)建rpmsg endpoint(節(jié)點(diǎn))。

下面代碼顯示,如果調(diào)用rpmsg_create_ept()時(shí)指定了源地址,會(huì)調(diào)用rpmsg_is_address_set設(shè)置源地址,相當(dāng)于TCP/IP中的Bind。如果調(diào)用rpmsg_create_ept()時(shí)沒(méi)有指定源地址,則會(huì)調(diào)用rpmsg_get_address(),自動(dòng)從設(shè)備中沒(méi)有使用的地址中取一個(gè)地址。

// rpmsg.c
int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev,
		     const char *name, uint32_t src, uint32_t dest,
		     rpmsg_ept_cb cb, rpmsg_ns_unbind_cb unbind_cb)
{

	... ...

	if (src != RPMSG_ADDR_ANY) {
		status = rpmsg_is_address_set(rdev->bitmap,
					      RPMSG_ADDR_BMP_SIZE, src);
		if (!status) {
			/* Mark the address as used in the address bitmap. */
			rpmsg_set_address(rdev->bitmap, RPMSG_ADDR_BMP_SIZE,
					  src);
		} else if (status > 0) {
			status = RPMSG_SUCCESS;
			goto ret_status;
		} else {
			goto ret_status;
		}
	} else {
		addr = rpmsg_get_address(rdev->bitmap, RPMSG_ADDR_BMP_SIZE);
	}

	... ...

	return status;
}

// rpmsg.c
static uint32_t rpmsg_get_address(unsigned long *bitmap, int size)
{
	unsigned int addr = RPMSG_ADDR_ANY;
	unsigned int nextbit;

	nextbit = metal_bitmap_next_clear_bit(bitmap, 0, size);
	if (nextbit < (uint32_t)size) {
		addr = nextbit;
		metal_bitmap_set_bit(bitmap, nextbit);
	}

	return addr;
}

如果調(diào)用rpmsg_create_ept()時(shí)沒(méi)有指定目的地址,會(huì)調(diào)用rpmsg_send_ns_message()發(fā)送消息,之后就會(huì)返回。如果另外一側(cè)返回消息后,會(huì)觸發(fā)的調(diào)用rpmsg_virtio_rx_callback()。在rpmsg_virtio_rx_callback中,從消息中得到entpoint信息,檢查其中的目的地址,如果目的地址是ANY,就會(huì)從消息中提取出遠(yuǎn)端地址,賦值給本地endpoint的目的地址。

// rpmsg.c
int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev,
		     const char *name, uint32_t src, uint32_t dest,
		     rpmsg_ept_cb cb, rpmsg_ns_unbind_cb unbind_cb)
{
	... ...
	
	if (!status  && ept- > dest_addr == RPMSG_ADDR_ANY) {
		/* Send NS announcement to remote processor */
		metal_mutex_release(&rdev- > lock);
		status = rpmsg_send_ns_message(ept, RPMSG_NS_CREATE);
		metal_mutex_acquire(&rdev- > lock);
		if (status)
			rpmsg_unregister_endpoint(ept);
	}

	... ...
	
	return status;
}

// rpmsg_virtio.c
static void rpmsg_virtio_rx_callback(struct virtqueue *vq)
{

	... ...

	/* Process the received data from remote node */
	rp_hdr = (struct rpmsg_hdr *)rpmsg_virtio_get_rx_buffer(rvdev,
								&len, &idx);

	while (rp_hdr) {

		ept = rpmsg_get_ept_from_addr(rdev, rp_hdr->dst);
		if (ept->dest_addr == RPMSG_ADDR_ANY) {
			/*
			 * First message received from the remote side,
			 * update channel destination address
			 */
			ept->dest_addr = rp_hdr->src;
		}
		status = ept->cb(ept, (void *)RPMSG_LOCATE_DATA(rp_hdr),
				   rp_hdr->len, ept->addr, ept->priv);

	}
	
	... ...
}

編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1374

    瀏覽量

    79147
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3283

    瀏覽量

    57759
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TAS2521應(yīng)用程序參考指南

    電子發(fā)燒友網(wǎng)站提供《TAS2521應(yīng)用程序參考指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-10 13:49 ?0次下載
    TAS2521<b class='flag-5'>應(yīng)用程序</b>參考指南

    基于IMX8MM處理器Cortex-A核和Cortex-M核的RPMsg通信方案

    RPMsg全稱為 remote processor messages,是一種基于virtio的消息傳遞總線,專為異構(gòu)處理器系統(tǒng)之間的通信設(shè)計(jì)。
    的頭像 發(fā)表于 12-06 10:07 ?1794次閱讀
    基于IMX8MM處理器Cortex-A核和Cortex-M核的<b class='flag-5'>RPMsg</b>通信方案

    android手機(jī)上emulate應(yīng)用程序的方法

    。以下是一些在Android手機(jī)上模擬應(yīng)用程序的具體方法和步驟: 一、使用Android Studio的模擬器 安裝Android Studio : 首先,你需要在電腦上安裝Android
    的頭像 發(fā)表于 12-05 15:33 ?354次閱讀

    AWTK-WEB 快速入門(2) - JS 應(yīng)用程序

    導(dǎo)讀AWTK可以使用相同的技術(shù)棧開(kāi)發(fā)各種平臺(tái)的應(yīng)用程序。有時(shí)我們需要使用Web界面與設(shè)備進(jìn)行交互,本文介紹一下如何使用JS語(yǔ)言開(kāi)發(fā)AWTK-WEB應(yīng)用程序。用AWTKDesigner新建一個(gè)應(yīng)用程序先安裝AWTKDesigner
    的頭像 發(fā)表于 12-05 01:04 ?133次閱讀
    AWTK-WEB 快速入門(2) - JS <b class='flag-5'>應(yīng)用程序</b>

    AWTK-WEB 快速入門(1) - C 語(yǔ)言應(yīng)用程序

    導(dǎo)讀AWTK可以使用相同的技術(shù)棧開(kāi)發(fā)各種平臺(tái)的應(yīng)用程序。有時(shí)我們需要使用Web界面與設(shè)備進(jìn)行交互,本文介紹一下如何使用C語(yǔ)言開(kāi)發(fā)AWTK-WEB應(yīng)用程序。用AWTKDesigner新建一個(gè)應(yīng)用程序
    的頭像 發(fā)表于 11-27 11:46 ?238次閱讀
    AWTK-WEB 快速入門(1) - C 語(yǔ)言<b class='flag-5'>應(yīng)用程序</b>

    使用OpenVINO? ElectronJS創(chuàng)建桌面應(yīng)用程序

    的用戶體驗(yàn)。 1 應(yīng)用程序概覽:一種簡(jiǎn)單的背景虛化方法 這個(gè)演示展示了如何在 Node.js 環(huán)境中使用 OpenVINO 工具包實(shí)現(xiàn)背景虛化,并通過(guò) Electron.js 創(chuàng)建的直觀桌面界面進(jìn)行
    的頭像 發(fā)表于 11-25 11:35 ?205次閱讀
    使用OpenVINO? ElectronJS<b class='flag-5'>中</b>創(chuàng)建桌面<b class='flag-5'>應(yīng)用程序</b>

    PCM2912應(yīng)用程序的操作環(huán)境

    電子發(fā)燒友網(wǎng)站提供《PCM2912應(yīng)用程序的操作環(huán)境.pdf》資料免費(fèi)下載
    發(fā)表于 10-21 09:33 ?0次下載
    PCM2912<b class='flag-5'>應(yīng)用程序</b>的操作環(huán)境

    使用OpenVINO GenAI API在C++構(gòu)建AI應(yīng)用程序

    許多桌面應(yīng)用程序是使用 C++ 開(kāi)發(fā)的,而將生成式AI(GenAI)功能集成到這些應(yīng)用程序可能會(huì)很具有挑戰(zhàn)性,尤其是因?yàn)槭褂孟?Hugging Face 這樣的 Python 庫(kù)的復(fù)雜性。C++
    的頭像 發(fā)表于 10-12 09:36 ?404次閱讀
    使用OpenVINO GenAI API在C++<b class='flag-5'>中</b>構(gòu)建AI<b class='flag-5'>應(yīng)用程序</b>

    【米爾NXP i.MX 93開(kāi)發(fā)板試用評(píng)測(cè)】1、異構(gòu)核心通信的技術(shù)內(nèi)容

    前言 很多異構(gòu)核心使用的是標(biāo)準(zhǔn)的OpenAMPOpenAMP(Open Asymmetric Multi-Processing)是一個(gè)開(kāi)源的軟件框架,用于在異構(gòu)多核處理器系統(tǒng)實(shí)現(xiàn)多核處理。異構(gòu)
    發(fā)表于 09-21 20:24

    makefile啟用了OTA_FW_UPGRADE:=1,應(yīng)用程序崩潰的原因?怎么解決?

    在手表應(yīng)用程序,makefile 啟用了 OTA_FW_UPGRADE:=1,并嘗試從 MTB 庫(kù)的 LE OTA APP(安卓)使用 OTA 升級(jí)固件,在更新了 ota.bin
    發(fā)表于 06-03 07:11

    Anthropic推出iPhone應(yīng)用程序和業(yè)務(wù)層

    Anthropic 推出 iPhone 應(yīng)用程序和業(yè)務(wù)層,支持使用Claude 3 Opus、Sonnet 和 Haiku 模型
    的頭像 發(fā)表于 05-07 10:22 ?460次閱讀

    應(yīng)用程序的服務(wù)器錯(cuò)誤怎么解決?

    在使用應(yīng)用程序時(shí),可能會(huì)遇到服務(wù)器錯(cuò)誤的問(wèn)題。這種錯(cuò)誤通常會(huì)導(dǎo)致應(yīng)用程序無(wú)法正常運(yùn)行 ,給用戶帶來(lái)不便。下面將介紹應(yīng)用程序的服務(wù)器錯(cuò)誤及其解決方法,幫助您快速解決這一問(wèn)題。
    的頭像 發(fā)表于 03-12 15:13 ?6337次閱讀

    如何在ModusToolbox?檢查和設(shè)置應(yīng)用程序的內(nèi)存地址?

    如何在ModusToolbox?檢查和設(shè)置應(yīng)用程序的內(nèi)存地址?
    發(fā)表于 03-01 10:16

    LTE MQTT通信應(yīng)用程序說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《LTE MQTT通信應(yīng)用程序說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 02-21 10:47 ?0次下載
    LTE MQTT通信<b class='flag-5'>應(yīng)用程序</b>說(shuō)明

    為什么無(wú)法在modustoolbox?工具箱打開(kāi)新應(yīng)用程序

    我無(wú)法在modustoolbox?工具箱打開(kāi)新應(yīng)用程序。 如何解決這個(gè)問(wèn)題?
    發(fā)表于 01-31 07:32
    主站蜘蛛池模板: 午夜爱爱网站| 在线 色| 插插插操操操| 高清一级片| 色 ed2k| 亚洲第一中文字幕| 精品国产中文一级毛片在线看| 久久第一页| 一级毛片一级毛片一级毛片| 性生交大片免费一级| 日日噜噜夜夜狠狠久久aⅴ | 成人免费一区二区三区| 欧美男人的天堂| 日本不卡视频在线观看| 影音先锋ady69色资源网站| 五月婷六月婷婷| 欧美午夜视频在线观看| 久草tv| 在线观看色视频网站| 天天干夜夜谢| 亚洲mm8成为人影院| 性夜影院爽黄a爽免费视| 亚洲怡红院在线| 欧美午夜色视频国产精品| 黄色欧美视频| 午夜视频在线观看国产www| 狠狠干天天爽| 色吧久久| 欧美巨大bbbb动漫| 丁香花免费观看视频| 日日干日日爽| 超级乱淫伦网站| 中文字幕首页| 日本x色视频| 草色网| 久久riav二区三区| 欧美成人自拍视频| 欧美午夜剧场| 婷婷婷色| 狠狠色丁香婷婷综合小时婷婷 | 日本三级电影在线观看|