亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        嵌入式Linux在SMP系統(tǒng)上的移植研究與實現(xiàn)

        2016-11-25 09:00:28朱蘇建邵培南
        電子設計工程 2016年18期
        關(guān)鍵詞:嵌入式系統(tǒng)

        朱蘇建,邵培南,金 剛

        (華東計算技術(shù)研究所 上海 200233)

        嵌入式Linux在SMP系統(tǒng)上的移植研究與實現(xiàn)

        朱蘇建,邵培南,金 剛

        (華東計算技術(shù)研究所 上海 200233)

        基于自主開發(fā)以雙核嵌入式CPU EM8301為處理核心的嵌入式應用的目的,針對雙核CPU芯片的系統(tǒng)結(jié)構(gòu)和Linux內(nèi)核的特性,通過研究嵌入式Linux操作系統(tǒng)在SMP系統(tǒng)上的移植,探討SMP架構(gòu)多核硬件平臺下的啟動流程、任務調(diào)度策略、任務間同步與互斥、中斷處理等問題,結(jié)合自主研發(fā)嵌入式應用的實際需求,得到解決上述問題的方案,完成嵌入式Linux在SMP系統(tǒng)上的移植,并實現(xiàn)嵌入式Linux在自主CPU芯片上的成功運行。

        嵌入式;Linux內(nèi)核;對稱多處理器;移植

        如何不斷提升處理器性能一直是處理器研究的重要內(nèi)容,在單核處理器時代,提高處理器主頻一直是提高處理器性能的主要方式。但由于工業(yè)工藝的限制,處理器主頻已經(jīng)很難再有大幅度的提升,并且功耗增加的代價也已經(jīng)超出了提高主頻所能帶來的收益。這一難題隨著多核處理器的出現(xiàn)得到了很大程度上的解決,單一處理器的主頻對性能的限制被突破。多核處理器就是將一個或多個CPU核集成到一個芯片內(nèi),多個CPU核心共同承擔系統(tǒng)負載,完成功能需求,形成多個處理器核心(Chip Multi-Processing,CMP)的并行體系結(jié)構(gòu),這樣就可以將處理器主頻保持在較低水平的同時提高處理器性能[1]。

        EM8301是針對以太網(wǎng)網(wǎng)絡通信應用開發(fā)的一款雙核嵌入式CPU,該嵌入式CPU的內(nèi)核和系統(tǒng)結(jié)構(gòu)都是自主設計。首先需要選擇較為高效和可靠的操作系統(tǒng)進行移植,使其滿足該嵌入式CPU內(nèi)核的功能需求,以便進一步研究和實現(xiàn)基于該CPU的嵌入式應用板。作為開源系統(tǒng)的嵌入式Linux操作系統(tǒng),系統(tǒng)結(jié)構(gòu)易于研究和應用,同時,Linux內(nèi)核實現(xiàn)了對SMP的支持,因此本文選擇嵌入式Linux作為移植目標??紤]到嵌入式 CPU EM8301的硬件特性,本文選擇使用Linux-3.17.2版本的內(nèi)核,開展針對多核EM8301的操作系統(tǒng)移植研究和實現(xiàn)。文中重點對 SMP(Symmetric Multi-Processing)多核平臺下移植過程中的內(nèi)核啟動流程、任務調(diào)度策略、任務間同步與互斥、中斷處理等問題進行分析解決。

        1 硬件平臺的系統(tǒng)結(jié)構(gòu)

        EM8301嵌入式CPU的系統(tǒng)結(jié)構(gòu)框圖如圖1所示。

        圖1 EM8301嵌入式CPU系統(tǒng)結(jié)構(gòu)框圖

        EM8301嵌入式CPU的內(nèi)核是參考PowerPC指令集自主設計的 CPU核心 E300。E300內(nèi)核集成了 32 kB指令Cache和32 kB數(shù)據(jù)Cache,支持存儲管理功能。

        EM8301的外圍接口包括:DDR、GMAC、PCIE、串口等。

        2 嵌入式Linux的SMP架構(gòu)分析

        Linux的代碼完全開放及其良好的結(jié)構(gòu)設計,使其非常適用于嵌入式系統(tǒng)。由于Linux系統(tǒng)的開源特性,目前出現(xiàn)了許多針對嵌入式硬件系統(tǒng)的單處理器Linux內(nèi)核版本。隨著多核處理器的應用領(lǐng)域不斷擴展,這些單處理器的Linux內(nèi)核版本已經(jīng)無法滿足現(xiàn)有嵌入式應用的需求。因此,必須對所選用的Linux內(nèi)核進行重新改進和設計,適應當前的問題。但是從單核處理器到多核處理器,原有的操作系統(tǒng)模型已經(jīng)無法滿足現(xiàn)有的功能需求,整個模型都需要發(fā)生變化[2],主要體現(xiàn)在以下幾個方面:

        1)內(nèi)核的啟動過程。在單處理器上,內(nèi)核的啟動只需要完成一個CPU的初始化,而在多核處理器上,必須有新的啟動方式,否則會造成混亂。多核處理器并不同時啟動處理器上的所有核心,而是首先確定一個CPU作為主核心,啟動這一主核心并完成必需的初始化操作。這個主核心稱為 BP(Booting Processor)。在BP完成一定的初始化操作之后,再逐個喚醒其它的次處理器核心,這些次 CPU被稱為 SP(Secondary Processor)。在所有次處理器核心(SP)都啟動后,就和主核心(BP)共同承擔系統(tǒng)負載,實現(xiàn)處理器性能的最大利用。

        2)高速緩存一致性。從EM8301嵌入式CPU的系統(tǒng)結(jié)構(gòu)圖中可以看出,EM8301的兩個CPU(CPU0、CPU1)分別獨享32 kB的數(shù)據(jù)Cache。系統(tǒng)中存在大量共享數(shù)據(jù)被各個處理器調(diào)用和修改,這些數(shù)據(jù)在各處理器的數(shù)據(jù)Cache中存有副本。當處理器修改共享數(shù)據(jù)時,僅是修改數(shù)據(jù)Cache中的副本,并不對共享數(shù)據(jù)本身產(chǎn)生影響。而數(shù)據(jù)的修改對另一個處理器是不可見的,另一個處理器在調(diào)用或者修改同一數(shù)據(jù)時,無法獲得被修改后的最新數(shù)據(jù),這樣就會造成Cache不一致。通常情況下,Cache不一致問題主要有軟件和硬件解決兩種不同的方法:一種是通過軟件的方法實現(xiàn),由軟件來控制數(shù)據(jù)的修改,以保證一致性,但這種方法會使操作系統(tǒng)更加復雜,影響系統(tǒng)性能;另一種方法是通過硬件的方法實現(xiàn),在硬件上使用Cache一致性維護邏輯,EM8301嵌入式CPU就是采用的這種方法。

        3)負載的平衡。單核處理器中的單一處理器內(nèi)核完成所有的系統(tǒng)功能需求,承擔系統(tǒng)負載,因此無需考慮負載平衡的問題。而在多處理器中,所有的處理器核心共同承擔負載,如果負載不平衡,出現(xiàn)某些處理器上的任務量偏重而其它處理器比較空閑,就會使處理器資源得不到充分利用,使用多處理器的優(yōu)勢就沒有體現(xiàn)出來。所以在多核架構(gòu)下,系統(tǒng)的負載是由多個CPU共同承擔,操作系統(tǒng)必須處理好CPU核負載均衡的問題。

        4)任務之間的同步與互斥。在單處理器上,只要保證在內(nèi)核中運行進程是非搶占的,就能確保進程是互斥的。而在多處理器上,系統(tǒng)中有多個CPU,由于多個進程可以同時運行在不同的CPU核心上,就必須引入新的同步與互斥機制。并且在Linux2.6以后版本的Linux內(nèi)核中,為了提高系統(tǒng)的實時性,一個內(nèi)核任務可以被搶占[3],非搶占內(nèi)核幾乎已被淘汰。

        5)中斷與異常處理。在單處理器上,一個CPU完成中斷響應、異常處理等操作,處理機制較為容易實現(xiàn)。而在多核處理器中,在工作的多個處理器核心中選擇一個合適的CPU進行中斷的響應和異常的處理需要新的機制進行控制,以實現(xiàn)合理分配中斷和異常處理給相應的CPU。

        3 嵌入式Linux的SMP平臺移植實現(xiàn)

        目前,Linux-3.17.2版本的內(nèi)核已經(jīng)能夠很好的支持SMP系統(tǒng),這為移植提供了便利。本文針對自主開發(fā)的一款雙核嵌入式CPU EM8301,開展嵌入式Linux操作系統(tǒng)的移植研究,移植后的Linux內(nèi)核應該達到以下目標:

        1)Linux內(nèi)核能夠支持嵌入式多核處理器系統(tǒng),在自主嵌入式CPU上成功運行,同時保留Linux效率高、可靠性強的特點,實現(xiàn)從單處理器向多處理器的功能拓展;

        2)成功移植的內(nèi)核應擁有可擴展的系統(tǒng)架構(gòu),該內(nèi)核應當易于配置,并且實現(xiàn)多核服務與底層硬件的分離。

        在前面已經(jīng)分析過嵌入式Linux從單處理器到多處理器的主要變化,下面就對具體的移植過程中的問題進行分析與實現(xiàn)。

        3.1 啟動過程

        Linux系統(tǒng)中,多核的啟動是由BP(Booting Processor)引導SP(Secondary Processor)的啟動。在啟動最初的Bootrom階段,每個CPU都會識別自身的ID,如果ID是0,則引導Bootloader和Linux內(nèi)核執(zhí)行,如果ID不是0,就將自身置于WFI或WFE狀態(tài),并等待CPU0的喚醒[4]。啟動的流程圖如圖2所示。

        圖2 多核Linux啟動流程

        具體的實現(xiàn)過程是,BP通過start_kernel()函數(shù)完成初始化,并在最后調(diào)用rest_init()函數(shù),通過rest_init()創(chuàng)建一個內(nèi)核線程kernel_init()來為SP的啟動布置好運行環(huán)境。

        Kernel_init()內(nèi)核線程首先調(diào)用smp_init_cpus()函數(shù)獲取EM8301系統(tǒng)中CPU核的個數(shù),smp_init_cpus(void)實現(xiàn)的代碼如下:

        然后通過smp_prepare_cpus()函數(shù)設置SP啟動的地址,具體調(diào)用的是flags_set(virt_to_phys(secondary_startup)),其中secondary_startup就是SP被喚醒的執(zhí)行入口,因為此時SP的MMU尚未開啟,所以要將其轉(zhuǎn)換為物理地址。

        最后smp_boot_secondary()完成最終的SP喚醒工作,實現(xiàn)代碼如下:

        調(diào)用的write_pen_release()會將pen_release變量設置為要喚醒的CPU核的CPU號,而后通過arch_send_wakeup_ipi_mask()給要喚醒的CPU發(fā)IPI中斷,這時SP就會從前面smp_prepare_cpus()函數(shù)設置的地址 secondary_startup處開始執(zhí)行。接著就是SP進行初始化操作,在所有的SP完成初始化后,SP和BP一起共同承擔系統(tǒng)負載,完成功能需求,此時就需要完善的多處理器任務調(diào)度策略。

        3.2 任務調(diào)度策略

        任務在雙核處理器上調(diào)度需要滿足兩個前提條件,才能保證任務在運行空間上的數(shù)據(jù)一致性[5]:1)多個任務在執(zhí)行過程中如需進行相互之間的通信操作,必須通過調(diào)用消息處理模塊進行處理,避免多任務之間的共享內(nèi)存,以消除可能產(chǎn)生的重入隱患;2)內(nèi)核的可重入性。保證內(nèi)核的接口操作函數(shù)在執(zhí)行過程中不被打斷,即保證函數(shù)操作為原子操作,同時避免操作過程中引入各類重入問題。當滿足這兩個條件時,上層調(diào)用接口時數(shù)據(jù)訪問的一致性才能夠得到保證。

        EM8301嵌入式CPU的兩個CPU核心使用一個操作系統(tǒng)內(nèi)核,在同步模式下進行工作,共同完成系統(tǒng)指令。在這種同步模式下,單核處理器對指令流的控制方式已經(jīng)無法滿足實際需要,idle任務會導致指令流出現(xiàn)斷流。因此在雙核處理器上,為了防止指令流斷流的情況出現(xiàn),要為每一個處理器核設置獨立無關(guān)的idle任務。

        在雙核處理器中,實現(xiàn)任務的透明調(diào)度對系統(tǒng)來說很重要,這樣用戶任務只需確定其功能是否正確,無需關(guān)心任務具體在哪個CPU核上運行。為了使任務調(diào)度具有透明性,需要在處理器內(nèi)核中新增3個不同功能的任務隊列,便于任務的分配運行。如圖3所示。

        1)ready隊列:系統(tǒng)在運行過程中,將存在大量的任務,因此系統(tǒng)需要保證大量不同優(yōu)先級和同一優(yōu)先級任務的正常運行。如圖3中所示,ready隊列的結(jié)構(gòu)包含兩個主要部分,左側(cè)部分是一個優(yōu)先級指針數(shù)組,用于區(qū)分不同優(yōu)先級,右側(cè)部分則是一個雙向鏈表,用于保存同一優(yōu)先級的多個任務。這樣的ready隊列可以保證大規(guī)模任務在多個CPU核上的合理分配。

        圖3 任務隊列數(shù)據(jù)結(jié)構(gòu)

        2)tick隊列:tick隊列即為延時隊列,任務在被掛到tick隊列后,通過delay計數(shù)控制延遲運行。系統(tǒng)任務通過調(diào)用taskDelay()函數(shù)來改變當前的工作狀態(tài)。當該函數(shù)被執(zhí)行后,其任務的系統(tǒng)狀態(tài)發(fā)生改變,由 ACTIVE轉(zhuǎn)變?yōu)?TICK_ DELAY,同時該任務將被放入到tick隊列中,并設置一個delay計數(shù)。tick隊列中的任務都擁有的delay計數(shù)對任務的TICK_DELAY進行控制。每當有一個tick中斷,系統(tǒng)內(nèi)核將對tick隊列中所有任務的delay計數(shù)都減一。隨后將對delay計數(shù)進行檢測,如有delay計數(shù)為0,則把對應的任務重新加入到ready隊列中。在多核處理器的環(huán)境下,每個核的tick中斷不會對同一任務的delay計數(shù)進行刷新操作,保證tick隊列在邏輯上分離同核任務。

        3)active隊列:在該嵌入式系統(tǒng)中可運行的任務都將被放到active隊列中。

        同時,在系統(tǒng)中增加scheduler模塊,用于管理ready,tick,active3個任務隊列,并基于round-robin策略和多優(yōu)先級策略實現(xiàn)系統(tǒng)任務的調(diào)度功能?;陔p核處理器的內(nèi)核調(diào)度結(jié)構(gòu)圖如圖4所示。

        圖4 雙核處理器中scheduler位置示意圖

        Scheduler模塊的總體流程是:任務處理函數(shù)通過系統(tǒng)接口調(diào)用該模塊,在調(diào)用過程中選擇調(diào)度任務的策略作為參數(shù)提交給scheduler模塊。根據(jù)這一參數(shù),scheduler模塊運行對應的子模塊進行處理。在完成處理后,scheduler模塊將任務放入到ready隊列合適的位置中。

        3.3 任務間同步與互斥

        在單核系統(tǒng)上,每個任務宏觀上并行執(zhí)行,但在微觀上某一時刻并不存在并行,而是只有一個任務在執(zhí)行。在這樣的系統(tǒng)上,同步和互斥問題相對比較容易解決,只要簡單的采取禁止中斷的方式能夠保證對臨界資源的互斥訪問。而多核平臺上的操作系統(tǒng)在運行時,同一時刻可能有多個任務執(zhí)行,這個時候單條指令中完成的操作也會受到干擾出現(xiàn)系統(tǒng)問題,因為可能存在兩個核同時對某一內(nèi)存或者數(shù)據(jù)進行操作。由此來看,傳統(tǒng)的方法有時不能滿足這種多核情況下的需求,SMP系統(tǒng)需要新的同步與互斥機制。

        為了保證SMP環(huán)境下內(nèi)核功能的正常實現(xiàn)以及系統(tǒng)共享資源的合理分配和利用,Linux中使用了新的鎖機制:自旋鎖(spin_lock)[6]。自旋鎖是一種底層同步機制,是用于解決多處理器并發(fā)造成的各類問題的特殊鎖,只能被一個內(nèi)核任務所持有,保證共享資源的互斥使用。當某個處理器內(nèi)核執(zhí)行線程中需要調(diào)用共享資源時,該內(nèi)核首先將申請自旋鎖。自旋鎖可用,則會分配給該內(nèi)核,使其可以進入臨界區(qū)對資源進行操作。完成操作后,該內(nèi)核將向系統(tǒng)釋放自旋鎖。如果鎖被占用,任務并不會直接進入睡眠狀態(tài),而是忙等待直到正在使用自旋鎖的內(nèi)核釋放鎖后再獲得鎖,繼續(xù)運行。

        在EM8301嵌入式CPU的操作系統(tǒng)中,使用了任務自旋鎖控制任務對臨界區(qū)的數(shù)據(jù)訪問。任務自旋鎖的實現(xiàn)過程中是禁止本CPU核上任務調(diào)度的,當任務獲取該任務自旋鎖時,運行此任務的CPU核是不允許其它任務發(fā)生優(yōu)先搶占的,下面是任務自旋鎖的設計與實現(xiàn)。

        任務自旋鎖實現(xiàn)任務的同步和互斥需要以下3個操作:

        1)任務自旋鎖的初始化。將任務自旋鎖的nextTicket、ticketInService、cpuIndex的屬性分別設置為0、0、-1,表示下個獲取該任務自旋鎖的任務標識為0,當前獲取到任務自旋鎖的任務標識為0,所對應的CPU核標識為-1,這樣的屬性設置便于實現(xiàn)自旋鎖的獲取和使用。

        2)任務自旋鎖的獲取流程如圖5所示,在獲取任務自旋鎖后,任務線程可以進行相應的操作。

        圖5 任務自旋鎖獲取流程

        3)任務自旋鎖的釋放。將cpuIndex設置回初始值-1,表示CPU核標識無效,將ticketInService加1,釋放自旋鎖時打開任務調(diào)度,至此完成自旋鎖操作。

        任務自旋鎖首先進行初始化的操作,只有完成后才能被處理器核獲得和使用,處理器核在自旋鎖空閑時獲得并使用。當完成臨界區(qū)的操作后釋放該鎖,等待下一次任務獲取自旋鎖操作,任務自旋鎖采用票鎖的算法。

        3.4 中斷處理

        中斷機制是一個操作系統(tǒng)必不可少的機制,在單核處理器的系統(tǒng)中,通過外部中斷控制器處理中斷問題是一個較為常用的方式,這個外部中斷控制器處理系統(tǒng)的所有中斷,控制器的處理效率影響操作系統(tǒng)性能。但在多核處理器的系統(tǒng)中,若系統(tǒng)中的所有中斷都由一個處理器處理,則會影響系統(tǒng)的性能,同時,這個CPU上運行的任務可能會一直被打斷,造成嚴重的問題。

        所以在多核處理器系統(tǒng)中,需要同時由多個CPU核來處理不同的中斷,多個CPU核分擔中斷處理,以保證不會因為單一處理器處理中斷造成系統(tǒng)問題。那么就需要一個分配中斷的中斷管理策略,一般有如下兩種方法[7]:

        1)靜態(tài)分配:不同的中斷請求和不同的處理器核進行分類綁定,每個處理器核處理特定的中斷請求,這種方法實現(xiàn)方式相對簡單,同時系統(tǒng)的并行性也較高。

        2)動態(tài)分配:系統(tǒng)確定每個處理器核是否屏蔽某種中斷請求。每當有中斷請求時,系統(tǒng)首先對各個處理器屏蔽的中斷請求進行判斷,然后動態(tài)地把這一中斷分配給未屏蔽這一中斷的處理器核,由該處理器處理這一中斷。

        由于EM8301硬件系統(tǒng)提供了對于中斷控制的支持,進行一定的配置工作就可以實現(xiàn)中斷請求的分配,因此關(guān)注的重點是核間中斷。核間中斷是處理器間的中斷,是任務在運行過程中主動觸發(fā)的任務調(diào)度。在多核處理器環(huán)境下,某一任務上運行的任務調(diào)度果會在整個系統(tǒng)的任務調(diào)度中產(chǎn)生全局影響。比如,有兩個任務分別運行在CPU0和CPU1上,任務1阻塞在某個信號量上,而這時任務0觸發(fā)了這個信號量,這時將喚醒任務1,使它從等待隊列轉(zhuǎn)入就緒隊列,但通常任務1不會立即執(zhí)行,而是等到下一個時鐘中斷到來時才會執(zhí)行,這時就需要提出核間中斷的概念了,只有處理器核間中斷能解決這種延時并處理這種情況,并且核間中斷子程序主要完成清中斷,防止這類中斷的反復進入造成嚴重的系統(tǒng)問題,然后切換任務。

        4 結(jié)束語

        文中基于一款自主開發(fā)的雙核嵌入式CPU,分析了多核硬件結(jié)構(gòu)和從單核到多核操作系統(tǒng)所發(fā)生的變化,提出在SMP硬件平臺上進行嵌入式Linux操作系統(tǒng)內(nèi)核移植過程中需要解決的問題,包括多核啟動過程、任務調(diào)度策略、任務間同步與互斥、中斷處理等,并給出了相應的解決方案。另外,由于本文僅針對的是雙核嵌入式CPU系統(tǒng),隨著SMP系統(tǒng)中核個數(shù)的增加,保持系統(tǒng)負載均衡的難度可能會提高,核間通信的效率可能會下降,這就需要在后續(xù)的工作中設計出針對SMP更加完善的操作系統(tǒng)。

        [1]鄧竹莎.面向多處理器結(jié)構(gòu)的嵌入式Linux系統(tǒng)研究與實現(xiàn)[D].成都:電子科技大學,2006.

        [2]陳云川.面向多核處理器的嵌入式操作系統(tǒng)研究[D].成都:電子科技大學,2009.

        [3]曾樹洪,劉衛(wèi)國.Linux內(nèi)核搶占的實現(xiàn)機制分析[J].惠州學院學報:自然科學版,2008,23(3):56-59.

        [4]宋寶華.Linux設備驅(qū)動開發(fā)詳解[M].3版.北京:機械工業(yè)出版社,2015.

        [5]張國杰.嵌入式Linux在多核多線程平臺上的移植研究與實現(xiàn)[D].重慶:重慶大學,2008.

        [6]彭正文,徐新愛.基于SMP的Linux內(nèi)核自旋鎖分析[J].江西教育學院學報(綜合),2005,26(3):23-25,28.

        [7]李嬌嬌.面向SMP架構(gòu)處理器平臺操作系統(tǒng)主要模塊的設計與實現(xiàn)[D].西安:西安電子科技大學,2012.

        Research and implementation of embedded Linux transplantation on SMP system

        ZHU Su-jian,SHAO Pei-nan,JIN Gang
        (East China Institute of Computer Technology,Shanghai 200233,China)

        The thesis is aimed to conduct independent research and development of embedded applications,which are implemented with dual-core embedded EM 8301 CPU as a processing center.Additionally,the thesis also discusses varied topics,ranging from the characteristics of dual-core CPU chip systems and Linux kernels to transplantation of Linux operating system to SMP system.Based on these discussions,it goes further to investigate problems related to the multi-core hardware platform built under SMP system.These problems are related to start-up process,task-scheduling strategies,the synchronization and mutual exclusion among tasks,as well as interruption processing.In the end,the thesis proposes a solution that solves the above problems and meanwhile caters to the practical needs of developing embedded applications.Furthermore,the proposal can also prove that embedded Linux can be transplanted to SMP system,and functions successfully on self-developed CPU chip.

        embedded;Linux kernel;symmetric Multi-processing;transplantation

        TN710

        A

        1674-6236(2016)18-0093-04

        2015-09-16 稿件編號:201509116

        朱蘇建(1990—),男,江蘇邳州人,碩士研究生。研究方向:計算機軟件與理論軟件工程。

        猜你喜歡
        嵌入式系統(tǒng)
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無人機系統(tǒng)
        ZC系列無人機遙感系統(tǒng)
        北京測繪(2020年12期)2020-12-29 01:33:58
        基于PowerPC+FPGA顯示系統(tǒng)
        半沸制皂系統(tǒng)(下)
        TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應用
        電子制作(2019年7期)2019-04-25 13:17:14
        嵌入式系統(tǒng)通信技術(shù)的應用
        電子制作(2018年18期)2018-11-14 01:48:16
        搭建基于Qt的嵌入式開發(fā)平臺
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應用
        国产亚洲精品精品综合伦理| 中字无码av电影在线观看网站| 青榴社区国产精品| 国产中文色婷婷久久久精品| 中国妇女做爰视频| 日本无遮挡吸乳呻吟视频| 国产在线视频h| 看国产亚洲美女黄色一级片 | 日韩极品视频免费观看| 少妇被粗大的猛烈进出免费视频| 欧美在线视频免费观看| 在线观看视频日本一区二区三区| 一区二区三区国产色综合| 国内精品人妻无码久久久影院| 亚洲人成网站77777在线观看 | 亚洲大尺度动作在线观看一区| 日本视频在线播放一区二区| 尤物在线精品视频| 国产区精品| 亚洲午夜精品国产一区二区三区| 日韩精品专区在线观看| 乌克兰少妇xxxx做受野外| 91华人在线| 日本精品人妻一区二区| 成人一区二区免费中文字幕视频| av人摸人人人澡人人超碰小说| 色窝窝手在线视频| 国产自拍偷拍视频免费在线观看 | 少妇高潮一区二区三区99| 亚洲精品456| 亚洲精品一区二区三区日韩| 日本丰满少妇xxxx| a国产一区二区免费入口| 宅男久久精品国产亚洲av麻豆| 国产av一级黄一区二区三区| 亚洲第一se情网站| 日韩亚洲中文图片小说| 国产极品大秀在线性色| 绝顶潮喷绝叫在线观看| 国产成人亚洲综合一区 | 亚洲AV伊人久久综合密臀性色|