




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
IPC通信
IPCisagenerictermofInter-ProcessorCommunicationreferredwidelyintheindustry,but
alsoapackageinTlProcessorSDKformulti-corecommunication.Ingenericusage,there
aredifferentwaysformulti-corecommunicationsuchasOpenCL,DCE,TI-IPC,andetc.
InTPsIPCpackage,itusesasetofmodulestofacilitatetheinter-processorcommunication.
Thedocumentsbelowprovideoverviewtodifferentwaysofinter-processorcommunication
andmoredetailsbyfollowinglinksineachofthesubject.TheTlIPCUser'sGuideisalso
providedforreference.
IPC是業(yè)界廣泛引用的處理器間通信的通用術(shù)語,也是TI處理器SDK中用于多核通信的一
個(gè)軟件包。在一般情況下,多核通信的方式有OpenCL、DCE、TI-IPC等。在TI的IPC包
中,它使用了一組模塊來方便處理器間的通信。下面的文檔提供了對(duì)處理器間通信的不同方
式的概述,并通過在每個(gè)主題中的鏈接來提供更多的細(xì)節(jié)。還提供了TlIPC用戶指南,以
供參考。
4.4.IPC
Inter-ProcessorCommunication(IPC)providesaprocessor-agnosticAPI
whichcanbeusedforcommunicationbetweenprocessorsinamulti-
processorenvironment(inter-core),communicationtootherthreadsonsame
processor(inter-process),andcommunicationtoperipherals(inter-device).
TheAPIsupportsmessagepassing,streams,andlinkedlists.IPCcanbe
usedtocommunicatewiththefollowing:
?Otherthreadsonthesameprocessor
?ThreadsonotherprocessorsrunningSYS/BIOS
?ThreadsonotherprocessorsrunninganHLOS(e.g.,Linux,QNX,Android
處理器間通信(IPC)提供了一個(gè)與處理器無關(guān)的API,可用于多處理器環(huán)境中處
理器之間的通信(內(nèi)核間)、與同一處理器上的其他線程的通信(進(jìn)程間)和與外圍
設(shè)備(設(shè)備間)的通信。API支持消息傳遞、流和鏈接列表。IPC可用于與以下方
面進(jìn)行通信:
同一處理器上的其他線程
運(yùn)行SYS/BIOS的其他處理器上的線程
運(yùn)行HLOS的其他處理器上的線程(例如Linux、QNX、Android)
Device1Device2
處理器間/處理器內(nèi)部通信(IPC)是一種產(chǎn)品,用于在多處理器環(huán)境中實(shí)現(xiàn)處理器之間的通
信。IPC的特點(diǎn)包括消息傳遞、多處理器門、共享內(nèi)存原語等.
IPC被設(shè)計(jì)用于與運(yùn)行SYS/BIOS應(yīng)用程序的處理器一起使用。這通常是ARM
或DSP。IPC包括支持高級(jí)操作系統(tǒng)(HLOS),如Unux,以及
SYS/BIOSRTOSo在HLOS環(huán)境中支持的IPC特征的寬度被減少,以便簡化
產(chǎn)品。
IPC通常分布并安裝在更大的SDK中。在這些情況下,不需要安裝。
在SDK之外,IPC可以在這里下載,并作為zip文件發(fā)布。要安裝,只需提取
文件即可..
這將在目錄中提取IPC產(chǎn)品及其產(chǎn)品名稱和版本信息(例如。c:/ti/ipc_)O
IPC產(chǎn)品提供多個(gè)處理器之間的軟件連接。每個(gè)處理器可以運(yùn)行HLOS(例如Linux、QNX)
或RTOS(例如,SYS/BIOS)oIPCisanopensourceproject,currentlymanagedwithgit,
andmaintainedathttp:〃/ipc/ipcdev.Fullsourcebrowsing,includingall
chanaes,areavailablehere.
處理器SDKInstaller(ti-processor-sdk-linux-[platformName]-evm-xx.xx-
Linux-x86-Install.bin)將安裝必要的組件,以便在TI微處理器上啟動(dòng)您的開
發(fā)。SDK由MatrixAppLauncher起始點(diǎn)應(yīng)用程序的源代碼、一個(gè)開發(fā)文件系
統(tǒng)、一個(gè)目標(biāo)文件系統(tǒng)、示例應(yīng)用程序、工具鏈和板支持包、易用性腳本和文
檔組成。處理器SDK現(xiàn)在包括ARMGCC工具鏈。處理器SDK是根據(jù)特定的
Linux發(fā)行版名稱和版本Ubuntul6.04和18.04構(gòu)建和測(cè)試的。注意,這并不
妨礙用戶在其他Linux發(fā)行版上安裝SDKo
最后一步是下載并安裝處理器-SDKRTOS。要獲取本軟件的最新版本,請(qǐng)參見
設(shè)備的“軟件產(chǎn)品"頁:
示例的二進(jìn)制圖像位于主機(jī)和各個(gè)內(nèi)核的相應(yīng)目錄中??梢酝ㄟ^使用通過
JTAG的CCS加載和運(yùn)行二進(jìn)制文件來運(yùn)行示例。
3.7.3.IPCforAM57xx
Introduction
ThisarticleisgearedtowardAM57xxusersthatarerunningLinuxonthe
CortexA15.Thegoalistohelpusersunderstandhowtogainentitlementto
theDSP(c66x)andIPU(CortexM4)subsystemsoftheAM57xx.
AM572xdevicehastwoIPUsubsystems(IPUSS),eachofwhichhas2cores.
IPU2isusedasacontrollerinmulti-mediaapplications,soifyouhave
ProcessorSDKLinuxrunning,chancesarethatIPLI2alreadyhasfirmware
loaded.However,IPU1isopenforgeneralpurposeprogrammingtooffload
theARMtasks.
Therearemanyfacetstothistask:building,loading,debugging,MMUs,
memorysharing,etc.Thisarticleintendstotakeincrementalstepstoward
understandingallofthosepieces.
本文面向在CortexA15上運(yùn)行Linux的AM57xx用戶。其目標(biāo)是幫助用戶了
解如何獲得AM57xx的DSP(C66x)和IPU(CortexM9子系統(tǒng)的權(quán)限。
AM572X設(shè)備有兩個(gè)IPU(IPUSS),每個(gè)子系統(tǒng)有兩個(gè)核心。IPU2被用作多媒體應(yīng)用程序
中的控制器,所以如果您在運(yùn)行處理器SDKLinux,那么IPU2很可能已經(jīng)加載了固件。但
是,IPU1是開放的,用于通用編程來卸載ARM任務(wù)。
這個(gè)任務(wù)有很多方面:構(gòu)建、加載、調(diào)試、MMU、內(nèi)存共享等等。本文打算
采取漸進(jìn)的步驟來理解所有這些部分。
AM57xxSOC"S"有多個(gè)處理器內(nèi)核-CortexA15、C66xDSP和ARMM4內(nèi)核。A15通常
運(yùn)行諸如Linux/QNX/Android之類的HLOS,而RemoteCore(DSP)S和M4)運(yùn)行RTOS。
在正常操作中,引導(dǎo)加載器(U-boot/SPL)引導(dǎo)并加載帶有HLOS的A15。A15啟動(dòng)DSP
和M4內(nèi)核。
NormalBoot
Timetoremotecore
execution
POPUserspaceinit
在這個(gè)序列中,電源復(fù)位與遠(yuǎn)程設(shè)備(即DSP和M4)之間的間隔取決于HLOS
初始化時(shí)間。
下圖說明ARMLinux內(nèi)核的遠(yuǎn)程proc/rpMsg驅(qū)動(dòng)程序如何與運(yùn)行RTOS的
從處理器(如DSP、IPU等)上的IPC驅(qū)動(dòng)程序通信。
remoteproc
z
LinuxRTOS
rpmsg
Remoteproc/
rpmsg
MasterRemote
CoreCore
為了在從內(nèi)核上設(shè)置IPC,我們?cè)贗PC包中提供了一些可從ARMLinux運(yùn)行的
預(yù)先構(gòu)建的示例。接下來的章節(jié)描述了如何構(gòu)建和運(yùn)行此示例,并將其用作此
工作的起點(diǎn)。
您需要將主機(jī)PC的ex02_messageq目錄復(fù)制到目標(biāo)上的目錄(通過SD卡、
NFS導(dǎo)出、scp等)。您可以復(fù)制整個(gè)目錄,盡管我們主要對(duì)以下文件感興趣:
?dsp1/bin/debug/server_dsp1.xe66
?dsp2/bin/debug/server_dsp2.xe66
?host/bin/debug/app_host
?ipu1/bin/debug/server_ipu1.xem4
?ipu2/bin/debug/server_ipu2.xem4
Remoteproc驅(qū)動(dòng)程序是硬編碼的,以便在加載DSP/M4時(shí)查找特定的文件。
下面是它查找的文件:
?/Iib/firmware/dra7-dsp1-fw.xe66
?/Iib/firmware/dra7-dsp2-fw.xe66
?/Iib/firmware/dra7-ipu1-fw.xem4
?/Iib/firmware/dra7-ipu2-fw.xem4
*
?這些通常是與預(yù)期可執(zhí)行的可執(zhí)行的軟鏈接。例如,讓我們更新目標(biāo)上
可執(zhí)行的DSP1:
類似的程序可用于DSP2/IPPU1/IPU2,也可以更新固件的軟鏈接,在運(yùn)行時(shí)重新加載固件,
并從A15運(yùn)行主機(jī)二進(jìn)制文件。
OverallLinuxMemoryMap
root@am57xx-evm:cat/proc/iomem
CMACarveouts
root@am57xx-evm:dmesg|grep-icma
有關(guān)如何調(diào)整DSP/IPUCMA卡的尺寸和位置的詳細(xì)信息,請(qǐng)參閱相應(yīng)的章
節(jié),更改DSP或IPU內(nèi)存映射。要調(diào)整"默認(rèn)CMA"部分的大小,這將作為
Linux配置的一部分完成:
Iinux/arch/arm/configs/tisdk_am57xx-evm_defconfig
CMEM
Toviewtheallocationatrun-time:
root@am57xx-evm:cat/proc/cmem
這表明我們?cè)贠xAOOOOOOO的物理基地址上定義了一個(gè)CMEM塊,其總大小
為Oxc000000(192MB)。此塊包含由1個(gè)緩沖區(qū)組成的緩沖池。池中的每個(gè)
緩沖區(qū)(本例中只有一個(gè))被定義為大小為0xc000000(192MB)o
更改DSP內(nèi)存映射
首先,重要的是要理解,存在一對(duì)位于DSP子系統(tǒng)和L3互連之間的存儲(chǔ)器管
理單元(MMUS)。其中一個(gè)MMUUS用于DSP核心,另一個(gè)是針對(duì)其本地
EDMAo它們都用于將虛擬地址(即,由DSP子系統(tǒng)觀看的地址)轉(zhuǎn)換為物理地
址(即,從L3互連觀看的地址)的相同目的。
DSP物理地址DSP代碼/數(shù)據(jù)實(shí)際駐留的物理位置由CMAcarveouts進(jìn)行定義。要更改此
位置,您必須更改香芹的定義。在LinuxDTS文件中定義了DSPcarveouts<,例如對(duì)于
AM57xxEVM:
您可以同時(shí)更改大小和位置。小心不要重疊任何其他carveouts!
此外,當(dāng)您更改分出位置時(shí),必須對(duì)資源表進(jìn)行相應(yīng)的更改。首先,如果您正
在進(jìn)行內(nèi)存更改,則需要一個(gè)自定義資源表。資源表是一個(gè)大型結(jié)構(gòu),是物理
內(nèi)存和虛擬內(nèi)存之間的“橋梁"。此結(jié)構(gòu)用于配置位于DSP子系統(tǒng)前面的
MMU。IPCResourceCustomTable一文中提供了詳細(xì)的信息。
創(chuàng)建自定義資源表后,必須將phys_mem_IPC_VRING的地址更新為與相應(yīng)的CMA相同
的基址。
DSP虛擬地址
這些地址是DSP子系統(tǒng)看到的地址,也就是鏈接器命令文件中的地址,等等。
您必須確保節(jié)的大小與資源表中的相應(yīng)定義一致。您應(yīng)該創(chuàng)建自己的資源表,
以修改內(nèi)存映射。這是在頁IPC資源自定義表中描述的。您可以查看IPC中的
現(xiàn)有資源表:
換句話說,由于我們使用了身份映射,所以可以在它們的物理地址處訪問外圍設(shè)備。
運(yùn)行時(shí)檢查DSPIOMMU頁面表
可以使用以下命令轉(zhuǎn)儲(chǔ)DSPIOMMU頁表:
一般來說,MMU0和MMU1的編程方式是相同的,所以您只需要查看其中一
個(gè)或另一個(gè)就可以理解給定DSP的映射。
The“da”(“deviceaddress")columnreflectsthevirtualaddress.Itisderivedfromtheindex
intothetable,i.e.theredoesnotexistaudanregisterorfieldinthepagetable.EachMBof
theaddressspacemapstoanentryinthetable.The“da”columnisdisplayedtomakeit
easytofindthevirtualaddressofinterest.
“da”(“設(shè)備地址”)列反映虛擬地址。它是從索引中派生的,即在頁表中不存在
“da”寄存器或字段。地址空間中的每個(gè)MB映射到表中的條目。顯示“da”,使其
易于找到感興趣的虛擬地址。
“pte”(“頁表項(xiàng)”)列可以根據(jù)上述表20-4進(jìn)行解碼。例如:
1:0x4a0000000x4a040002
0x4a040002向我們表明,它是一個(gè)基地址0x4A000000的超值。這給了我們一個(gè)16MB
的內(nèi)存頁面。注意后面重復(fù)的條目。這是MMU的要求。
為了充分理解CortexM4IPU子系統(tǒng)的內(nèi)存映射,認(rèn)識(shí)到存在兩種不同/獨(dú)立的
內(nèi)存轉(zhuǎn)換級(jí)別很有幫助。以下是TRM中的片段以說明:
CortexM4IPUPhysicalAddresses
ThephysicallocationwheretheM4code/datawillactuallyresideisdefinedby
theCMAcarveout.Tochangethislocation,youmustchangethedefinitionof
thecarveout.TheM4carveoutsaredefinedintheLinuxdtsfile.For
examplefortheAM57xxEVM:
CortexM4IPU物理地址
M4代碼/數(shù)據(jù)實(shí)際所在的物理位置由CMAcarveout進(jìn)行定義。要更改此位置,您必須更
改香芹的定義。M4carveout在LinuxDTS文件中定義。例如對(duì)于AM57XXEVM:
此外,當(dāng)您更改carveout的位置時(shí),必須對(duì)資源表進(jìn)行相應(yīng)的更改.首先,如果您正在
進(jìn)行內(nèi)存更改,您需要自定義資源表。資源表是一個(gè)大型結(jié)構(gòu),是物理內(nèi)存和虛擬內(nèi)存之
間的“橋”。此結(jié)構(gòu)用于配置IPUxMMU(不是UniCacheMMU)。在文章IPC資源定制表中
提供了詳細(xì)信息。創(chuàng)建自定義資源表時(shí),必須將physmemIPCvring的地址更新為與相應(yīng)
CMA相同的基地址。
CortexM4IPU虛擬地址
UniCacheMMU,
UniCacheMMU最接近CortexM4。它提供了一級(jí)地址翻譯。UniCacheMMU
實(shí)際上是由CortexM4"自行編程"的。UniCacheMMU也被稱為屬性
MMU(AMMU)o有固定數(shù)量的小、中和大頁面。以下是顯示一些關(guān)鍵映射的片
段:
這3頁是“身份”映射,對(duì)關(guān)聯(lián)的地址范圍執(zhí)行請(qǐng)求通過。這些中間地址在下一
級(jí)翻譯(IOMMU)中被映射到它們的物理地址。用于代碼和數(shù)據(jù)的AMMU范圍
需要是標(biāo)識(shí)映射,因?yàn)榉駝tRemoteProc加載器將無法與相關(guān)聯(lián)的IOMMU映
射從ELF文件中匹配這些部分。這些映射應(yīng)足以滿足任何應(yīng)用,即無需調(diào)整這
些映射。修改的更可能區(qū)域是下一節(jié)中的資源表。AMMU映射主要用于理解關(guān)
于CortexM4存儲(chǔ)器映射的完整圖像。
IOMMU
IOMMU位于離L3互連最近的地方。它獲取來自AmMu的中間地址輸出,并將其轉(zhuǎn)換為
L3互連所使用的物理地址。IOMMU是由ARM基于相關(guān)資源表編寫的。如果您正在計(jì)劃
任何內(nèi)存更改,那么您將需要?jiǎng)?chuàng)建一個(gè)自定義資源表,如頁面IPC資源自定義表中所描述
的那樣。
來自資源表的3個(gè)條目都來自相關(guān)聯(lián)的IPUCMA池(即,如由類型_CARSOUT
所指示的)。第二參數(shù)表示虛擬地址(即對(duì)10MMU的輸入地址)。這些地址必須
與AMMU映射以及鏈接器命令文件一致。來自IPC的EX02_MessageQ示例
在文件示例/Dra7xx_Linux_ELF/EX02_MessageQ/共享/c。nfig.bld.中定義了這
些內(nèi)存部分您可以楨用以示命令卸載IPUIOMMU頁面表:
示例:從IPU訪問UART5在本例中,假定引導(dǎo)加載程序中已經(jīng)設(shè)置了PIN-
MUXEDo如果不是這樣,你就得在這做。UART5模塊需要通過
CM_L4PER_UART5_CLKCTRL寄存器使能。這位于物理地址0x4A009870o
因止匕從M4,我們將在虛擬地址0X6A009870上對(duì)該寄存器進(jìn)行編程。將值2
寫入此寄存器將啟用外圍設(shè)備。在完成上一個(gè)步驟后,UART5寄存器將變?yōu)榭?/p>
訪問的。通常UART5可在物理基礎(chǔ)地址0x48066000處訪問。這將相應(yīng)地從
IPU在0x68066000處訪問。
默認(rèn)情況下,IPU和DSP自動(dòng)空閑。這可以防止您能夠使用JTAG連接到設(shè)
備,也無法通過devme2訪問本地內(nèi)存。在sysfs中有一些選項(xiàng)是必要的,以
強(qiáng)制這些子系統(tǒng)運(yùn)行,有時(shí)這是開發(fā)和調(diào)試目的所需要的。這些操作需要一些
源自設(shè)備樹(dra7.dtsi)的硬編碼設(shè)備名稱:
RemoteCoreDefinitionindra7.dtsiSystemFSName
IPU1ipu@5882000058820000.ipu
IPU2ipu@5502000055020000.ipu
DSP1dsp@4080000040800000.dsp
DSP2dsp@4100000041000000.dsp
ICSS1-PRU0pru@4b2340004b234000.pru0
ICSS1-PRU1pru@4b2380004b238000.pru1
ICSS2-PRU0pru@4b2b40004b2b4000.pru0
ICSS2-PRU1pru@4b2b80004b2b8000.pru1
要將這些系統(tǒng)FS名稱映射到關(guān)聯(lián)的RemoteProc條目,您可以運(yùn)行以下命令:
root@am57xx-evm:Is-1/sys/kernel/debug/remoteproc/
root@am57xx-evm:cat/sys/kernel/debug/remoteproc/remoteproc*/name
命令的結(jié)果將是一對(duì)一的映射。例如,58820000.ipu對(duì)應(yīng)于remoteprocO。
類似地,要查看每個(gè)核心的電源狀態(tài):
root@am57xx-evm:~#cat/sys/class/remoteproc/remoteproc*/state
狀態(tài)可以掛起、運(yùn)行、脫機(jī)等。只有當(dāng)狀態(tài)“運(yùn)行”時(shí),才能附加JTAG。如果它顯示為“暫
停”,則必須強(qiáng)制它運(yùn)行。例如,假設(shè)DSP0被“掛起”??梢赃\(yùn)行以下命令強(qiáng)制執(zhí)行:
root@am57xx-evm:echoon>/sys/bus/platform/devices/40800000.dsp/power/control
任何核心都是如此,但是用上面圖表中關(guān)聯(lián)的系統(tǒng)FS名稱替換
40800000.dsp?
AddingIPCtoanExistingTI-RTOSApplicationonslavecores
AddingIPCtoanexistingTlRTOSapplicationontheDSP
AcommonthingpeoplewanttodoistakeanexistingDSPapplicationand
addIPCtoit.ThisiscommonwhenmigratingfromaDSPonlysolutiontoa
heterogeneousSoCwithanArmplusaDSP.Thisisthefocusofthissection.
Inordertodescribethisprocess,weneedanexampletestcasetoworkwith.
Forthispurpose,we'llbeusingthe
GPIO_LedBlink_evmAM572x_c66xExampleProjectexamplethat'spartofthe
PDK(installedaspartoftheProcessorSDKRTOS).Youcanfinditat
c:\ti\pdk_am57xx_1_0_4\packages\MyExampleProjects\GPIO_LedBlink_evm
AM572x_c66xExampleProject.ThisexampleusesSYS/BIOSandblinksthe
USEROLEDontheAM572xGPEVM,it'slabeledD4ontheEVMsilkscreen
justtotherightoftheblueresetbutton.
將IPC添加到從內(nèi)核上的現(xiàn)有TI-RTOS
應(yīng)用程序?qū)PC添加到DSP上現(xiàn)有的TIRTOS應(yīng)用程序上
人們想要做的一個(gè)常見的事情是采用現(xiàn)有的DSP應(yīng)用程序,并將IPC添加到
它。當(dāng)從DSP遷移到帶有ARM+DSP的異構(gòu)SoC時(shí),這很常見。這是本部分
的重點(diǎn)。為了描述這個(gè)過程,我們需要一個(gè)示例測(cè)試用例來處理。為此,我們
將使用GPIO_LEDBLINK_EVMAM572X_C66XExample項(xiàng)目示例,該示例是
PDK的一部石(作為處理彝SDKRTOS的一部分安裝)。您可以在
C:TiPDK_AM57xx_1_0_4PackageMyExample_GPIO_LEDBLINK_EVMAM57
2X_C66XExample項(xiàng)目'市找到它。此示例使用《YS/BIOS并將用聲0閃爍在
AM572XGPEVM上,它在EVM絲印屏幕上標(biāo)記為D4,恰好位于藍(lán)色重置按
鈕的右側(cè)。
有幾個(gè)步驟進(jìn)行整個(gè)過程工作,每個(gè)步驟將在下面的章節(jié)中進(jìn)行描述,并使用
代碼編寫器Studio(CCS)在EVM上運(yùn)行“開箱即用"LED閃爍示例,從IPC軟件
包獲取EX02_消息示例,并將其轉(zhuǎn)換為CCS項(xiàng)目。建立它并修改Linux啟動(dòng)
代碼以使用此新映像。這只是一個(gè)明智的檢查步驟,以確保我們可以在CCS
中構(gòu)建IPC示例,并讓它們?cè)贓VM啟動(dòng)時(shí)運(yùn)行。在CCS中,進(jìn)行開箱即用的
LED示例的克隆,并將其重命名為“S”示例的IPC版本。然后,使用
EX02_MessageQ示例作為參考,在IPC塊中添力口至ULED示例。從CCS構(gòu)建
然后將其添加到Linux固件文件夾中。
將IPC添加到LED閃爍示例第一步是克隆出開箱即用的LED閃爍CCS項(xiàng)目,并將其重
命名為使用IPC表示它。執(zhí)行此操作的最簡單方法是使用CCS。下面是步驟……在"編
輯”(Edit)透視圖中,進(jìn)入“項(xiàng)目瀏覽器”(ProjectExplorer)窗口,右鍵單擊
GPIO_LEDBLINK_EVMAN572XC66XExampleProject項(xiàng)目,然后從彈出式菜單中選擇"復(fù)
制”(Copy)。Maske確定項(xiàng)目不是關(guān)閉狀態(tài)。Rick單擊項(xiàng)目瀏覽器窗口的“In”和“空”區(qū)域,
然后選擇“過去”。彈出對(duì)話框,修改名稱以表示它使用IPC。一個(gè)好的名稱是
GPIO_LEDBLINK_EVMAM572XC66XExamplejec_w讓h」PC。
Thisistheprojectwe'llbeworkingwithfromhereon.Thenextthingwewanttodois
selecttheproperRTSCplatformandothercomponents.Todothis,followthesesteps.
右鍵單擊GPIO_LedBlink_evmAM572xc66xExampleProjec_With_IPC項(xiàng)目并
在左側(cè)窗格中選擇Properties,單擊CCSGeneral。在右側(cè),單擊RTSC選項(xiàng)
卡上的XDCtools版本:在產(chǎn)品和存儲(chǔ)庫列表中選擇6core,檢查以
下.IPC4SYS/BIOS9am57xxPDK1.0.4forTarget,選擇
ti.Targetts.e斤.C66作為平臺(tái),選擇ti.platforms.evmDRA7XX,在平臺(tái)被選中
后,編輯其名稱BueHand并追加:dsp1到末尾。在此之后,應(yīng)該是
ti.platforms.evmDRA7XX:dsp1,然后將構(gòu)建配置文件設(shè)置為DEBUG。按下
OK按鈕。
現(xiàn)在,我們希望將EX02_MessageQIPC示例的配置和源文件復(fù)制到我們的項(xiàng)
目中。IPC示例位于
C:TilPC_3_43_02_04ExampleDra7xx_Linux_ELFEX02_MessageQo要將文
件復(fù)制到&DS項(xiàng)目中,您可以簡單地還擇Windows資誨管理器中所需的文
件,然后將它們拖放到CCS中的項(xiàng)目中。將這些文件復(fù)制到CCS項(xiàng)目中……
人們想要做的一件常見的事情就是使用一個(gè)現(xiàn)有的IPU應(yīng)用程序,它可以控制
串行或控制接口,并將IPC添加到其中,這樣固件就可以從ARM加載。當(dāng)從
唯一的IPU解決方案遷移到具有MPUSS(ARM)和IPUSS的異構(gòu)SoC時(shí),這
種情況很常見。這是本節(jié)的重點(diǎn)。為了描述這個(gè)過程,我們需要一個(gè)TIRTOS
測(cè)試用例來處理。為此,我們將使用屬于PDK(安裝為處理器SDKRTOS的一
部分)的UART_BasicExgrom_evmAM572x_m4ExampleProject示例。此示例
使用TIRTOS年在AM572xGPEVM上使吊UART3端口執(zhí)行串行IO操作,
它在EVM屏幕上被標(biāo)記為SerialDebugo
為使整個(gè)過程工作采取了若干步驟,每個(gè)步驟將在下面的章節(jié)中進(jìn)行描述使用代碼
ComposerStudio(CCS)構(gòu)建并運(yùn)行EVM上的開箱即用UARTM4示例從IPC軟件包構(gòu)建
并運(yùn)行EX02_MessageQ示例,并將其轉(zhuǎn)換為CCS項(xiàng)目。建立它并修改Linux啟動(dòng)代碼
以使用此新映像。這只是一個(gè)明智的檢查步驟,以確保我們可以在CCS中構(gòu)建IPC示
例,并讓它們?cè)贓VM啟動(dòng)時(shí)運(yùn)行。在CCS中,進(jìn)行開箱即用UARTM4示例的克隆,并
將其重命名為該示例的IPC版本。然后使用EX02_MessageQ示例作為參考,在IPC塊
中添加到UART示例代碼。從CCS構(gòu)建然后將其添加到Linux固件文件夾中。
Linux內(nèi)核啟用所有配置所需的SOCHW模塊。適當(dāng)?shù)尿?qū)動(dòng)程序配置所需的時(shí)鐘并初始化
HW寄存器。對(duì)于所有未使用的IP,沒有配置時(shí)鐘。使用設(shè)備樹在內(nèi)核中禁用uart3節(jié)
點(diǎn)。此外,這限制了內(nèi)核將這些IP放到睡眠模式。
在每個(gè)IPU1和IPU2子系統(tǒng)中都有兩個(gè)MMUoL1MMU稱為IPU_UNICACHE_MMU
或AmMu和L2MMU。關(guān)于如何在IPC-Remoteproc中配置這一點(diǎn)的說明已在
Changing_Cortex_M4_IPU_Memory_Map一節(jié)中進(jìn)行了描述。IPC處理L1和L2MMU
不同于PDK驅(qū)動(dòng)程序示例如何使用這些MMU設(shè)置內(nèi)存訪問,用戶在集成組件時(shí)需要管理
這些MMU。這種差異突出如下:
IPU
AMMU
AMMUsettingisconfiguredusing
(LIMMU)TlRTOSconfigurationfile(.cfg)
9
L2MMUL2MMUisconfiguredusbgresource
tableprovidedinIPC-remoteproc
(IPUMMU)
13andL4Peripherals
andsystemNitercomect
PDK示例將地址(0x4X000000)用于外圍寄存器,并使用以下MMU設(shè)置L2MMU使用默
認(rèn)1:1映射AmmuConfiguration將物理0x4X000000訪問轉(zhuǎn)換為邏輯0x4X000000
IPC遠(yuǎn)程procARMM4要求IPU使用邏輯地址(0x6X000000),并使用以下MMU設(shè)置L2
MMU,使MMU將0x6X000000訪問地址轉(zhuǎn)換為地址0x4X000000(配置為1:1映射和
0x6X000000)
因此,在將IPC與PDK驅(qū)動(dòng)程序集成之后,建議使用別名地址來訪問外圍設(shè)
備和PRCM寄存器。這需要更改PDK驅(qū)動(dòng)程序和應(yīng)用程序代碼中使用的地
址。然后對(duì)IPU應(yīng)用程序源代碼進(jìn)行以下更改:
將UART_SOC.G文件添力口至I」項(xiàng)目中,并修改UART_HATTRS中所有
IPUUAR〒寄存器實(shí)例的基本地址,以使用別名地址:
添加自定義SOC配置還意味著您應(yīng)該使用通用的UART驅(qū)動(dòng)程序,而不是內(nèi)
置在SOC設(shè)置中的驅(qū)動(dòng)程序。要執(zhí)行此注釋,請(qǐng)?jiān)?cfg中使用以下行:
在應(yīng)用代碼中也有一個(gè)實(shí)例,在該實(shí)例中,我們將指針添加到需要改變?nèi)缦碌腜RCM寄存
器。
現(xiàn)在,您已經(jīng)準(zhǔn)備好構(gòu)建固件。構(gòu)建.out之后,將擴(kuò)展名更改為.xem4,并將其復(fù)制到用
于加載M4固件的文件系統(tǒng)中的位置。
ARM-DSP通信的多種方式
本文檔描述了TI多核設(shè)備上的通信方式。應(yīng)用程序中的單個(gè)核心可以承擔(dān)主機(jī)
/設(shè)備或主/從的角色。這里的討論假設(shè)主機(jī)/主集群是運(yùn)行SMP/Linux的ARM
集群,而設(shè)備/從服務(wù)器是運(yùn)行TI-RTOS的C6xxDSP集群。
OpenCL
OpenCL是一個(gè)框架,用于編寫跨異構(gòu)系統(tǒng)執(zhí)行的程序,以及用于表示跨異構(gòu)設(shè)備分派并
行計(jì)算的程序。這是一個(gè)開放的,沒有版稅的標(biāo)準(zhǔn),由Khronos財(cái)團(tuán)管理。在異構(gòu)SoC
上,OpenCL將其中一個(gè)可編程核心視為主機(jī),將其他核心視為設(shè)備。運(yùn)行在主機(jī)(即主機(jī)
程序)上的應(yīng)用程序管理設(shè)備上代碼(內(nèi)核)的執(zhí)行,并且還負(fù)責(zé)使數(shù)據(jù)可供設(shè)備使用。設(shè)備
由一個(gè)或多個(gè)計(jì)算單元組成。在ARM和DSPSoC上,每個(gè)C66XDSP都是一個(gè)計(jì)算單
元。OpenCL運(yùn)行時(shí)由兩個(gè)組件組成:(1)用于主機(jī)程序創(chuàng)建和提交內(nèi)核以供執(zhí)行的API:
(2)用于表示內(nèi)核的跨平臺(tái)語言一OpenCLC--它基于C99C,并附加和限制了OpenCL支持
數(shù)據(jù)并行和任務(wù)并行編程范例。數(shù)據(jù)并行執(zhí)行使設(shè)備上的計(jì)算單元并行執(zhí)行。任務(wù)并行執(zhí)
行允許向每個(gè)計(jì)算單元異步分派任務(wù)。有關(guān)更多信息,請(qǐng)參閱OpenCL用戶指南。
從運(yùn)行Linux或RTOS的ARM至ijDSP的卸載計(jì)算
優(yōu)點(diǎn)
方便設(shè)備之間的移植,不需要理解內(nèi)存體系結(jié)構(gòu),不需要擔(dān)心MPAX和MMU,不需要擔(dān)
心一致性,不需要在ARM和DSP之間建立/配置/使用IPC,無需成為DSP代碼、體系結(jié)
構(gòu)或優(yōu)化方面的專家
缺點(diǎn):不能控制系統(tǒng)內(nèi)存布局等,以處理優(yōu)化的DSP代碼
DCE(DistributedCodecEngine)分布式編解碼引擎
DCE框架為用戶在設(shè)備(如AM57XX)上編寫應(yīng)用程序提供了一種簡單的方法,該設(shè)備具有
用于圖像和視頻的硬件加速器。它為從核上的音頻和視頻編碼和解碼提供了對(duì)硬件加速的
遠(yuǎn)程訪問?;贏RM用戶空間GStreer的多媒體應(yīng)用程序使用GStreer庫加載并與TI
GStreer插件接口,該插件處理硬件加速器所特有的所有細(xì)節(jié)。插件接口libdce模塊,它
提供ARM用戶空間API。Libdce在ARM上使用RPMSG框架,與從核上的對(duì)應(yīng)方通
信。在從核上,采用編解碼引擎和幀組件在IVA上進(jìn)行視頻/圖像編解碼處理。
MPUSubsystem
Cortex-A15
V一
OMAPDRMA
H
D
C
o
d
e
c
s
OMAPDSS
LinuxOperatingSystemKernelSYS/BIOSRTOS
使用DCEA57xx作為示例的多媒體軟件堆棧的概述具有以下加速器
圖像和視頻加速器(IVA)
視頻處理引擎(VPE)
用于卸載特定圖像/視頻和/或語音/音頻處理的C66XDSP內(nèi)核
用戶可以利用開源元素來提供諸如AVI流解碼和音頻編解碼等功能。這些元素以及TI處理
器LinuxSDK中基于ARM的GStreer插件提供了加速器卸載的摘要。
在AM57xx中,硬件加速器具有以下功能:
用于多媒體加密和解碼的IVA視頻解碼:H264、MPEG-4、MPEG2和VC1
視頻編碼:H264和MPEG-4
圖像解碼:MJPEGVGE用于視頻操作,例如縮放、顏色空間轉(zhuǎn)換和去隔行以
下格式:支持的輸入格式:NV12、YUYV、UYVY
支持的輸出格式:NV12、YUYV、UYVY、RGB24、ArgB24,和ABGR24用
于卸載信號(hào)處理的DSP集成在DSPGStreamer插件中的示例圖像處理內(nèi)核:
MEDIAN2X2,MEDIAN3X3,SOEL3X3.CONV5X5、CY
音頻/視頻或?qū)S镁幗獯a器對(duì)從內(nèi)核的卸載處理
優(yōu)點(diǎn):
加速多媒體編解碼處理,
簡化了與GStreer和TIGStreer插件接口時(shí)多媒體應(yīng)用程序的開發(fā)。
缺點(diǎn)
不適用于非編解碼器算法
需要工作來添加新的編解碼器算法
需要對(duì)DSP編程的知識(shí)
BigDataIPC
大數(shù)據(jù)是TlIPC實(shí)現(xiàn)的一個(gè)特殊用例,用于高性能計(jì)算應(yīng)用程序和其他數(shù)據(jù)密集型應(yīng)用程
序,這些應(yīng)用程序通常需要在SoC中的多核處理器之間傳遞大數(shù)據(jù)緩沖區(qū)。大數(shù)據(jù)IPC
提供了一個(gè)高級(jí)抽象來處理大數(shù)據(jù)緩沖區(qū)上的地址轉(zhuǎn)換和緩存同步。
ARM與DSP之間的大小大于512字節(jié)的報(bào)文/數(shù)據(jù)交換
優(yōu)化
能夠處理大于512字節(jié)的數(shù)據(jù)
缺點(diǎn)
需要了解DSP內(nèi)存體系結(jié)構(gòu)
需要了解DSP的配置和編程
TI專利API。
IPC
處理器間通信(IPC)是為方便進(jìn)程間通信而設(shè)計(jì)的一組模塊.通信包括消息傳
遞、流和鏈接列表。這些模塊提供服務(wù)和功能,可用于多處理器環(huán)境下ARM
和DSP處理器之間的通信。
IPC模塊初始化IPC的各個(gè)子系統(tǒng),并同步多個(gè)處理器。
MessageQ模塊支持可變長度消息的結(jié)構(gòu)化發(fā)送和接收。
ListMP模塊是一個(gè)基于鏈表的模塊,旨在提供不同處理器之間的通信方式。它使用共享內(nèi)
存為多個(gè)處理器提供共享、傳遞或存儲(chǔ)數(shù)據(jù)緩沖區(qū)、消息或狀態(tài)信息的方法。
HeapMP模塊提供3種類型的內(nèi)存管理、固定大小的緩沖區(qū)、多個(gè)不同的固定大小緩沖區(qū)
和可變大小的緩沖區(qū).
GateMP模塊通過其實(shí)例執(zhí)行本地和遠(yuǎn)程上下文保護(hù)。通知模塊通過硬件中斷管理軟件中
斷的復(fù)用/解復(fù)用。
SharedRegion模塊設(shè)計(jì)用于多處理器環(huán)境中,其中存在跨不同處理器共享和訪問的內(nèi)存
區(qū)域。列表模塊支持創(chuàng)建雙鏈接的對(duì)象列表,MultiProc模塊在多處理器環(huán)境中將處理器
ID管理集中到一個(gè)模塊中。
NameServerModule管理本地名稱/值對(duì),這使得應(yīng)用程序和其他模塊能夠基于名稱來調(diào)整
和檢索值。
ARM與DSP之間的消息/數(shù)據(jù)交換
優(yōu)點(diǎn):
適合那些熟悉dsp編程
dsp代碼優(yōu)化的人。
缺點(diǎn):
需要有關(guān)dsp內(nèi)存結(jié)構(gòu)的知識(shí),
需要了解dsp的配置和編程消息大小
僅限于512字節(jié)
TI專有api。
ProsandCons
ProsCons
EasyportingNoDSPprogrammingCustomerdon'thavecontrolovermemorylayoutetc.
StandardOpenCLAPIstohandleoptimizeDSPcode
AcceleratedmultimediacodecNotmeantfornon-codecalgorithmsNeedworkto
DCEhandlingSimplifiesdevelopmentaddnewcodecalgorithmsCodeclikeAPIsRequire
wheninterfacingwithGStreamerknowledgeofDSPprogramming
FullcontrolofDSPconfiguration
CapableofDSPcodeoptimization
BigNeedtoknowmemoryarchitectureNeedtoknowDSP
Notlimitedtothe512bytebuffer
DataconfigurationandprogrammingTlproprietaryAPI
sizeSameAPIsupportedonmultiple
Tlplatforms
FullcontrolofDSPconfiguration
NeedtoknowmemoryarchitectureNeedtoknowDSP
CapableofDSPcodeoptimization
IPCconfigurationandprogrammingLimitedtosmall
SameAPIsupportedonmultipleTl
messages(lessthan512bytes)TlproprietaryAPI
platforms
優(yōu)點(diǎn)缺點(diǎn)
OpenCL易于移植客戶不控制內(nèi)存布局等。
無DSP處理優(yōu)化DSP代碼的步驟
編程標(biāo)準(zhǔn)OpenCLAPI
DCE加速多媒體編解碼器處理不適用于非編解碼算
簡化了與GStreamer接口時(shí)的開發(fā)。法,
需要工作來添加新的編
解碼算法,
像api這樣的編解碼算
法需要dsp編程知識(shí)。
BigData完全控制DSP配置,需要知道內(nèi)存體系結(jié)構(gòu)
能夠進(jìn)行DSP代碼優(yōu)化,需要知道DSP配置和編
不限于512字節(jié)緩沖區(qū)大小,程
在多個(gè)TI平臺(tái)上支持相同的API。TI專有API
IPC支持在多個(gè)Tl平臺(tái)上需要知道內(nèi)存體系結(jié)構(gòu)
支持的DSP代碼優(yōu)化需要知道DSP的配置和對(duì)
相同API的DSP配置的完全控制小消息(小于512字節(jié))
TI專有API的編程限制
決策
在作出使用ARM/DSP通信方法的決策時(shí),提供了以下簡單流程圖作為參考。
在決策過程中還需要考慮硬件能力,如在使用DCE時(shí)存在圖像和視頻加速
器。
OpenCL
TlOpenCLv01.01.xxUser'sGuide
介紹
OpenCL是一個(gè)用于編寫跨異構(gòu)系統(tǒng)執(zhí)行的程序的框架。本文檔描述KhronosOpenCL
1.1規(guī)范的TI實(shí)現(xiàn)。以下系統(tǒng)目前支持德州儀器OpenCL實(shí)現(xiàn):
SoCSystemKhronosConformanceInstallationInstructions
AM572AM572EVMOpenCLv1.1ConformantProcessorSDKforAM57x
OpenCL規(guī)范定義了具有主機(jī)和計(jì)算設(shè)備的平臺(tái)模型。下表定義了用于TIOpenCL實(shí)現(xiàn)的
主機(jī)和計(jì)算設(shè)備:
SystemHostComputeDevice
1devicewith2C66xDSPcompute
AM572EVM2ARMCortex-A15CPUs,SMPLinux
units
OpenCL是由Khoros集團(tuán)維護(hù)的開放標(biāo)準(zhǔn)。TI的OpenCL實(shí)現(xiàn)符合OpenCI_1.1標(biāo)準(zhǔn)。
通用OpenCL1.1文檔適用于TI的實(shí)現(xiàn)。
使用OpenCLTM在Sitara?AM572x處理器上卸載C66xDSP
傳統(tǒng)上,客戶采用復(fù)雜的ARMC66x數(shù)字信號(hào)處理器(DSP)芯片上系統(tǒng)(SoC)的編程方
法,例如TI的Sitara?AM57xSoC,著重于手動(dòng)將應(yīng)用程序劃分到ARM核和DSP之
間,并手動(dòng)優(yōu)化給定核的應(yīng)用程序的適當(dāng)部分。這種方法往往會(huì)產(chǎn)生最大的權(quán)限,但也有
缺點(diǎn);-由于程序員需要管理調(diào)度、通信和同步機(jī)制,因此不能輕易地將其從一個(gè)TISoC
移植到另一個(gè)TISoC,而將其用于市場的時(shí)間也會(huì)增加。為了為客戶提供一種替代方案,
TI已經(jīng)啟用了行業(yè)標(biāo)準(zhǔn)的異構(gòu)多核編程模型,例如OpenCL和OpenMP卸載在ARM
DSPSoC上。這篇文章將重點(diǎn)介紹OpenCL和TI的實(shí)現(xiàn)。在稍后的文章中,我將寫關(guān)于
OpenMP卸載的文章。
OpenCL是一種用于表示跨異構(gòu)設(shè)備調(diào)度并行計(jì)算的程序的框架。它是由Khornos財(cái)團(tuán)管
理的開放、免版稅的標(biāo)準(zhǔn)。在異構(gòu)SoC上,OpenCL將可編程內(nèi)核之一作為主機(jī)和其他內(nèi)
核視為設(shè)備。例如,在SITARAAM572XSOC中,主機(jī)是運(yùn)行SMP/Linux或TI-RTOS的
ARM?Cortex3A15群集,并且該設(shè)備是C6xxDSP群集。在主機(jī)上運(yùn)行的應(yīng)用程序(即主
機(jī)程序)管理設(shè)備上的代碼(內(nèi)核)的執(zhí)行,并且還負(fù)責(zé)向設(shè)備提供可用的數(shù)據(jù)。設(shè)備由一個(gè)
或多個(gè)計(jì)算單元組成。在SITARAAM572XSOC上,每個(gè)C66xDSP是一個(gè)計(jì)算單元。
OpenCL運(yùn)行時(shí)由兩個(gè)組件組成:(1)用于主機(jī)程序創(chuàng)建和提交內(nèi)核以供執(zhí)行的API和(2)用
于表達(dá)內(nèi)核的跨平臺(tái)語言-OpenCLC-基于C99C,一些添加和限制OpenCL支持?jǐn)?shù)據(jù)并行
和任務(wù)并行編程范例。數(shù)據(jù)并行執(zhí)行對(duì)設(shè)備上的計(jì)算單元執(zhí)行并行化。任務(wù)并行執(zhí)行支持
將任務(wù)異步分派給每個(gè)計(jì)算單元。
以下是SitaraAM572xSoC的TIOpenCL實(shí)現(xiàn)的幾個(gè)關(guān)鍵特征:主機(jī)是運(yùn)行SMP/Linux的
dualCortex-A15群集一個(gè)具有一個(gè)或兩個(gè)C66xDSP內(nèi)核的設(shè)備(可通過環(huán)境變量配置)
計(jì)算單元是單個(gè)C66xDSPOpenCL實(shí)現(xiàn)符合V1.1(完整配置文件)不支持圖像,“雙”支
持為擴(kuò)展,不包括在一致性提交中.
OpenCLHostOpenCLDevice
Computeunit
LocalMemory
?128KBaccessibleby
kernelsonDSPsvia
OpenCLlocal
,128Kcache
(configurable)
?32Kusedbyruntime
Globalmemory
?160MB
availablefor
OpenCL
(configurable)
DDR(2GBonEVM)
TI對(duì)OpenCL的擴(kuò)展
ti使OpenCL的各種擴(kuò)展能夠利用其SoC上的特性,利用現(xiàn)有的C66xDSP代碼庫,使
它們更易于使用。以下是此類擴(kuò)展的一些例子:
從OpenCLC代碼調(diào)用標(biāo)準(zhǔn)C代碼,包括OpenMP實(shí)用主義代碼
使用OMCRAM的片內(nèi)全局緩沖器
_malloc_DDR和_malloc_mSMC替代malloc(如OpenCL2.0SVMalloc)
啟用零復(fù)前緩沖能力支持OpenCL中C66xDSP固有功能,如_DCMPY,
_DOTPSU4,
ETC等來自O(shè)penCLC的printf(類似于OpenCLI.2printf的功能)
使用EDMAMGRAPI函數(shù)
從OpenCLC訪問EDMA功能
從OpenCLC緩存DSP的L1D和L2緩存的緩存大小和控制操作附加
OpenCLC
內(nèi)置函數(shù)、—clock、_cycle_delay等。
為什么使用OpenCL?
使用標(biāo)準(zhǔn)方法編程異構(gòu)SoC簡化了編程;它允許程序員使用標(biāo)準(zhǔn)的、有記錄的API來處
理調(diào)度代碼和數(shù)據(jù)到DSP的機(jī)制,并將重點(diǎn)放在優(yōu)化調(diào)度代碼上。其他好處包括:
TISOCS之間的應(yīng)用程序無縫遷移-例如,使用8個(gè)C66xDSP內(nèi)核編寫的OpenCL應(yīng)用程
序?qū)懭?6ak2hSOC,并在具有兩個(gè)C66xDSP內(nèi)核的AM572xSoC上運(yùn)行該應(yīng)用程序,
僅需重新編譯。
OpenCL的TI擴(kuò)展使程序員能夠利用優(yōu)化的TI-提供的DSP庫,如DSPUB、MathLib、
ImageLib
使用DSP在開源庫(如OpenCV)中卸載計(jì)算
OpenCL何時(shí)應(yīng)用?
OpenCL是針對(duì)一個(gè)場景設(shè)計(jì)的,其
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育培訓(xùn)機(jī)構(gòu)消防培訓(xùn)課件
- 2025至2030年中國普通實(shí)色貼紙打火機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國明朝民間木雕數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國天九牌數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 礦山井下勞務(wù)合同范本
- 2025至2030年中國企業(yè)管理基礎(chǔ)平臺(tái)軟件數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國云母板式水位計(jì)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年度智能硬件公司個(gè)人股份協(xié)議轉(zhuǎn)讓
- 二零二五年度足療養(yǎng)生館經(jīng)營管理權(quán)轉(zhuǎn)讓合同
- 二零二五年度辣椒病蟲害防治合作協(xié)議
- 2025年湖南鐵路科技職業(yè)技術(shù)學(xué)院單招職業(yè)技能測(cè)試題庫參考答案
- 《ISO 56000-2025創(chuàng)新管理 基礎(chǔ)和術(shù)語》之1:“引言+范圍+術(shù)語和定義”專業(yè)深度解讀與應(yīng)用指導(dǎo)材料(雷澤佳編寫2025A0)-1-150
- DB37-T4817-2025 瀝青路面就地冷再生技術(shù)規(guī)范
- 2025年公共營養(yǎng)師三級(jí)理論試題及答案
- 佛山市內(nèi)戶口遷移申請(qǐng)表
- 《工程制圖完整》課件
- 常見焊接缺陷以及其處理方法PPT
- 《子宮脫垂護(hù)理查房》
- 關(guān)于對(duì)項(xiàng)目管理的獎(jiǎng)懲制度
- A320主起落架收放原理分析及運(yùn)動(dòng)仿真
- 2. SHT 3543-2017施工過程文件表格
評(píng)論
0/150
提交評(píng)論