91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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 ? 來源:賽靈思中文社區(qū)論壇 ? 作者:賽靈思中文社區(qū)論 ? 2020-09-29 13:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在OpenAMP的應(yīng)用程序中,經(jīng)??吹降刂繁辉O(shè)置成RPMSG_ADDR_ANY。在通信過程中,為什么可以把源地址、目的地址設(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í)沒有指定源地址,則會(huì)調(diào)用rpmsg_get_address(),自動(dòng)從設(shè)備中沒有使用的地址中取一個(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í)沒有指定目的地址,會(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ī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1425

    瀏覽量

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

    關(guān)注

    38

    文章

    3344

    瀏覽量

    60278
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    詳細(xì)解釋Keil-MDKCode、RO-data、RW-data、ZI-data的含義

    、RW-data、ZI-data的含義理解以及程序最終占用處理器的Flash空間大小和SRAM空間大小如何?今天就此問題跟大家進(jìn)行詳細(xì)的討論,希望可以對(duì)大家有所幫助。 一、含義解釋
    發(fā)表于 01-21 07:19

    基于RT-Thread的RPMsg-Lite異構(gòu)多核通信原理分析 | 技術(shù)集結(jié)

    RT-Thread(運(yùn)行于Cortex-M85核)和裸機(jī)程序(運(yùn)行于Cortex-M33核)之間使用rpmsg-lite進(jìn)行通信,并采用MCMGR組件替代rpmsg
    的頭像 發(fā)表于 12-19 17:16 ?8124次閱讀
    基于RT-Thread的<b class='flag-5'>RPMsg</b>-Lite異構(gòu)多核通信原理分析 | 技術(shù)集結(jié)

    深入了解API:詳解應(yīng)用程序接口的作用和原理

    引言:在現(xiàn)代軟件開發(fā)領(lǐng)域中, API(Application Programming Interface,應(yīng)用程序接口)扮演著至關(guān)重要的角色。無論是在Web開發(fā)、移動(dòng)應(yīng)用還是大型軟件系統(tǒng),API
    的頭像 發(fā)表于 11-03 09:37 ?367次閱讀

    如何在應(yīng)用程序調(diào)試期間分析棧和堆使用情況

    ,并在 Unified IDE 仍可使用。本文涵蓋了如何在 Vitis 中使用分析工具在應(yīng)用程序調(diào)試期間對(duì)棧和堆進(jìn)行監(jiān)控。
    的頭像 發(fā)表于 10-24 16:54 ?908次閱讀
    如何在<b class='flag-5'>應(yīng)用程序</b>調(diào)試期間分析棧和堆使用情況

    學(xué)生適合使用的SOLIDWORKS 云應(yīng)用程序

    隨著科技的不斷發(fā)展,計(jì)算機(jī)輔助設(shè)計(jì)(CAD)技術(shù)已經(jīng)成為現(xiàn)代工程教育的重要組成部分。SOLIDWORKS作為一款CAD軟件,其教育版云應(yīng)用程序為學(xué)生提供了強(qiáng)大而靈活的設(shè)計(jì)平臺(tái)。本文將探討
    的頭像 發(fā)表于 09-15 10:39 ?792次閱讀
    學(xué)生適合使用的SOLIDWORKS 云<b class='flag-5'>應(yīng)用程序</b>

    V5.2.1 Menuconfig,AMP如何配置呢?

    的cpu數(shù) 使能軟件包 RT-Thread online packages → system packages → OpenAMP Version 選擇為 v1.0.0 2.更新packages 輸入
    發(fā)表于 09-11 06:27

    FX3 UVC 無法與 Ubuntu 24.04 Cheese 或 Snapshot 相機(jī)應(yīng)用程序配合使用,怎么處理?

    `:運(yùn)行一次,沒有問題。首次出現(xiàn)緩沖錯(cuò)誤后啟動(dòng)。但是,使用 libcamera 測(cè)試應(yīng)用程序“cam”和“qcam”,我可以毫無問題地傳輸數(shù)據(jù)。 如果能幫助檢查 wireshark 跟蹤是否存在處理
    發(fā)表于 07-16 06:37

    CYBT-343026-01能否使用 HFP 和 AVRCP 制作應(yīng)用程序?

    我們計(jì)劃使用 CYBT-343026-01 制作使用 HFP 和 AVRCP 的應(yīng)用程序。 可以使用 CYBT-343026-01 制作使用 HFP 和 AVRCP 的應(yīng)用程序嗎? 根據(jù) QDID
    發(fā)表于 07-01 08:29

    stm32mp157的異核通信的rpmsg_sdb的m4固件和a7驅(qū)動(dòng)該如何編寫?

    stm32mp157的異核通信的rpmsg_sdb的m4固件和a7驅(qū)動(dòng)該如何編寫
    發(fā)表于 05-19 15:06

    將SDK從版本1.3.4更新至1.3.5后,cyfx3s_msc應(yīng)用程序的看門狗定時(shí)器出現(xiàn)故障怎么解決?

    我的設(shè)備固件基于 SDK 示例 cyfx3s_msc。 將 SDK 從 1.3.4 版本更新到 1.3.5 版本后,看門狗定時(shí)器出現(xiàn)故障。 每當(dāng)處理器由于看門狗而重置時(shí),應(yīng)用程序就會(huì)在重新啟動(dòng)后不久
    發(fā)表于 05-14 06:40

    【米爾-全志T536開發(fā)板試用體驗(yàn)】異核心開發(fā)

    串口來查看RTOS的輸出信息。但串口在哪里呢,這是個(gè)小秘密,就不告訴你,就不告訴你~~。 又重新去翻兩個(gè)原理圖,最后找到,是下層底板的一個(gè)排針上。 手冊(cè)雖然有rpmsg_demo與rpmsg_test兩個(gè)通訊測(cè)試
    發(fā)表于 03-27 17:00

    如何在 Raspberry Pi AI Camera 上構(gòu)建為開發(fā)人員提供實(shí)時(shí)的智能應(yīng)用程序

    在這篇特邀文章,我們的合作伙伴索尼公司的雷蒙娜-雷納(RamonaRayner)將向您展示如何快速探索不同的模型和人工智能功能,以及如何在RaspberryPi人工智能相機(jī)的基礎(chǔ)上輕松構(gòu)建應(yīng)用程序
    的頭像 發(fā)表于 03-25 09:37 ?839次閱讀
    如何在 Raspberry Pi AI Camera 上構(gòu)建為開發(fā)人員提供實(shí)時(shí)的智能<b class='flag-5'>應(yīng)用程序</b>!

    MCP:連接AI與應(yīng)用程序的開放標(biāo)準(zhǔn)!

    。 在第二種方式,開發(fā)者需要為AI大模型編寫與具體應(yīng)用程序協(xié)作的訪問代碼,例如,開發(fā)者希望DeepSeek-R1與Gmail協(xié)作,就需要手動(dòng)編寫協(xié)作代碼。這種手動(dòng)編寫協(xié)作代碼的方式,耗時(shí)費(fèi)力,還難以復(fù)用。 一,什么是MCP? 為解決AI應(yīng)用開發(fā)者手動(dòng)編寫A
    的頭像 發(fā)表于 03-21 18:21 ?2220次閱讀
    MCP:連接AI與<b class='flag-5'>應(yīng)用程序</b>的開放標(biāo)準(zhǔn)!

    國產(chǎn)開發(fā)板—米爾全志T113-i如何實(shí)現(xiàn)ARM+RISC-V+DSP協(xié)同計(jì)算?

    使用RPMsg框架進(jìn)行通訊,該框架用于AMP場(chǎng)景下處理器之間進(jìn)行相互通信。OpenAMP內(nèi)部實(shí)現(xiàn)了可用于RTOS或裸機(jī)系統(tǒng)RPMsg框架,與Linux內(nèi)核的
    發(fā)表于 03-21 16:50

    CUST_DEL后如何在S32K312上安全恢復(fù)應(yīng)用程序?

    在 AB Update 配置,假設(shè)真實(shí)性得到確認(rèn),在連續(xù) 8 次重置后,是否可以在 CUST_DEL IVT 給出地址的安全恢復(fù)應(yīng)用程序(不是基于 Jtag的)? 如果 IVT 丟失或損壞,HSE 將如何啟動(dòng)安全恢復(fù)
    發(fā)表于 03-17 07:47