下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于Linux的USB主/從設(shè)備之間的三種通信方式隨著簡(jiǎn)單易用的USB接口日益流行,在 嵌入式系統(tǒng)中添加對(duì)usbS口的支持已 成為大勢(shì)所趨。本文通過(guò)介紹Linux中支持USB的各種模塊和庫(kù),分析了在 Linux上利用USBS現(xiàn)高速串口而氐網(wǎng)連接等通信方式的具體方法。通用串行總線(USB,Universal Serial Bus)是一種非常實(shí)用的通信接口,其應(yīng)用日益廣泛。有三種方法可以使運(yùn)行 Linux操作系統(tǒng)的嵌入式系統(tǒng)支持USB妾 口,本文將對(duì)這三種方法逐一進(jìn)行介紹。基于Linux的USB設(shè)備與USB主機(jī)一般有以下三種通信方式:1. 一些功能最完 備結(jié)構(gòu)也最復(fù)雜的設(shè)備采用用戶定制核模塊來(lái)實(shí)現(xiàn)
2、在標(biāo)準(zhǔn)USB總線上運(yùn)行復(fù)雜的高級(jí)協(xié)議,而由USB主機(jī)上相應(yīng)的用戶驅(qū)動(dòng)程序和應(yīng)用來(lái)完成連接。2.另一些基于Linux的USB®備則利用USB總線來(lái)實(shí)現(xiàn)與主機(jī)上所運(yùn)行的某個(gè)應(yīng)用的 簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)串行連接。主機(jī)上的應(yīng)用雖然利用了主操作系統(tǒng)所提供的USBg程接口,但表面看來(lái)卻似乎是在通過(guò)一個(gè)典型的串口進(jìn)行通信。3 .最后,還有些設(shè)備以主計(jì)算機(jī)作為網(wǎng)關(guān),將 USB®備連接到辦公局域網(wǎng)或互聯(lián)網(wǎng)上,從而 使US破備看起仿佛構(gòu)成了一個(gè)以太網(wǎng)。這種方法專業(yè)性較強(qiáng),但通??尚校?是主機(jī)驅(qū)動(dòng)程序使該方法成為可能。在這三種方法中,您可以根據(jù)預(yù)留給開(kāi)發(fā)的時(shí)間長(zhǎng)短和期望USBR口在嵌入式應(yīng)用中所扮演的角
3、色來(lái)決定選用那一種方法比較恰當(dāng)。為了幫助您做出正確的 選擇,下一節(jié)將向您介紹這三種方法分別應(yīng)用于基于Linux的USB®備時(shí)的情況,但首先讓我們對(duì)USES 口做一個(gè)大致介紹。USBffi述USB是一種方便快捷的接口,可用于為計(jì)算機(jī)工作站連接一些小配件。根據(jù) USB 規(guī)的定義,鼠標(biāo)、鍵盤(pán)、音頻播放和錄音設(shè)備、照相機(jī)、大容量存儲(chǔ)設(shè)備以及 許多其他設(shè)備均可以通過(guò) USBg口,以高達(dá)480Mbps的速度連接到一臺(tái)主計(jì)算 機(jī)。協(xié)議定制者對(duì)USB上運(yùn)行的這種復(fù)雜的主從式協(xié)議做出了仔細(xì)的說(shuō)明,這 就幫助保證了所有這些設(shè)備之間具備互操作性和兼容性。例如,該協(xié)議規(guī)定, USB®備只有在被詢問(wèn)
4、時(shí)才可以回答,并且 USBi機(jī)會(huì)根據(jù)所連接的US暇備 類型的不同,采用某些特定的格式,在某些特定的時(shí)間段從不同的設(shè)備獲取數(shù) 據(jù)。USB®備和主機(jī)之間通常通過(guò)專用的總線控制芯片建立連接。在USBi機(jī)上,名為UHCI或OHCI等的控制芯片通過(guò)插卡形式加入主機(jī)或直接集成到工作站的 主板上。在主機(jī)一端的總線控制驅(qū)動(dòng)程序管理著主機(jī)控制芯片,它同時(shí)還跟蹤 監(jiān)視著主機(jī)目前連接的是哪些 USB®備,從而決定應(yīng)如何與它們通信??捎糜谶B接照相機(jī)和鼠標(biāo)之類 USB®備的總線控制器有很多種。其中的一種就 在一塊芯片上同時(shí)集成了 US眼口以及另一端的串口、 I2C接口或并口。USB空 制器
5、(包括主機(jī)上的和USB®備上的控制器)也可能集成到英特爾StrongARM或Hitachi H8之類的微控制器中去。這些芯片及其外圍部件有點(diǎn)類似以太網(wǎng)和CAN®制器,不同的是他們用于連接 USB®備,并運(yùn)行USBB議。很多人都知道Linux操作系統(tǒng)中包含了 USB主機(jī)控制器的驅(qū)動(dòng)程序,因而 USB 鍵盤(pán)、數(shù)碼相機(jī)以及其他一些 USBS備都可以在一個(gè)運(yùn)行Linux操作系統(tǒng)的桌 面工作站上使用。但很少有人知道 Linux中還包含了一組USB設(shè)備控制器的驅(qū) 動(dòng)程序,尤其是集成到StrongARM SA1110處理器中的控制器。有了這些控制器 驅(qū)動(dòng)程序,基于Linux的嵌
6、入式系統(tǒng)就能利用USB8 口來(lái)與主計(jì)算機(jī)(運(yùn)行 Linux或其他操作系統(tǒng))通信。大多數(shù)USB®信的實(shí)現(xiàn)過(guò)程都是雙端的。主機(jī)利 用一個(gè)核模塊或驅(qū)動(dòng)程序來(lái)與 USBS備通彳S,而USBS備則通過(guò)其自身的驅(qū)動(dòng) 程序來(lái)與主機(jī)通信。根據(jù)主機(jī)和 USBS備所采用的通信風(fēng)格的不同,驅(qū)動(dòng)程序 可以很簡(jiǎn)單明白,也可以很復(fù)雜,很具挑戰(zhàn)性。本文主要關(guān)注USBS備端的通信過(guò)程,但也在適當(dāng)?shù)牡胤桨岁P(guān)于主機(jī)端通信過(guò)程實(shí)現(xiàn)的信息。以下討論的技術(shù)應(yīng)當(dāng)引起讀者的注意。本文的目的是介紹如何在數(shù)碼相機(jī)和 PDA?基于Linux的US暇備上使用Linux。此處所指的USB®備是嚴(yán)格意義上 的US股備,即帶正方
7、形連接器的完整的設(shè)備,而不是哪些連接器形狀為扁平 矩形的設(shè)備。止匕外,US璉接的另一端(通常是一臺(tái)PC工作站),應(yīng)該是一臺(tái) USB主機(jī)。關(guān)于USB信息包的格式和通信參數(shù)的詳細(xì)信息,見(jiàn)本文的參考文獻(xiàn)。通過(guò)編寫(xiě)核模塊添加USB® 口1. USB設(shè)備端通信過(guò)程向一個(gè)基于Linux的設(shè)備中添加USB8 口的第一種方法是編寫(xiě)一個(gè)用戶定制的 Linux核模塊,這也是可實(shí)現(xiàn)最完備功能的一種做法。采用這種方法時(shí)通常需 要針對(duì)主機(jī)的操作系統(tǒng)(Windows, Linux等)開(kāi)發(fā)相應(yīng)的驅(qū)動(dòng)程序。srif wk 郵"4附'pirt tTufi ilk 'M總r* ?JLMl 加3
8、3 ApwOr如dh加工r 制拿源? Eerw * 麗 i>trapsit v 用 p#cke<sPMItT 眥匕0卬 K|HNfL| GH' EJMA1;packethltoc:骸 岫CW.SIZEdP_唯口海尹 研 津r i- nwma gi the fe“ buffM :IM ehi Emu of ih K0.-曲阜時(shí)(chAT kmkllliXiABUF 姐l琉憶KtRNEU.尸Hup USB "<rip«g*/nrtdg dMCriptmO;161*0如勺*/utig u他比1巾七L方/kipgrOCdWT*2*用*'Buck ,
9、O1 nU;refl urn &一旦在設(shè)備中實(shí)現(xiàn)了用戶定制的核模塊,就可以使該設(shè)備完成相當(dāng)復(fù)雜的功能,例如仿真一個(gè)文件系統(tǒng),從而允許嵌入式應(yīng)用將其USB主機(jī)當(dāng)作一個(gè)遠(yuǎn)程存儲(chǔ)設(shè)備。除此以外,采用這種方法之后,設(shè)備還可以具備存儲(chǔ)轉(zhuǎn)發(fā)(store-and-forward)的功能,因而能夠在與 USB主機(jī)的連接建立之前對(duì)來(lái)自嵌入式應(yīng) 用的數(shù)據(jù)流進(jìn)行緩沖。在基于StrongARM的Linux設(shè)備中,核代碼用于管理芯片所攜帶的US破備控制器外設(shè),通過(guò)調(diào)用函數(shù)sa1100_usb_open() 來(lái)初始化。在初始化之后,核模塊還會(huì)調(diào)用函數(shù)sa1100_usb_get_descriptor_ptr()
10、和sa1100_usb_set_string_descriptor()來(lái)設(shè)置在設(shè)備查詢期間傳送給 USBi機(jī)的描述符,其中包含設(shè)備的數(shù)字廠商號(hào)和產(chǎn)品標(biāo)識(shí)符,以及可以讓主機(jī)用來(lái)識(shí)別設(shè)備的字符串,甚至還有一個(gè)序列號(hào)域,以便主機(jī)可以唯一地識(shí)別一個(gè)連接在USB8口上的設(shè)備,或者在同種型號(hào)的多個(gè)設(shè)備中進(jìn)行區(qū)分。設(shè)備查詢過(guò)程是由USBS備控制器驅(qū)動(dòng)的,并且一旦和 USB主機(jī)連上之后會(huì)自 動(dòng)執(zhí)行,所以核模塊必須在 USB!信開(kāi)始之前設(shè)置好每個(gè)設(shè)備的描述符。當(dāng)準(zhǔn) 備工作就緒之后,US暇備模塊就會(huì)調(diào)用函數(shù)sa1100_usb_start()來(lái)通知核接 收主機(jī)發(fā)來(lái)的USB連接請(qǐng)求。如果設(shè)備模塊在連上 USB主瓦之
11、前調(diào)用了函數(shù) sa1100_set_configured_callback() ,那么接著核模塊就會(huì)在查詢過(guò)程結(jié)束時(shí)調(diào)用回調(diào)函數(shù)?;卣{(diào)函數(shù)很適合用來(lái)在設(shè)備上發(fā)出警告或給出一些形象的暗示,說(shuō)明連接已經(jīng)建立。如果不再需要進(jìn)行USB!信,那么設(shè)備的核模塊就會(huì)先調(diào)用函數(shù)sa1100_usb_stop(),然后調(diào)用 sa1100_usb_close(),來(lái)關(guān)閉 SA1100上的 USB 控制器。StrongARM的USB控制器支持bulk-in 和bulk-out兩種數(shù)據(jù)傳送方式。當(dāng)接收 來(lái)自USB主機(jī)的數(shù)據(jù)包時(shí),核模塊會(huì)調(diào)用 sa1100_usb_recv(),將一個(gè)數(shù)據(jù)緩 沖區(qū)的地址和一個(gè)回調(diào)函數(shù)送
12、給它。然后核中的 USBS備控制代碼會(huì)從主機(jī)取 回一個(gè) bulk-out 數(shù)據(jù)包,將其容存入制定的緩沖區(qū),接著調(diào)用回調(diào)函數(shù)。下一步,回調(diào)函數(shù)從接收緩沖區(qū)中提取出數(shù)據(jù),將其存放到其他地方,或者將緩沖區(qū)空間添加到一個(gè)隊(duì)列中,然后分配一個(gè)新的緩沖區(qū)來(lái)接收下一個(gè)數(shù)據(jù)包。然后,如果還有數(shù)據(jù)需要接收,那么回調(diào)函數(shù)會(huì)重新調(diào)用sa1100_usb_recv() ,準(zhǔn)備接收另一個(gè)數(shù)據(jù)包。向USB主機(jī)發(fā)送數(shù)據(jù)的過(guò)程與此類似。核模塊收集了一幀數(shù)據(jù)之后,將數(shù)據(jù)的存放地址、數(shù)據(jù)長(zhǎng)度和回調(diào)函數(shù)的地址送給sa1100_usb_send() 函數(shù)。接著,在數(shù)據(jù)傳送結(jié)束之后,核模塊會(huì)調(diào)用回調(diào)函數(shù)。在 www.embedded.
13、/code.htm(arch/arm/mach-sa1100/usb-char.c) 可以找到一個(gè)叫做 usb-char 的模塊,這是一個(gè)很好的設(shè)備端SA1110 Linux USB 模塊的例子。該模塊將USB設(shè)備與USB主機(jī)之間的連接變成一種高速串行。止匕外,usb-eth( arch/arm/mach-sa1100/usb-eth.c) 模塊也是個(gè)不錯(cuò)的例子,該模塊將US眩成了一種虛擬的以太型網(wǎng)絡(luò)。后面會(huì)深入探討這兩種模塊。2. USB 主機(jī)端通信過(guò)程有些很好的主機(jī)端USB8區(qū)動(dòng)程序的例子是隨主流Linux操作系統(tǒng)的發(fā)布而提供 的,位于The Linux Kernel Archives (
14、) 發(fā)布的原始核源代碼中。其中, Handspring Visor 模塊 (drivers/usb/serial/visor.c) 是一個(gè)編寫(xiě)得更清晰,也更易理解的模塊,它同時(shí)也是USB主機(jī)端模塊(drivers/usb/usb-skeleton.c) 的模板。利用USB實(shí)現(xiàn)高速串行通信1. USB 設(shè)備端通信過(guò)程為了達(dá)到最實(shí)用的效果,我們可以將USB總線簡(jiǎn)單地看作一個(gè)高速串口,然后,在一些嵌入式設(shè)備和應(yīng)用中,我們就可以用US眼口來(lái)模擬串口。StrongARM處理器的Linux核就提供了一個(gè)名為usb-char的USBiS備驅(qū)動(dòng)程 序,它所完成的恰好就是用USB真擬串口的功
15、能。當(dāng)需要與USB主機(jī)通信時(shí),Linux操作系統(tǒng)中的USBS備應(yīng)用只是簡(jiǎn)單地打開(kāi)一個(gè)與其usb-char 設(shè)備節(jié)點(diǎn)的連接(連接類型為字符型,major number 為 10,minor為240),然后就開(kāi)始讀寫(xiě)數(shù)據(jù)。在與 USB主機(jī)的連接建立之前,read()和 write() 操作均返回一個(gè)錯(cuò)誤信息。一旦連接建立好,并且設(shè)備查詢完成之后,USB8 口就開(kāi)始象一個(gè)點(diǎn)對(duì)點(diǎn)的串口一樣與主機(jī)進(jìn)行通信。這種進(jìn)行US琳據(jù)傳送的方法非常簡(jiǎn)單有效,因而 usb-char設(shè)備模塊發(fā)布之后 一直很受歡迎。而且,該模塊還為通過(guò)其他方法進(jìn)行USB!信提供了一個(gè)參考。在 usb-char 中,真正的操作開(kāi)始于usb
16、c_open() 函數(shù),列表1 給出了函數(shù)的一部分代碼。筆者由于臨時(shí)的興趣,對(duì)該代碼做了一點(diǎn)修改,取消了錯(cuò)誤和超時(shí)句柄。在此向代碼的原作者Brad Parker 、 Nicolas Pitre 和 Ward Willats 致歉。twiddle_descriptors()函數(shù)用于設(shè)置設(shè)備的USB的述符。在描述符設(shè)置好之后,我們就可以開(kāi)始進(jìn)行設(shè)備查詢,并從USB主機(jī)接收一幀數(shù)據(jù)。kick_start_rx() 函數(shù)段的代碼主要用于調(diào)用sa1100_usb_recv() ,建立回調(diào)。在USB主機(jī)發(fā)送一個(gè)數(shù)據(jù)包時(shí),設(shè)備的核模塊會(huì)通過(guò)回調(diào)方式調(diào)用rx_done_callback_packet_buff
17、er() 函數(shù),將數(shù)據(jù)包的容送入一個(gè) FIFO 隊(duì)歹!J, 以便能通過(guò)read() 函數(shù)將該數(shù)據(jù)包返回給usb-char 設(shè)備節(jié)點(diǎn)。2. USB 主機(jī)端通信過(guò)程對(duì)于運(yùn)行Linux操作系統(tǒng)的USB主機(jī),與usb-char相應(yīng)的USB主機(jī)模塊叫做 usbserial 。大多數(shù)Linux 版本中都包含了該模塊,但它并不總能自動(dòng)加載。通常應(yīng)在主機(jī)與USB設(shè)備之間的連接建立之前利用 modprobe或insmod加載該模 塊。USBS備查詢完成之后,主機(jī)上白一項(xiàng)應(yīng)用就會(huì)利用某個(gè)usbserial設(shè)備節(jié)點(diǎn)(字符型 , major 為 188, minor 大于等于0)與其通信。這些節(jié)點(diǎn)通常叫做/dev/t
18、tyUSBn 。 Usbserial模塊會(huì)報(bào)告它將哪一個(gè)節(jié)點(diǎn)分配給了哪一臺(tái)US暇備,并將這一信息按如下方式記載在核消息記錄中:usbserial.c :檢測(cè)到一般轉(zhuǎn)換器usbserial.c :將一般轉(zhuǎn)換器加入ttyUSB0這種連接一旦建立,USB主機(jī)上的應(yīng)用就可以通過(guò)向特定的節(jié)點(diǎn)讀或?qū)懙姆绞?與某USB設(shè)備通信。此時(shí),筆者并未考慮在運(yùn)行 Win32或其他類型操作系統(tǒng)的主機(jī)上已有類似 usbserial的模塊。但用于這些主機(jī)上的任何US圍區(qū)動(dòng)程序,只要能夠進(jìn)行bulk-in 和 bulk-out 數(shù)據(jù)傳輸,就很可能是一個(gè)近乎完整的驅(qū)動(dòng)程序,只需進(jìn)行一定的產(chǎn)品調(diào)整,并添加與產(chǎn)品綁定的廠商ID。L
19、inux 主機(jī)上還有另一種類似usbserial 模塊的庫(kù),叫做libusb ( 參見(jiàn)) 。該庫(kù)通過(guò)低級(jí)的核系統(tǒng)調(diào)用而不是通過(guò)usbserial模塊來(lái)完成USBR據(jù)傳輸,因而在Linux kernel版本上更容易設(shè)置和使用。同 時(shí),該庫(kù)還能提供大量實(shí)用的調(diào)試功能,十分利于對(duì) USB上運(yùn)行的復(fù)雜的通信 協(xié)議進(jìn)行調(diào)試。為了通過(guò)libusb與一個(gè)采用了 usb-char模塊的USBiS備進(jìn)行通信,Linux主機(jī)應(yīng)用首先通過(guò)庫(kù)中的usb_open() 函數(shù)與設(shè)備建立連接,然后利用函數(shù)usb_bulk_read() 和 usb_bulk_write() 與設(shè)備交換數(shù)據(jù)。Libusb 中含有幾個(gè)程序例。利
20、用USB實(shí)現(xiàn)以太網(wǎng)連接1. USB 設(shè)備端通信過(guò)程如果利用US璉接來(lái)實(shí)現(xiàn)高速串口并非您所希望,那么您還可以將所有USB連接用作一個(gè)以太網(wǎng)。不論在主機(jī)端還是在設(shè)備端,Linux 均有模塊能實(shí)現(xiàn)這一功能。iPAQ(掌上電腦)的Linux核就獨(dú)一無(wú)二地采用了這種通信策略,因?yàn)閕PAQ硬件中既沒(méi)有可訪問(wèn)的串口也沒(méi)有專門(mén)的網(wǎng)絡(luò)接口。StrongARM Linux 核中,有一個(gè)叫做usb-eth 的模塊 (arch/arm/mach-sa1100/usb-eth.c),它利用USB乍為物理媒介,模擬出一個(gè)虛構(gòu)的以太網(wǎng)設(shè)備。一旦這種網(wǎng)絡(luò)接口創(chuàng)建起來(lái)之后,就可以為它分配IP 地址,并且外部環(huán)境均將其作為一個(gè)普
21、通的以太網(wǎng)硬件對(duì)待。一旦USB主機(jī)連接建立起來(lái),usb-eth模塊就允許US暇備“瀏覽”因特網(wǎng),拼其他的IP地址,甚至通過(guò)DHCP HTTP NFS或者遠(yuǎn)程網(wǎng)“交談”,以及收發(fā)電子。簡(jiǎn)而言之,任何能夠在真正的以太網(wǎng)接口上運(yùn)行的應(yīng)用都可以原封不動(dòng)地在usb-eth 上運(yùn)行,因?yàn)檫@些應(yīng)用無(wú)法識(shí)別它們所使用的其實(shí)并非真正的以太網(wǎng)硬件。2. USB 主機(jī)端通信過(guò)程相應(yīng)的,在運(yùn)行Linux操作系統(tǒng)的主機(jī)一端,可用來(lái)在 USB上實(shí)現(xiàn)以太網(wǎng)連接 的核模塊叫做usbnet。安裝了該模塊之后,一旦主機(jī)與 USB®備的連接建立起 來(lái),它就會(huì)創(chuàng)建一個(gè)虛擬的以太網(wǎng)接口,在主機(jī)一端的核模塊以及用戶應(yīng)用看來(lái),這個(gè)虛擬的接口與真正的以太網(wǎng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025交鑰匙合同范本
- 2024年電力設(shè)施采購(gòu)清單協(xié)議范本
- 商丘師范學(xué)院《社會(huì)學(xué)原著選讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年電動(dòng)窗簾產(chǎn)品設(shè)計(jì)與開(kāi)發(fā)合同
- 2024年離婚協(xié)議書(shū):車輛歸屬及分配條款
- 商洛職業(yè)技術(shù)學(xué)院《地域建筑》2023-2024學(xué)年第一學(xué)期期末試卷
- 汕尾職業(yè)技術(shù)學(xué)院《網(wǎng)上開(kāi)店》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024至2030年?duì)I養(yǎng)性添加劑項(xiàng)目投資價(jià)值分析報(bào)告
- 叉車安全施工合同范例
- 2024至2030年水草桶項(xiàng)目投資價(jià)值分析報(bào)告
- 員工保密意識(shí)培訓(xùn)
- 《世界主要?dú)夂蝾愋停ǖ?課時(shí))》示范課教學(xué)設(shè)計(jì)【湘教版七年級(jí)地理上冊(cè)】
- 血液科護(hù)士與患者溝通技巧
- 施耐德變頻器教學(xué)課件
- 供應(yīng)鏈金融PPT模板
- 2024年中國(guó)航空油料有限公司招聘筆試參考題庫(kù)含答案解析
- 2024年安徽新華書(shū)店有限公司招聘筆試參考題庫(kù)含答案解析
- 洪水與汛期監(jiān)測(cè)和預(yù)警系統(tǒng)
- 足月小樣兒護(hù)理查房課件
- 2024年生產(chǎn)主管的挑戰(zhàn)與機(jī)遇
- 20以內(nèi)進(jìn)位加法100題(精心整理6套-可打印A4)
評(píng)論
0/150
提交評(píng)論