女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

發(fā)燒友實(shí)測(cè) | i.MX8MP 編譯DPDK源碼實(shí)現(xiàn)rte_ring無(wú)鎖環(huán)隊(duì)列進(jìn)程間通信

飛凌嵌入式 ? 2022-01-10 16:29 ? 次閱讀

ad6972f6-6fd6-11ec-86cf-dac502259ad0.jpg

作者|donatello1996

來(lái)源 | 電子發(fā)燒友

題圖|飛凌嵌入式

rte_ring是一個(gè)用CAS實(shí)現(xiàn)的無(wú)鎖FIFO環(huán)形隊(duì)列,支持多消費(fèi)者/生產(chǎn)者同時(shí)出入隊(duì)列,常用于多線程/多進(jìn)程之間的通信。具體原理可以查看DPDK官方文檔或者閱讀源碼,本文采用的硬件板卡為飛凌嵌入式OKMX8MP-C開(kāi)發(fā)板,系統(tǒng)版本Linux5.4.70+Qt5.15.0,主要介紹通過(guò)編譯DPDK源碼實(shí)現(xiàn)rte_ring無(wú)鎖環(huán)隊(duì)列進(jìn)程間通信

下面就跟著小編一起了解下。

一、內(nèi)核編譯

下載并解壓飛凌廠商提供的iMX8MP內(nèi)核源碼壓縮包分卷:

ad94f48a-6fd6-11ec-86cf-dac502259ad0.jpg

在虛擬機(jī)中合并壓縮分卷并解壓得出內(nèi)核源碼包文件夾OK8MP-linux-kernel,將文件夾使用tar打包并復(fù)制到TF卡文件系統(tǒng)中解壓:

adcb86f8-6fd6-11ec-86cf-dac502259ad0.jpg

找到內(nèi)核源碼中的配置文件OK8MP-C_defconfig:

ade9250a-6fd6-11ec-86cf-dac502259ad0.jpg

這個(gè)就是make選項(xiàng),使用

make OK8MP-C_defconfig

指令即可配置編譯選項(xiàng):

make -j4

開(kāi)始編譯:

注意開(kāi)始編譯前需要安裝常用軟件:

apt install bison bc flex

ae1a54cc-6fd6-11ec-86cf-dac502259ad0.jpg

ae5d461a-6fd6-11ec-86cf-dac502259ad0.jpg

增量編譯完畢:

ae99b79e-6fd6-11ec-86cf-dac502259ad0.jpg

二、DPDK編譯

接下來(lái)就可以下載DPDK并運(yùn)行rte_ring無(wú)鎖環(huán)隊(duì)列Demo應(yīng)用,需要從

https://www.dpdk.org/

官網(wǎng)中下載DPDK 19.11.10 (LTS)長(zhǎng)期支持版本:

aed037f6-6fd6-11ec-86cf-dac502259ad0.jpg

在根目錄下的mk/文件夾下找到名為rte_vars.mk設(shè)置文件,找到環(huán)境變量RTE_KERNELDIR,修改為上述的內(nèi)核源碼路徑:

aef06c42-6fd6-11ec-86cf-dac502259ad0.jpg

af1baf2e-6fd6-11ec-86cf-dac502259ad0.jpg

RTE_KERNELDIR ?= /home/OK8MP-linux-kernel/

進(jìn)入usertools文件夾,找到dpdk-setup.sh腳本并運(yùn)行

af50d12c-6fd6-11ec-86cf-dac502259ad0.jpg

afa77ef0-6fd6-11ec-86cf-dac502259ad0.jpg

選擇8,ARM64-armv8a-linuxapp-gcc,

aff63860-6fd6-11ec-86cf-dac502259ad0.jpg

這個(gè)選項(xiàng)會(huì)使dpdk的gcc交叉編譯鏈生成適用于armv8a處理器的外部庫(kù),外部庫(kù)中有kmod和lib等ko文件和so文件,是用于第三方程序開(kāi)發(fā)和運(yùn)行的:

b02ae736-6fd6-11ec-86cf-dac502259ad0.jpg

b062a59a-6fd6-11ec-86cf-dac502259ad0.jpg

使用指令

insmod /home/dpdk-stable-19.11.10/arm64-armv8a-linuxapp-gcc/kmod/igb_uio.ko
左右滑動(dòng)查看完整代碼

加載igb_uio.ko驅(qū)動(dòng)文件,這是進(jìn)行dpdk開(kāi)發(fā)必備的步驟:

b09bad04-6fd6-11ec-86cf-dac502259ad0.jpg

然后是使用dpdk-devbind.py腳本手動(dòng)進(jìn)行hugepage大頁(yè)內(nèi)存綁定,此處為numa方式:

b0c8c2ee-6fd6-11ec-86cf-dac502259ad0.jpg

此舉會(huì)將/mnt/huge文件mount成hugepage映射文件,并實(shí)實(shí)在在地占用內(nèi)存空間:

b104b54c-6fd6-11ec-86cf-dac502259ad0.jpg
b12e5848-6fd6-11ec-86cf-dac502259ad0.jpg

三、rte_ring無(wú)鎖環(huán)隊(duì)列

準(zhǔn)備工作完成,我們接下來(lái)可以進(jìn)行rte_ring無(wú)鎖環(huán)隊(duì)列Demo代碼的編寫(xiě),但是在編寫(xiě)之前,需要對(duì)無(wú)鎖環(huán)隊(duì)列有一個(gè)基本的認(rèn)識(shí):https://blog.csdn.net/chen98765432101/article/details/69367633


無(wú)論是dpdk第三方開(kāi)發(fā)的rte_ring還是Linux內(nèi)核中本就存在的無(wú)鎖環(huán)隊(duì)列,其基本原理類(lèi)似,在一條分配好的隊(duì)列型內(nèi)存空間中,讀寫(xiě)方式為FIFO(先進(jìn)先出),讀和寫(xiě)的動(dòng)作分別有兩個(gè)進(jìn)程或兩個(gè)線程進(jìn)行,寫(xiě)進(jìn)程不斷往地址自增的內(nèi)存位置寫(xiě)入數(shù)據(jù),讀進(jìn)程不斷讀取地址自增的內(nèi)存位置的數(shù)據(jù),當(dāng)寫(xiě)位置的內(nèi)存地址已為隊(duì)列中內(nèi)存的最高值時(shí),需要釋放隊(duì)列中內(nèi)存地址最低值的空間供寫(xiě)進(jìn)程繼續(xù)寫(xiě),方式仍與上一周期相同(不斷往地址自增的內(nèi)存位置寫(xiě)入數(shù)據(jù)),釋放過(guò)程需要保證對(duì)末尾內(nèi)存地址空間的鎖定與解鎖,避免讀寫(xiě)過(guò)程出錯(cuò)。而不同的是,Linux內(nèi)核中的無(wú)鎖環(huán)隊(duì)列,地址管理和讀寫(xiě)控制均由內(nèi)核進(jìn)行,而dpdk的rte_ring則由dpdk內(nèi)部的控制器進(jìn)行,因?yàn)閐pdk這一模塊完整地接管了所分配內(nèi)存空間的管理權(quán),是直接繞過(guò)Linux內(nèi)核進(jìn)行管理的,內(nèi)核也無(wú)權(quán)訪問(wèn)dpdk控制器的具體管理細(xì)節(jié)。

b166ff54-6fd6-11ec-86cf-dac502259ad0.jpg

b1bab982-6fd6-11ec-86cf-dac502259ad0.jpg

b1f20900-6fd6-11ec-86cf-dac502259ad0.jpg

b2256d7c-6fd6-11ec-86cf-dac502259ad0.jpg

編寫(xiě)無(wú)鎖環(huán)隊(duì)列兩個(gè)進(jìn)程的Demo,先寫(xiě)Primary進(jìn)程:

#include #include #include #include #include #include #include #include #include #include 
#include #include 
#define RTE_LOGTYPE_APP RTE_LOGTYPE_USER1
static const char *_MSG_POOL = "MSG_POOL";static const char *_SEC_2_PRI = "SEC_2_PRI";static const char *_PRI_2_SEC = "PRI_2_SEC";static const char *_PRI_2_THI = "PRI_2_THI";
struct rte_ring *send_ring, *recv_ring , *send_ring_third;struct rte_mempool *message_pool;volatile int quit = 0;
static void * lcore_recv(void *arg){        unsigned lcore_id = rte_lcore_id();
        printf("Starting core %u\n", lcore_id);        while (!quit){                void *msg;                if (rte_ring_dequeue(recv_ring, &msg) < 0)                {                        usleep(5);                        continue;                }                printf("lcore_id = %d Received '%s'\n" , lcore_id , (char *)msg);                rte_mempool_put(message_pool , msg);        }
        return 0;}
int string_size = 100;int elt_size = 128;pthread_t id1;
int main(int argc, char **argv){        const unsigned flags = 0;        const unsigned ring_size = 64;        const unsigned pool_size = 1024;        const unsigned pool_cache = 32;        const unsigned priv_data_sz = 0;
        int ret;        unsigned lcore_id;
        ret = rte_eal_init(argc, argv);        if (ret < 0)                rte_exit(EXIT_FAILURE, "Cannot init EAL\n");
        send_ring = rte_ring_create(_PRI_2_SEC, ring_size, rte_socket_id(), flags);        recv_ring = rte_ring_create(_SEC_2_PRI, ring_size, rte_socket_id(), flags);        send_ring_third = rte_ring_create(_PRI_2_THI, ring_size, rte_socket_id(), flags);        message_pool = rte_mempool_create(_MSG_POOL, pool_size,                        elt_size, pool_cache, priv_data_sz,                        NULL, NULL, NULL, NULL,                        rte_socket_id(), flags);
        if (send_ring == NULL)                rte_exit(EXIT_FAILURE, "Problem getting sending ring\n");
        if (recv_ring == NULL)                rte_exit(EXIT_FAILURE, "Problem getting receiving ring\n");
        if (send_ring_third == NULL)                rte_exit(EXIT_FAILURE, "Problem getting send_ring_third\n");
        if (message_pool == NULL)                rte_exit(EXIT_FAILURE, "Problem getting message pool\n");
        pthread_create(&id1 , NULL , lcore_recv , NULL);        while(1)        {                void *msg = NULL;                if (rte_mempool_get(message_pool, &msg) < 0)                        continue;
                snprintf((char *)msg, string_size, "%s", "primary to secondary");                if (rte_ring_enqueue(send_ring , msg) < 0)                 {                        rte_mempool_put(message_pool, msg);                }
                if (rte_mempool_get(message_pool, &msg) < 0)                        continue;
                snprintf((char *)msg, string_size, "%s", "primary to third");                if (rte_ring_enqueue(send_ring_third , msg) < 0)                 {                        rte_mempool_put(message_pool, msg);                }
                sleep(1);        }
        return 0;}
左右滑動(dòng)查看完整代碼

注意在Makefile文件里面要關(guān)閉WERROR相關(guān)編譯選項(xiàng):

#   BSD LICENSE##   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.#   All rights reserved.##   Redistribution and use in source and binary forms, with or without#   modification, are permitted provided that the following conditions#   are met:##     * Redistributions of source code must retain the above copyright#       notice, this list of conditions and the following disclaimer.#     * Redistributions in binary form must reproduce the above copyright#       notice, this list of conditions and the following disclaimer in#       the documentation and/or other materials provided with the#       distribution.#     * Neither the name of Intel Corporation nor the names of its#       contributors may be used to endorse or promote products derived#       from this software without specific prior written permission.##   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS#   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT#   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR#   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT#   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,#   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY#   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT#   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE#   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ifeq ($(RTE_SDK),)$(error "Please define RTE_SDK environment variable")endif
# Default target, can be overridden by command line or environmentRTE_TARGET ?= arm64-armv8a-linuxapp-gcc
include $(RTE_SDK)/mk/rte.vars.mk
# binary nameAPP = rte_ring_primary
# all source are stored in SRCS-ySRCS-y := main.c
CFLAGS += -O0CFLAGS += 
include $(RTE_SDK)/mk/rte.extapp.mk
左右滑動(dòng)查看完整代碼

Secondary進(jìn)程:

#include #include #include #include #include #include #include #include #include #include 
#include #include 
#define RTE_LOGTYPE_APP RTE_LOGTYPE_USER1
static const char *_MSG_POOL = "MSG_POOL";static const char *_SEC_2_PRI = "SEC_2_PRI";static const char *_PRI_2_SEC = "PRI_2_SEC";
struct rte_ring *send_ring, *recv_ring;struct rte_mempool *message_pool;volatile int quit = 0;int string_size = 100;
static int lcore_send(__attribute__((unused)) void *arg){        unsigned lcore_id = rte_lcore_id();
        while(1)        {                void *msg = NULL;                if (rte_mempool_get(message_pool, &msg) < 0)                        continue;
                snprintf((char *)msg , string_size , "%s", "secondary to primary");                if (rte_ring_enqueue(send_ring , msg) < 0)                 {                        rte_mempool_put(message_pool, msg);                }                sleep(1);        }        return 0;}
pthread_t id1;
int main(int argc, char **argv){        const unsigned flags = 0;        const unsigned ring_size = 64;        const unsigned pool_size = 1024;        const unsigned pool_cache = 32;        const unsigned priv_data_sz = 0;
        int ret;        unsigned lcore_id;        ret = rte_eal_init(argc, argv);        if (ret < 0)                rte_exit(EXIT_FAILURE, "Cannot init EAL\n");
        recv_ring = rte_ring_lookup(_PRI_2_SEC);        send_ring = rte_ring_lookup(_SEC_2_PRI);        message_pool = rte_mempool_lookup(_MSG_POOL);
        if (send_ring == NULL)                rte_exit(EXIT_FAILURE, "Problem getting sending ring\n");        if (recv_ring == NULL)                rte_exit(EXIT_FAILURE, "Problem getting receiving ring\n");        if (message_pool == NULL)                rte_exit(EXIT_FAILURE, "Problem getting message pool\n");
        pthread_create(&id1 , NULL , lcore_send , NULL);    while (1)        {                lcore_id = rte_lcore_id();        void * msg = NULL;        if (rte_ring_dequeue(recv_ring, &msg) < 0)                {            usleep(5);            continue;        }
        printf("lcore_id = %d Received: %s\n" , lcore_id , (char *)msg);
        rte_mempool_put(message_pool, msg);    }
        return 0;}

左右滑動(dòng)查看完整代碼

同樣在Makefile文件里面要關(guān)閉WERROR相關(guān)編譯選項(xiàng):

#   BSD LICENSE##   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.#   All rights reserved.##   Redistribution and use in source and binary forms, with or without#   modification, are permitted provided that the following conditions#   are met:##     * Redistributions of source code must retain the above copyright#       notice, this list of conditions and the following disclaimer.#     * Redistributions in binary form must reproduce the above copyright#       notice, this list of conditions and the following disclaimer in#       the documentation and/or other materials provided with the#       distribution.#     * Neither the name of Intel Corporation nor the names of its#       contributors may be used to endorse or promote products derived#       from this software without specific prior written permission.##   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS#   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT#   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR#   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT#   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,#   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY#   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT#   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE#   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ifeq ($(RTE_SDK),)$(error "Please define RTE_SDK environment variable")endif
# Default target, can be overridden by command line or environmentRTE_TARGET ?= arm64-armv8a-linuxapp-gcc
include $(RTE_SDK)/mk/rte.vars.mk
# binary nameAPP = rte_ring_secondary
# all source are stored in SRCS-ySRCS-y := main.c
CFLAGS += -O3CFLAGS += $()
include $(RTE_SDK)/mk/rte.extapp.mk
左右滑動(dòng)查看完整代碼

運(yùn)行,這里說(shuō)一下,基于rte_ring的進(jìn)程間通信,Secondary進(jìn)程最好是使用auto類(lèi)型:

./rte_ring_primary --proc-type primary./rte_ring_secondary --proc-type auto

運(yùn)行效果:

b254fb0a-6fd6-11ec-86cf-dac502259ad0.jpg

b2a99c3c-6fd6-11ec-86cf-dac502259ad0.jpg

作者簡(jiǎn)介

donatello1996,某大型企業(yè)資深嵌入式工程師,電子發(fā)燒友論壇技術(shù)大牛,同時(shí)也是飛凌嵌入式多年鐵粉,曾基于飛凌多款板卡產(chǎn)出過(guò)優(yōu)質(zhì)測(cè)評(píng)文章或使用心得。本期三篇文章為donatello1996在使用OKMX8MP-C開(kāi)發(fā)板過(guò)程中精心產(chǎn)出的干貨,在此對(duì)donatello1996表示感謝。

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

    關(guān)注

    5141

    文章

    19537

    瀏覽量

    315138
收藏 人收藏

    評(píng)論

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

    i.MX8MP使用最新的BSP (6.6.52-2.2.0) 映像安裝TA失敗,為什么?

    我正在為 i.MX8MP 測(cè)試最新的 BSP image(),發(fā)現(xiàn)在嘗試安裝 TA 時(shí)會(huì)出現(xiàn)以下錯(cuò)誤 root@imx8mpevk:~# xtest --install-ta /usr/lib
    發(fā)表于 03-28 07:40

    將Deepseek移植到i.MX 8MP|93 EVK的步驟

    測(cè)試了不同模型對(duì)不同電路板的影響。需要注意的是,限制模型在電路板上運(yùn)行的最大障礙是內(nèi)存。包括 CPU 和內(nèi)存使用情況在內(nèi)的測(cè)試結(jié)果如下: a. i.MX8mp 深度搜索-r1-蒸餾
    發(fā)表于 03-26 06:08

    如何在IMX8MP上配置單通道內(nèi)存?

    我正在使用 i.MX 8M Plus 評(píng)估套件。測(cè)試 2 通道 LPDDR4 設(shè)備很好。但是,配置 1 個(gè)通道 LPDDR4 很困難,因?yàn)楦鶕?jù)原理圖,i.MX8MP 側(cè)的通道 A 連接到 LPDDR4 側(cè)的通道 B。如何在此交換
    發(fā)表于 03-17 07:00

    分享!基于NXP i.MX 8M Plus平臺(tái)的OpenAMP核通信方案

    i.MX 8M Plus平臺(tái)。 OpenAMP架構(gòu) AMP(Asymmetric Multi-Processing),即非對(duì)稱(chēng)多處理架構(gòu)。“非對(duì)稱(chēng)AMP”雙系統(tǒng)是指多個(gè)核心相對(duì)獨(dú)立運(yùn)行不同的操作系統(tǒng)或
    的頭像 發(fā)表于 02-27 10:44 ?425次閱讀
    分享!基于NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>8</b>M Plus平臺(tái)的OpenAMP核<b class='flag-5'>間</b><b class='flag-5'>通信</b>方案

    強(qiáng)悍的I.MX8MP核心板

    設(shè)計(jì) I.MX8MP 核心板的尺寸僅為 30mmX38mm,如此小巧的身材,在空間有限的應(yīng)用場(chǎng)景中具有得天獨(dú)厚的優(yōu)勢(shì)。其采用 10 層 2 階 PCB 設(shè)計(jì),這種設(shè)計(jì)不僅保障了核心板的穩(wěn)定性和可靠性,還在有限的空間內(nèi)實(shí)現(xiàn)了高密度的電路布局,為豐富的功能集成奠定了基
    的頭像 發(fā)表于 02-13 17:05 ?301次閱讀

    [求職] RK3588核心板,尋找志同道合的電子發(fā)燒友

    實(shí)現(xiàn)數(shù)據(jù)本地化處理和實(shí)時(shí)分析。 自我評(píng)價(jià) 我是一款功能強(qiáng)大、性能卓越的核心板,擁有豐富的接口和強(qiáng)大的擴(kuò)展能力,能夠滿足各種應(yīng)用場(chǎng)景的需求。我熱愛(ài)挑戰(zhàn),樂(lè)于學(xué)習(xí)新技術(shù),期待與各位電子發(fā)燒友一起探索
    發(fā)表于 02-11 10:49

    電子發(fā)燒友社區(qū)2025年春節(jié)放假通知!

    尊敬的電子發(fā)燒友用戶及各位工程師: 新春佳節(jié)將至,電子發(fā)燒友全體員工提前祝大家新年快樂(lè),闔家幸福,事業(yè)蒸蒸日上!感謝大家在過(guò)去一年里的支持與陪伴,愿我們?cè)谛碌囊荒昀锢^續(xù)攜手共進(jìn),共同探索科技的無(wú)限
    發(fā)表于 01-22 13:42

    面向NXP i.MX8處理器的電源解決方案

    電子發(fā)燒友網(wǎng)站提供《面向NXP i.MX8處理器的電源解決方案.pdf》資料免費(fèi)下載
    發(fā)表于 12-24 15:53 ?0次下載
    面向NXP <b class='flag-5'>i.MX8</b>處理器的電源解決方案

    華秋電子 | 電子發(fā)燒友亮相OpenHarmony人才生態(tài)大會(huì)2024

    ,分享高校、企業(yè)在產(chǎn)學(xué)研融合方面的先進(jìn)經(jīng)驗(yàn),全面展現(xiàn)了OpenHarmony在人才生態(tài)領(lǐng)域?qū)W-考-用-賽-留各環(huán)節(jié)的最新成果與發(fā)展藍(lán)圖。華秋電子<電子發(fā)燒友>作為合作社
    發(fā)表于 12-02 09:45

    基于AR1335和i.MX8MP的視覺(jué)方案

    應(yīng)用中實(shí)現(xiàn)卓越的圖像處理效果。方案采用NXPi.MX8MP處理器和onsemiAR1335圖像傳感器,i.MX8MP集成四核Cortex-A53、NPU及雙ISP
    的頭像 發(fā)表于 11-13 01:01 ?551次閱讀
    基于AR1335和<b class='flag-5'>i.MX8MP</b>的視覺(jué)方案

    強(qiáng)大視覺(jué)方案:i.MX8MP與AR0144的完美結(jié)合

    大聯(lián)大友尚集團(tuán)推出基于NXPi.MX8MP處理器和onsemiAR0144圖像傳感器的全新視覺(jué)方案。該方案不僅具備強(qiáng)大的圖像處理能力,還能廣泛應(yīng)用于監(jiān)控、智能零售、機(jī)器人視覺(jué)等領(lǐng)域。一、應(yīng)用場(chǎng)景描述及市場(chǎng)優(yōu)勢(shì)該方案采用NXP的i.MX8MP作為主控平臺(tái),搭配onsemi的
    的頭像 發(fā)表于 10-29 08:04 ?563次閱讀
    強(qiáng)大視覺(jué)方案:<b class='flag-5'>i.MX8MP</b>與AR0144的完美結(jié)合

    i.MX Linux開(kāi)發(fā)實(shí)戰(zhàn)指南—基于野火i.MX系列開(kāi)發(fā)板

    電子發(fā)燒友網(wǎng)站提供《i.MX Linux開(kāi)發(fā)實(shí)戰(zhàn)指南—基于野火i.MX系列開(kāi)發(fā)板.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 17:23 ?12次下載

    恩智浦i.MX8處理器的集成電源設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《恩智浦i.MX8處理器的集成電源設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 09-18 14:25 ?0次下載
    恩智浦<b class='flag-5'>i.MX8</b>處理器的集成電源設(shè)計(jì)

    使用TPS65219為i.MX 8M Plus供電

    電子發(fā)燒友網(wǎng)站提供《使用TPS65219為i.MX 8M Plus供電.pdf》資料免費(fèi)下載
    發(fā)表于 08-31 10:15 ?2次下載
    使用TPS65219為<b class='flag-5'>i.MX</b> <b class='flag-5'>8</b>M Plus供電

    華秋DFM注冊(cè)賬號(hào),電子發(fā)燒友論壇改不了id名稱(chēng)

    我注冊(cè)了一個(gè)華秋DFM賬號(hào),后用此賬號(hào)登錄電子發(fā)燒友發(fā)現(xiàn)我的名字是系統(tǒng)給的,改也改不了,注銷(xiāo)也注銷(xiāo)不了,請(qǐng)華秋和電子發(fā)燒友官方盡快跟進(jìn)處理
    發(fā)表于 07-07 10:45