哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

在OpenAMP的應用程序中,經(jīng)??吹降刂繁辉O置成RPMSG_ADDR_ANY。在通信過程中,為什么可以把源地址、目的地址設置成任意值?

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

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

下面代碼顯示,如果調(diào)用rpmsg_create_ept()時指定了源地址,會調(diào)用rpmsg_is_address_set設置源地址,相當于TCP/IP中的Bind。如果調(diào)用rpmsg_create_ept()時沒有指定源地址,則會調(diào)用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;
}

如果調(diào)用rpmsg_create_ept()時沒有指定目的地址,會調(diào)用rpmsg_send_ns_message()發(fā)送消息,之后就會返回。如果另外一側(cè)返回消息后,會觸發(fā)的調(diào)用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

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

    關注

    8

    文章

    1433

    瀏覽量

    83760
  • 應用程序
    +關注

    關注

    38

    文章

    3346

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    RDMA設計56:如何設計基于RDMA的應用程序

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

    如何構(gòu)建藍牙應用程序?

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

    詳細解釋Keil-MDKCode、RO-data、RW-data、ZI-data的含義

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

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

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

    深入了解API:詳解應用程序接口的作用和原理

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

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

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

    MPLAB X IDE V6.25版本怎么對bootloader和應用程序進行燒錄

    請問MPLAB X IDE 怎么設置bootloader和應用程序的起始地址和大小,不然默認從0開始燒錄
    發(fā)表于 10-24 16:42

    學生適合使用的SOLIDWORKS 云應用程序

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

    深入芯馳D9360核間通信案例,RPMSG關鍵技術深度剖析

    Core-D9360平臺為例,詳解如何利用RPMSG與VirtIO機制實現(xiàn)A核與R核間的可靠通信,并提供關鍵代碼實現(xiàn)與調(diào)試方法。圖1Core-D9360核心板一、通信基礎:R
    的頭像 發(fā)表于 09-10 08:31 ?1332次閱讀
    深入芯馳D9360核間通信案例,<b class='flag-5'>RPMSG</b>關鍵技術深度剖析

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

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

    CYBT-343026-01能否使用 HFP 和 AVRCP 制作應用程序?

    我們計劃使用 CYBT-343026-01 制作使用 HFP 和 AVRCP 的應用程序。 可以使用 CYBT-343026-01 制作使用 HFP 和 AVRCP 的應用程序嗎? 根據(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應用程序的看門狗定時器出現(xiàn)故障怎么解決?

    我的設備固件基于 SDK 示例 cyfx3s_msc。 將 SDK 從 1.3.4 版本更新到 1.3.5 版本后,看門狗定時器出現(xiàn)故障。 每當處理器由于看門狗而重置時,應用程序就會在重新啟動后不久
    發(fā)表于 05-14 06:40
    东明县| 浑源县| 盐池县| 且末县| 嘉兴市| 青神县| 广河县| 无棣县| 凭祥市| 苍溪县| 泾川县| 白河县| 靖宇县| 嘉善县| 昌吉市| 普宁市| 三台县| 吴旗县| 左贡县| 教育| 彰化市| 正定县| 竹北市| 阳山县| 襄汾县| 和平区| 融水| 南宁市| 隆化县| 伊吾县| 乐至县| 竹溪县| 玛沁县| 衡阳市| 策勒县| 昌黎县| 廉江市| 三亚市| 哈尔滨市| 西青区| 南康市|