chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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)自動選擇。如果設(shè)置源地址為RPMSG_ADDR_ANY,則系統(tǒng)自動選擇一個(gè)空閑的源地址。如果設(shè)置目的地址為RPMSG_ADDR_ANY,則系統(tǒng)會自動發(fā)送一個(gè)查詢消息,根據(jù)名稱查詢對方的地址,相當(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í)指定了源地址,會調(diào)用rpmsg_is_address_set設(shè)置源地址,相當(dāng)于TCP/IP中的Bind。如果調(diào)用rpmsg_create_ept()時(shí)沒有指定源地址,則會調(diào)用rpmsg_get_address(),自動從設(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í)沒有指定目的地址,會調(diào)用rpmsg_send_ns_message()發(fā)送消息,之后就會返回。如果另外一側(cè)返回消息后,會觸發(fā)的調(diào)用rpmsg_virtio_rx_callback()。在rpmsg_virtio_rx_callback中,從消息中得到entpoint信息,檢查其中的目的地址,如果目的地址是ANY,就會從消息中提取出遠(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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1434

    瀏覽量

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

    關(guān)注

    38

    文章

    3346

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    想在引導(dǎo)加載程序運(yùn)行時(shí)擦除和寫入應(yīng)用程序,否需要配置 PreTaskHook 第二張圖片中提到的內(nèi)核 MPU?

    嗨,Application 和 Bootloader 的內(nèi)存分布如下。如果我們想在引導(dǎo)加載程序運(yùn)行時(shí)擦除和寫入應(yīng)用程序,并且已經(jīng)啟用了啟動時(shí)的交流負(fù)載,我們是否需要配置 PreTaskHook
    發(fā)表于 04-28 07:11

    TMS320F28xxx DSP:從內(nèi)部閃存運(yùn)行應(yīng)用程序的全面指南

    TMS320F28xxx DSP:從內(nèi)部閃存運(yùn)行應(yīng)用程序的全面指南 在嵌入式系統(tǒng)設(shè)計(jì),讓應(yīng)用程序在TMS320F28xxx DSP的內(nèi)部閃存上運(yùn)行是一個(gè)常見需求。本文將深入探討從內(nèi)部閃存運(yùn)行
    的頭像 發(fā)表于 04-23 13:40 ?176次閱讀

    構(gòu)建示例應(yīng)用程序MCSPTR2AK396的問題求解

    顯示任何消息。 此外,如果我選擇“更新代碼”,則所有驅(qū)動程序都將從項(xiàng)目中刪除。 關(guān)于我遺漏了什么有什么提示嗎? 安裝的軟件堆棧與示例應(yīng)用程序的發(fā)行說明測試的軟件堆棧幾乎相同 Design
    發(fā)表于 04-20 13:11

    RDMA設(shè)計(jì)56:如何設(shè)計(jì)基于RDMA的應(yīng)用程序

    本博文主要交流設(shè)計(jì)思路,在本博客已給出相關(guān)博文約140篇,希望對初學(xué)者有用。 注意這里只是拋磚引玉,切莫認(rèn)為參考這就可以完成商用IP 設(shè)計(jì)。 應(yīng)用程序的工作流程如圖 1所示,大致分為 READ 包
    發(fā)表于 04-05 09:54

    如何構(gòu)建藍(lán)牙應(yīng)用程序?

    應(yīng)用程序使用藍(lán)牙(blueZ)。 我已經(jīng)安裝了 gcc-riscv64-linux-gnu。 但是,沒有安裝 blueZ 標(biāo)頭和庫。 如何構(gòu)建我的藍(lán)牙應(yīng)用程序
    發(fā)表于 04-01 07:31

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

    、RW-data、ZI-data的含義理解以及程序最終占用處理器的Flash空間大小和SRAM空間大小如何?今天就此問題跟大家進(jìn)行詳細(xì)的討論,希望可以對大家有所幫助。 一、含義解釋
    發(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 ?8278次閱讀
    基于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ā)、移動應(yīng)用還是大型軟件系統(tǒng),API
    的頭像 發(fā)表于 11-03 09:37 ?577次閱讀

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

    ,并在 Unified IDE 仍可使用。本文涵蓋了如何在 Vitis 中使用分析工具在應(yīng)用程序調(diào)試期間對棧和堆進(jìn)行監(jiān)控。
    的頭像 發(fā)表于 10-24 16:54 ?1070次閱讀
    如何在<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ì)平臺。本文將探討
    的頭像 發(fā)表于 09-15 10:39 ?963次閱讀
    學(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)緩沖錯誤后啟動。但是,使用 libcamera 測試應(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ū)動該如何編寫?

    stm32mp157的異核通信的rpmsg_sdb的m4固件和a7驅(qū)動該如何編寫
    發(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)用程序就會在重新啟動后不久
    發(fā)表于 05-14 06:40