衡阳派盒市场营销有限公司

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

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

3天內不再提示

淺談OpenAMP的應用程序中RPMSG_ADDR_ANY含義

454398 ? 來源:賽靈思中文社區論壇 ? 作者:賽靈思中文社區論 ? 2020-09-29 13:43 ? 次閱讀

在OpenAMP的應用程序中,經常看到地址被設置成RPMSG_ADDR_ANY。在通信過程中,為什么可以把源地址、目的地址設置成任意值?

這個宏的名字不夠清楚,它的本意是讓系統自動選擇。如果設置源地址為RPMSG_ADDR_ANY,則系統自動選擇一個空閑的源地址。如果設置目的地址為RPMSG_ADDR_ANY,則系統會自動發送一個查詢消息,根據名稱查詢對方的地址,相當于TCP/IP中的域名解析。

查看代碼,我們可以確認以上結論。第一個函數是rpmsg_create_ept(),提供源地址、目的地址后,它創建rpmsg endpoint(節點)。

下面代碼顯示,如果調用rpmsg_create_ept()時指定了源地址,會調用rpmsg_is_address_set設置源地址,相當于TCP/IP中的Bind。如果調用rpmsg_create_ept()時沒有指定源地址,則會調用rpmsg_get_address(),自動從設備中沒有使用的地址中取一個地址。

// 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;
}

如果調用rpmsg_create_ept()時沒有指定目的地址,會調用rpmsg_send_ns_message()發送消息,之后就會返回。如果另外一側返回消息后,會觸發的調用rpmsg_virtio_rx_callback()。在rpmsg_virtio_rx_callback中,從消息中得到entpoint信息,檢查其中的目的地址,如果目的地址是ANY,就會從消息中提取出遠端地址,賦值給本地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

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

    關注

    8

    文章

    1378

    瀏覽量

    79302
  • 應用程序
    +關注

    關注

    38

    文章

    3292

    瀏覽量

    57917
收藏 人收藏

    評論

    相關推薦

    TAS2521應用程序參考指南

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

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

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

    android手機上emulate應用程序的方法

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

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

    導讀AWTK可以使用相同的技術棧開發各種平臺的應用程序。有時我們需要使用Web界面與設備進行交互,本文介紹一下如何使用JS語言開發AWTK-WEB應用程序。用AWTKDesigner新建一個應用程序先安裝AWTKDesigner
    的頭像 發表于 12-05 01:04 ?153次閱讀
    AWTK-WEB 快速入門(2) - JS <b class='flag-5'>應用程序</b>

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

    導讀AWTK可以使用相同的技術棧開發各種平臺的應用程序。有時我們需要使用Web界面與設備進行交互,本文介紹一下如何使用C語言開發AWTK-WEB應用程序。用AWTKDesigner新建一個應用程序
    的頭像 發表于 11-27 11:46 ?293次閱讀
    AWTK-WEB 快速入門(1) - C 語言<b class='flag-5'>應用程序</b>

    使用OpenVINO? ElectronJS創建桌面應用程序

    的用戶體驗。 1 應用程序概覽:一種簡單的背景虛化方法 這個演示展示了如何在 Node.js 環境中使用 OpenVINO 工具包實現背景虛化,并通過 Electron.js 創建的直觀桌面界面進行
    的頭像 發表于 11-25 11:35 ?254次閱讀
    使用OpenVINO? ElectronJS<b class='flag-5'>中</b>創建桌面<b class='flag-5'>應用程序</b>

    PCM2912應用程序的操作環境

    電子發燒友網站提供《PCM2912應用程序的操作環境.pdf》資料免費下載
    發表于 10-21 09:33 ?0次下載
    PCM2912<b class='flag-5'>應用程序</b>的操作環境

    使用OpenVINO GenAI API在C++構建AI應用程序

    許多桌面應用程序是使用 C++ 開發的,而將生成式AI(GenAI)功能集成到這些應用程序可能會很具有挑戰性,尤其是因為使用像 Hugging Face 這樣的 Python 庫的復雜性。C++
    的頭像 發表于 10-12 09:36 ?467次閱讀
    使用OpenVINO GenAI API在C++<b class='flag-5'>中</b>構建AI<b class='flag-5'>應用程序</b>

    【米爾NXP i.MX 93開發板試用評測】1、異構核心通信的技術內容

    前言 很多異構核心使用的是標準的OpenAMPOpenAMP(Open Asymmetric Multi-Processing)是一個開源的軟件框架,用于在異構多核處理器系統實現多核處理。異構
    發表于 09-21 20:24

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

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

    Anthropic推出iPhone應用程序和業務層

    Anthropic 推出 iPhone 應用程序和業務層,支持使用Claude 3 Opus、Sonnet 和 Haiku 模型
    的頭像 發表于 05-07 10:22 ?494次閱讀

    使用Docker部署Go Web應用程序步驟

    大多數情況下Go應用程序被編譯成單個二進制文件,web應用程序則會包括模版和配置文件。而當一個項目中有很多文件的時候,由于很多文件沒有同步就會導致錯誤的發生并且產生很多的問題。
    發表于 04-20 09:33 ?550次閱讀
    使用Docker部署Go Web<b class='flag-5'>應用程序</b>步驟

    應用程序的服務器錯誤怎么解決?

    在使用應用程序時,可能會遇到服務器錯誤的問題。這種錯誤通常會導致應用程序無法正常運行 ,給用戶帶來不便。下面將介紹應用程序的服務器錯誤及其解決方法,幫助您快速解決這一問題。
    的頭像 發表于 03-12 15:13 ?6518次閱讀

    如何在ModusToolbox?檢查和設置應用程序的內存地址?

    如何在ModusToolbox?檢查和設置應用程序的內存地址?
    發表于 03-01 10:16

    LTE MQTT通信應用程序說明

    電子發燒友網站提供《LTE MQTT通信應用程序說明.pdf》資料免費下載
    發表于 02-21 10:47 ?0次下載
    LTE MQTT通信<b class='flag-5'>應用程序</b>說明
    CEO百家乐现金网| 百家乐官网轮盘技巧| 德州扑克游戏| 十三张娱乐城开户| 大发888娱乐城 34hytrgwsdfpv| 大发888亚洲游戏在线| 新葡京娱乐| bet365网站地址器| 天将娱乐城开户| 百家乐官网技术下载| 百家乐官网实战案例| 百家乐官网好的平台| 百家乐官网平注法攻略| 百家乐官网是怎么赌法| 真博百家乐官网的玩法技巧和规则 | 爱博彩论坛| 金沙城百家乐官网大赛规则| 摩纳哥百家乐官网的玩法技巧和规则 | 做生意的风水摆件| 永利百家乐娱乐场| 大发888娱乐下载| 网络百家乐官网路单图| 新时代百家乐官网的玩法技巧和规则 | HG百家乐官网大转轮| 赌王百家乐官网的玩法技巧和规则 | 百家乐投注方法网| 大发888站群| 菠菜百家乐官网娱乐城| 做生意店内格局| 百家乐投资| 百家乐官网赌场国际| 百家乐乐城皇冠| 太阳城御园| 百家乐官网如何投注技巧| 百家乐官网游戏模拟| 百家乐路单显示程序| 大发888娱乐场优惠| 皇家赌场| 百家乐官网园棋牌| 属龙属虎合伙做生意吗| 大发888官方删除|