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

        ?

        網(wǎng)絡(luò)安全嵌入應(yīng)用中的BOOTLOADER*

        2016-11-11 06:22:24龔昌平譙通旭張福健
        信息安全與通信保密 2016年10期
        關(guān)鍵詞:堆棧扇區(qū)存儲器

        龔昌平,譙通旭,張福健

        (中國電子科技集團(tuán)公司第三十研究所,四川 成都 610041)

        網(wǎng)絡(luò)安全嵌入應(yīng)用中的BOOTLOADER*

        龔昌平,譙通旭,張福健

        (中國電子科技集團(tuán)公司第三十研究所,四川 成都 610041)

        Bootloader是網(wǎng)絡(luò)安全嵌入軟件開發(fā)實(shí)現(xiàn)的第一步,也是最重要的一步,直接影響應(yīng)用程序在設(shè)備加電后是否能夠正常加載運(yùn)行,也影響設(shè)備從加電到正常運(yùn)行間的時(shí)間,影響用戶的體驗(yàn)。因此,討論Bootloader的基本屬性,并通過一個(gè)簡單的實(shí)例詳細(xì)描述引導(dǎo)加載過程,同時(shí)就如何滿足現(xiàn)場升級、在應(yīng)用編程(IAP)等方面的應(yīng)用需求進(jìn)行闡述,以助于網(wǎng)絡(luò)安全嵌入式系統(tǒng)開發(fā)人員尤其是初學(xué)者深刻理解Bootloader。

        網(wǎng)絡(luò)安全;嵌入式應(yīng)用;引導(dǎo)加載器;現(xiàn)場升級;IAP

        0 引 言

        所謂Bootloader,即引導(dǎo)加載器,是網(wǎng)絡(luò)安全嵌入式系統(tǒng)中最先被運(yùn)行的一小段程序。通過這小段程序初始化硬件設(shè)備,建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終調(diào)用應(yīng)用程序準(zhǔn)備好軟硬件環(huán)境。

        常言道,“萬事開頭難”。編寫網(wǎng)絡(luò)安全嵌入式應(yīng)用軟件也是如此。一些網(wǎng)絡(luò)安全嵌入式應(yīng)用開發(fā)者,尤其是初學(xué)者,常常對其中的Bootloader感到困惑不解,更不用說如何編寫。因?yàn)榫W(wǎng)絡(luò)安全嵌入系統(tǒng)的Bootloader涉及底層硬件操作細(xì)節(jié),所以編寫一個(gè)合適的Bootloader是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。本文將以TI公司的DSP芯片為例,介紹編寫B(tài)ootloader的一些實(shí)現(xiàn)細(xì)節(jié)。

        1 Bootloader的基本屬性

        在具體闡述Bootloader的基本屬性前,先了解系統(tǒng)的引導(dǎo)過程[1-2]。以TI公司的C6000 DSP的ROM Boot方式為例,如圖1所示,DSP的引導(dǎo)過程如下:(1)上電復(fù)位后,CPU暫停運(yùn)轉(zhuǎn),其他部分則開始工作,此時(shí)EMIF的CE1空間自動配置為8/16/32位異步存儲器接口,并且CE1空間讀/寫時(shí)序自動配置為最大,然后通過DMA(或EDMA)方式將外部CE1空間的數(shù)據(jù)讀入到內(nèi)部程序空間地址0處,讀入數(shù)據(jù)的多少因芯片而異(C641x,C671x讀取1 kB,C620x讀取64 kB)。(2)CPU開始運(yùn)轉(zhuǎn),并執(zhí)行內(nèi)部程序空間地址0處的程序,先將外部應(yīng)用程序數(shù)據(jù)讀入到DSP程序空間相應(yīng)地址,然后跳轉(zhuǎn)到應(yīng)用程序運(yùn)行。

        圖1 TI DSP引導(dǎo)過程

        第一步由芯片自動完成,第二步由用戶完成。用戶編寫相應(yīng)的C程序(C620x,容量64 kB,可以用C實(shí)現(xiàn))或匯編程序(C641x,C671x,容量1 kB,只能用匯編實(shí)現(xiàn)),實(shí)現(xiàn)二級引導(dǎo),即應(yīng)用程序的裝載。

        第二步通常也就是Bootloader要實(shí)現(xiàn)的目標(biāo)。

        在一個(gè)典型的網(wǎng)絡(luò)安全嵌入式開發(fā)環(huán)境中,目標(biāo)硬件通過一個(gè)硬件仿真器與主機(jī)連接[3]。通常,還會有類似TI的CCS調(diào)試器,用于將程序加載到目標(biāo)存儲器并執(zhí)行。用戶還可根據(jù)需要設(shè)置斷點(diǎn),以及其他諸如跟蹤、剖析等事務(wù)。這些都使得開發(fā)者很容易快速實(shí)現(xiàn)和調(diào)試新的應(yīng)用案例。

        如果一個(gè)應(yīng)用由C實(shí)現(xiàn),并在非嵌入式開發(fā)環(huán)境中運(yùn)行,程序看起來像是從主函數(shù)main開始執(zhí)行,程序的加載和初始化過程則隱藏在表象背后。可見,將把用戶的注意力從底層的系統(tǒng)寄存器初始化、堆棧的初始化、數(shù)據(jù)的初始化轉(zhuǎn)移到上層應(yīng)用程序代碼,向用戶提供一個(gè)友好的用戶界面,將僅僅是調(diào)試器而非開發(fā)者的事情。

        而在一個(gè)網(wǎng)絡(luò)安全嵌入應(yīng)用開發(fā)環(huán)境中,程序通常從C環(huán)境的程序入口點(diǎn)開始執(zhí)行。程序入口點(diǎn),TI的文檔通常稱為c_int00,實(shí)現(xiàn)堆棧、系統(tǒng)寄存器和數(shù)據(jù)存儲器的初始化后,跳轉(zhuǎn)到main[4]。由于與特定處理器相關(guān)的復(fù)位入口點(diǎn)(復(fù)位矢量)將觸發(fā)c_int00,故開發(fā)者通常會對c_int00作特殊處理。

        Bootloader形式多樣,圖2展示了一個(gè)典型的網(wǎng)絡(luò)安全嵌入式C應(yīng)用中的Bootloader。在這個(gè)例子中,RESET矢量跳轉(zhuǎn)到C環(huán)境入口函數(shù)c_int00,并在此進(jìn)行堆棧和系統(tǒng)寄存器的初始化。此外,在運(yùn)行前需初始化的C變量也從.cinit段復(fù)制到.bss段相應(yīng)的位置[5]。最后,調(diào)用main()函數(shù)。在這個(gè)簡單的例子中,Bootloader包括RESET復(fù)位矢量和c_int00,并假定Bootloader和應(yīng)用程序都是從同一個(gè)非易失存儲器開始執(zhí)行。在一個(gè)稍微復(fù)雜的系統(tǒng)中,Bootloader在調(diào)用main()前或許還會將應(yīng)用程序復(fù)制到快速易失存儲器。

        圖2 一個(gè)簡單的Bootloader

        更復(fù)雜的Bootloader或許還會實(shí)現(xiàn)諸如系統(tǒng)診斷、調(diào)試功能、現(xiàn)場更新等。其中,系統(tǒng)診斷包括存儲器測試、外設(shè)測試、程序完整性校驗(yàn)等。Bootloader也可能會包含簡單的調(diào)試功能模塊,它通常集成在用戶監(jiān)控程序模塊中。Bootloader還可能會處理現(xiàn)場更新程序、從外部存儲器下載應(yīng)用程序等。如果擔(dān)心自己的產(chǎn)品被逆向工程,為保護(hù)自己的知識產(chǎn)權(quán),用戶還可以在Bootloader中集成加密、解密代碼的功能。為了節(jié)約寶貴的存儲器資源,也可以選擇在Bootloader中進(jìn)行資源壓縮、解壓縮。甚至為了以后方便資源管理,還可以集成文件系統(tǒng)。

        2 應(yīng)用實(shí)例

        讓我們來看看一個(gè)包含上述所有基本屬性的Bootloader。這個(gè)例子同樣也會將應(yīng)用程序從慢速非易失性存儲器復(fù)制到快速易失性存儲器,以加快應(yīng)用程序的執(zhí)行速度。

        這里以TI的DSP為例,目標(biāo)處理器是TI的TMS320C6205 DSP。它使用分離的程序和數(shù)據(jù)存儲器,即典型的哈佛結(jié)構(gòu)[6-8]。在這個(gè)簡單的系統(tǒng)中,外部存儲器是位于CE1空間的慢速FLASH,內(nèi)含Bootloader和應(yīng)用程序的拷貝。引導(dǎo)方式選擇C6205的ROM Boot方式,存儲器映射選擇Memory Map 1,即地址0處于片內(nèi)空間,這也是網(wǎng)絡(luò)安全嵌入式應(yīng)用中的首選應(yīng)用方式。實(shí)際上,TI在后續(xù)C6000芯片的設(shè)計(jì)中,完全摒棄了存儲器映射方式的選擇,直接將地址0x00000000定位于片內(nèi)(例如C6416)。

        應(yīng)用程序代碼用C語言編寫。此例中,修改TI C6205 DSP的庫函數(shù)c_int00,以此作為Bootloader,并完成以下功能:初始化堆棧;設(shè)置寄存器;從.cinit中初始化數(shù)據(jù),將應(yīng)用程序從慢速的外部FLASH復(fù)制到快速的程序RAM(片內(nèi)或片外),然后跳轉(zhuǎn)到main()函數(shù)[9]。

        本例子的鏈接命令文件如下[10]:

        開始兩行分別定義堆、??臻g的大小為16 kB、32 kB。接下來,MEMORY偽指令分配存儲空間。這里,把片內(nèi)程序空間(共64 kB)分為4個(gè)部分:IPRAM_VECT(中斷矢量),IPRAM_BOOT(RTS庫中的boot代碼),IPRAM_RTSL(本程序中用到的RTS庫代碼)和IPRAM(其余運(yùn)行于片內(nèi)的程序);把CE1空間分為FLASH0~FLASH5六部分:片內(nèi)程序、保留、片外程序、.cinit段、.const段、.switch段;接下來,SRAM_P則定義了片外程序的運(yùn)行空間,而IDRAM則是64 k字節(jié)的片內(nèi)數(shù)據(jù)空間,所有的全局變量、局部變量、常數(shù)等均在此空間內(nèi)。偽指令SECTIONS將程序中用到的各個(gè)段分配至MEMORY定義的相應(yīng)區(qū)域內(nèi),從而完成所有段的映射。開始于CE1空間(FLASH0)的首0x200字節(jié)存放的是中斷矢量表,上電時(shí)將被搬移至IPRAM_VECT區(qū)域。FLASH0的其余部分以及FLASH1~FLASH5則包含c_int00和C程序的拷貝,上電時(shí)將被搬移到IPRAM_BOOT、IPRAM_RTSL、IPRAM、SRAM_P,隨后應(yīng)用程序開始運(yùn)行。最后,IDRAM中包含堆棧和C變量,存于C6000的片內(nèi)RAM中。需要注意的是,這些變量和堆棧也是由c_int00負(fù)責(zé)初始化的。

        在鏈接命令文件中,應(yīng)特別注意LOAD和RUN的使用。當(dāng)編譯C或匯編源文件時(shí),生成的目標(biāo)文件總是可重定位的。因此,在鏈接前是不知道絕對地址的[11-14]。一個(gè)目標(biāo)文件可以臨時(shí)加載到存儲器的任何區(qū)域,但在運(yùn)行前必須拷貝到RUN運(yùn)行時(shí)的絕對地址處,否則程序的運(yùn)行不可預(yù)知。LOAD

        用于說明程序存儲在哪,但并不說明程序的運(yùn)行地址。RUN

        則說明程序的運(yùn)行地址,也被鏈接器用于地址解析。如果程序的加載地址和運(yùn)行地址不同,程序在運(yùn)行前應(yīng)從加載地址拷貝到運(yùn)行地址。通常程序的運(yùn)行地址和加載地址相同,但在這個(gè)特定的例子中,由于應(yīng)用程序在運(yùn)行前必須從慢速存儲器搬移到快速存儲器,因此這兩個(gè)地址必定不同,而程序拷貝工作由Bootloader來完成。

        對于中斷矢量表,復(fù)位矢量只是簡單跳轉(zhuǎn)到c_int00入口函數(shù),不處理其他中斷:

        這個(gè)修改后的c_int00函數(shù)必須首先初始化堆棧和需要初始化的DSP寄存器,然后把應(yīng)用程序從FLASH拷貝到片外程序RAM,使用.cinit表初始化數(shù)據(jù)項(xiàng),最后調(diào)用main()函數(shù)。

        注意,應(yīng)盡量把對速度要求較高的程序段放在片內(nèi),同時(shí)把堆棧、變量也放在片內(nèi),以加快程序的運(yùn)行速度。

        在編寫鏈接命令文件時(shí),要注意程序和數(shù)據(jù)的地址空間安排。通常,數(shù)據(jù)區(qū)域不能存放程序,反之亦然。正如本例的鏈接命令文件,C6205的數(shù)據(jù)空間和程序空間并不重疊。

        3 思路拓展

        幾乎TI所有的DSP都內(nèi)置有基于ROM的Bootloader,用于將程序代碼從片外拷貝到DSP的程序空間。代碼加載接口靈活多樣,可使用McBSP、SPI、HPI、I/O、GPIO和并行存儲器接口等[15]。使用GPIO非常方便、通用、靈活,但缺點(diǎn)是速度較慢且獨(dú)占CPU。HPI和并行存儲器接口的速度較快,但靈活性稍差。激活Bootloader的機(jī)制因器件而異,但所有的器件通常都會有“檢測外部處理器引腳的數(shù)字狀態(tài)”“外部并行數(shù)據(jù)接口”“I/O總線上某個(gè)特殊數(shù)字序列”等常規(guī)機(jī)制。

        在大多數(shù)網(wǎng)絡(luò)安全嵌入式環(huán)境中,Bootloader必須具備魯棒性,在某些情況下甚至只許成功,不能失敗。一個(gè)好的設(shè)計(jì)思路就是像圖3那樣,將Bootloader分成幾個(gè)獨(dú)立的扇區(qū)[10]。由于可塊引導(dǎo)FLASH的每個(gè)扇區(qū)能夠單獨(dú)鎖定,因此非常適合這種場合。

        引導(dǎo)扇區(qū)包含中斷矢量表和引導(dǎo)代碼,出廠時(shí)被編程到非易失性存儲器。加載器分為兩個(gè)扇區(qū):主加載器扇區(qū)和二級加載器扇區(qū)。每個(gè)扇區(qū)均有CRC校驗(yàn)值。出廠時(shí),設(shè)備默認(rèn)配置為主加載器。

        圖3 多級引導(dǎo)扇區(qū)(魯棒性)

        二級加載器扇區(qū)出廠時(shí)為保留空間,無初始化數(shù)據(jù)。如果設(shè)備需要新的加載器(即加載程序),將由主加載器寫到二級加載器扇區(qū)。應(yīng)用程序扇區(qū)包含應(yīng)用程序代碼,將由主加載器或二級加載器現(xiàn)場加載至非易失性存儲空間(即現(xiàn)場更新)。

        系統(tǒng)復(fù)位時(shí),引導(dǎo)扇區(qū)進(jìn)行冗余檢測、硬件特定的系統(tǒng)初始化。引導(dǎo)扇區(qū)基于CRC完整性校驗(yàn)來確定激活哪個(gè)加載器,每個(gè)加載器扇區(qū)都存儲有CRC校驗(yàn)值。首先檢驗(yàn)主加載扇區(qū)的完整性校驗(yàn),若校驗(yàn)通過,則使用主加載扇區(qū);若校驗(yàn)未通過,轉(zhuǎn)為校驗(yàn)二級加載扇區(qū)的校驗(yàn)值,若校驗(yàn)通過,使用二級加載扇區(qū)。然后,選擇的加載器扇區(qū)負(fù)責(zé)應(yīng)用程序的完整性校驗(yàn),將應(yīng)用程序加載到易失性存儲器,并跳轉(zhuǎn)到應(yīng)用程序的入口點(diǎn)。

        軟件是否可在線更新成為衡量設(shè)備升級靈活性的重要指標(biāo)。應(yīng)用編程(IAP)是指當(dāng)固件駐留在系統(tǒng)中時(shí),可將固件寫至非易失性存儲器。常用的方法是,首先加載設(shè)備加載程序到非易失性目標(biāo)存儲器,隨后就由設(shè)備加載程序負(fù)責(zé)下載外部應(yīng)用程序,并將其編程到目標(biāo)系統(tǒng)的非易失存儲器。TI的許多DSP都內(nèi)置有基于ROM的Bootloader,利用這個(gè)內(nèi)置的Bootloader將很容易實(shí)現(xiàn)上述目標(biāo)。通常的思路如下:(1)完成系統(tǒng)初始化;(2)選擇檢測程序更新條件。有四種方式對程序更新進(jìn)行檢測:

        方式1:設(shè)置定時(shí)器。時(shí)限未到,可以進(jìn)行程序更新;時(shí)限到,則檢查應(yīng)用程序標(biāo)志,如果有應(yīng)用程序且校驗(yàn)和正確,則跳轉(zhuǎn)到應(yīng)用程序執(zhí)行;否則重置定時(shí)器,開始新一輪檢測。(前提條件:有硬件定時(shí)器)

        伊泰普水電站當(dāng)時(shí)初步選定的單機(jī)容量為700 MW,對其向上取700的倍數(shù),分別得到12 600 MW和14 000 MW。所以伊泰普水電站的初期(1991年)裝機(jī)容量為12 600 MW,并預(yù)留了擴(kuò)建2臺700 MW機(jī)組的機(jī)坑。到2007年伊泰普水電站總裝機(jī)容量從12 600 MW增加到14 000 MW,年發(fā)電量為900億kW·h。該數(shù)據(jù)與表2中數(shù)據(jù)基本一致,驗(yàn)證了該方法的可靠性。

        方式2:檢測外部按鍵是否按下。如果按鍵按下,執(zhí)行程序更新;否則,檢查應(yīng)用程序標(biāo)志,如果有應(yīng)用程序且校驗(yàn)和正確,則跳轉(zhuǎn)到應(yīng)用程序執(zhí)行,否則重新檢測按鍵,開始新一輪檢測。(前提條件:有按鍵)

        方式3:方式1和方式2的綜合,設(shè)置定時(shí)器。時(shí)限未到,循環(huán)檢測按鍵是否有效,并進(jìn)行程序更新;時(shí)限到,則檢查應(yīng)用程序標(biāo)志,如果有應(yīng)用程序且校驗(yàn)和正確,則跳轉(zhuǎn)到應(yīng)用程序執(zhí)行;否則重置定時(shí)器,開始新一輪檢測。(前提條件:按鍵+定時(shí)器)

        方式4:在主循環(huán)中設(shè)置一個(gè)變量進(jìn)行計(jì)數(shù)。每循環(huán)一次變量加1,計(jì)數(shù)值未到,可進(jìn)行程序更新;計(jì)數(shù)值到,則檢查應(yīng)用程序標(biāo)志,如果有應(yīng)用程序且校驗(yàn)和正確,則跳轉(zhuǎn)到應(yīng)用程序執(zhí)行;否則計(jì)數(shù)值清0,開始新一輪檢測。

        上述過程結(jié)束后,如果有應(yīng)用程序,Bootloader將把程序的控制權(quán)交給應(yīng)用程序??紤]到片內(nèi)RAM資源有限、用戶習(xí)慣且程序編寫方便,通常我們把Bootloader和應(yīng)用程序的入口地址都安排在地址0處。因此,在任意時(shí)刻,有且僅有一個(gè)程序處于執(zhí)行狀態(tài)。

        Bootloader如何將應(yīng)用程序搬移到地址0并運(yùn)行?需要搬移全部應(yīng)用程序嗎?以TI的C6000芯片為例,先使用芯片內(nèi)置的DMA/EDMA完成固定長度的程序代碼搬移(C641x,C671x:1KB,C620x:64KB-Len),隨后由剛才搬移的程序?qū)⒂嘞碌某绦虼a搬移至合適地址。切記,完成DMA/EDMA程序搬移的這段程序(假設(shè)長度為Len)的地址空間,不能與被其搬移的程序地址空間重疊,否則程序的執(zhí)行行為不可預(yù)知。

        在一些網(wǎng)絡(luò)安全嵌入式系統(tǒng)中,非易失存儲器的容量可能比易失存儲器的容量小得多。針對此種情況,可在Bootloader中集成信源編碼(即壓縮、解壓縮):代碼先經(jīng)壓縮,然后存放到FLASH上;使用前解壓縮FLASH上的代碼,再加載到程序RAM空間并運(yùn)行。此外,如果用戶希望保護(hù)自己的知識產(chǎn)權(quán),防止競爭對手COPY技術(shù)成果,在Bootloader中可增加加密、解密功能。

        4 結(jié) 語

        本文概要介紹Bootloader的方方面面,并以TMS320C6205為例,對怎樣為網(wǎng)絡(luò)安全嵌入式應(yīng)用寫一個(gè)Bootloader進(jìn)行詳細(xì)闡述,希望對網(wǎng)絡(luò)安全嵌入式系統(tǒng)開發(fā)人員尤其是初學(xué)者有所幫助。

        [1] TI.TMS320C620x/C670x DSP Boot Modes and Configuration Reference Guide[J].Application Note,2003,1(01):1-23.

        [2] TI.TMS320C6414,TMS320C6415,TMS320C6416 Fixed-point Digital Signal Processors[J].Application Note,2005,1(01):75.

        [3] TI.TMS320C6000 Assembly Language Tools User's Guide[J].Application Note,2006,1(01):61-125.

        [4] TI.TMS320C6000 Optimizing C Compiler User's Guide[J].Application Note,2011,1(01):183-243.

        [5] TI.TMS320C6000 CPU and Instruction Set Reference Guide[J].Application Note,2000,1(01):644-670.

        [6] TI.TMS320C6000 Peripherals Reference Guide [J]. Application Note,2006,1(01):1-11.

        [7] TI.TMS320C62x/C67x Programmer's Guide [J]. Application Note,2011,1(01):421-432.

        [8] TI.TMS320C6000 DSP Enhanced Direct Memory Access(EDMA) Controller Reference Guide[J].Application Note,2005,1(01):117-163.

        [9] TI.TMS320C620x/C670x DSP Program and Data Memory Controller/Direct Memory Access (DMA) Controller Reference Guide[J].Application Note,2004,1(01):11-37.

        [10] Stanford Hudson.Embedded Apps Need Boot-loaders Too[J].Embedded Edge,2002,3(02):20-26.

        [11] TI.TMS320C54x DSP Reference Set Volume 1:CPU and Peripherals[J].Application Note,1999,1(01):60-89.

        [12] TI.TMS320C54x DSP Reference Set,Volume 2:Mnemonic Instruction[J].Application Note,1998,2(01):45-116.

        [13] TI.TMS320C54x DSP Reference Set Volume 3:Algebraic Instruction Set[J].Application Note,1998,3(01):332-344.

        [14] TI.TMS320C54x DSP Reference Set Volume 4:Applications Guide[J].Application Note,1996,4(01):165-185.

        [15] TI.TMS320C54x DSP Reference Set Volume 5:Enhanced Peripherals[J].Application Note,1999,5(01):125-181.

        龔昌平(1972—),男,碩士,工程師,主要研究方向?yàn)樾畔踩c通信保密;

        譙通旭(1963—),男,學(xué)士,高級工程師,主要研究方向?yàn)槊艽a學(xué);

        張福健(1989—),男,碩士,工程師,主要研究方向?yàn)樾畔踩c通信保密。

        Bootloader in Embedded Application of Network Security

        GONG Chang-ping, QIAO Tong-xu, ZHANG Fu-jian
        (No.30 Institute of China Electronics Technology Group Corporation, Chengdu Sichuan 610041, China)

        The design and implementation of Bootloader is the first and most important step, in a embedded environment of network security, this directly influences program loading and running of the devices after power-on, and also affects boot time of the devices and thus the user's experiences. This article discusses some basic properties of Bootloader, describes in detail the Bootloader process via a simple example, and makes an elaborate interpretation of how to satisfy such application demands as field upgrade and IAP(In-Application Programming). All this could help the developer of network security embedded system, especially the beginner, deeply understand Bootloader.

        network security; embedded application; Bootloader; field upgrade; IAP

        TN918.1

        A

        1002-0802(2016)-10-1392-05

        10.3969/j.issn.1002-0802.2016.10.024

        2016-06-19;

        2016-09-24

        data:2016-06-19;Revised data:2016-09-24

        猜你喜歡
        堆棧扇區(qū)存儲器
        分階段調(diào)整增加扇區(qū)通行能力策略
        南北橋(2022年2期)2022-05-31 04:28:07
        靜態(tài)隨機(jī)存儲器在軌自檢算法
        嵌入式軟件堆棧溢出的動態(tài)檢測方案設(shè)計(jì)*
        U盤故障排除經(jīng)驗(yàn)談
        基于堆棧自編碼降維的武器裝備體系效能預(yù)測
        基于貝葉斯估計(jì)的短時(shí)空域扇區(qū)交通流量預(yù)測
        重建分區(qū)表與FAT32_DBR研究與實(shí)現(xiàn)
        存儲器——安格爾(墨西哥)▲
        基于Nand Flash的高速存儲器結(jié)構(gòu)設(shè)計(jì)
        一種用于分析MCS-51目標(biāo)碼堆棧深度的方法
        成人自拍一二在线观看| 一区二区三区四区在线观看日本| 日本久久伊人特级黄色| 无码人妻丰满熟妇啪啪网不卡| 国产熟妇另类久久久久| 日出水了特别黄的视频| 人人妻人人澡人人爽人人精品电影| 亚洲AV无码秘 蜜桃1区| 九九99无码精品视频在线观看| 欧美成人中文字幕| 无码人妻精品中文字幕免费| 亚洲精品在线一区二区三区| 偷拍一区二区三区四区视频| av永久天堂一区二区三区| 国产免费无码一区二区三区| 欧美亚洲国产另类在线观看| 亚洲AV专区一专区二专区三| 国产91久久精品成人看网站 | 黄片视频免费观看蜜桃| 国产欧美成人一区二区a片| 精品国产乱码久久久久久1区2区| 亚洲av鲁丝一区二区三区| 男人的天堂av网站一区二区| 蜜桃av噜噜一区二区三区免费 | 无码骚夜夜精品| 69av视频在线观看| AV无码专区亚洲AVL在线观看| 国产av无毛无遮挡网站| 黑人大群体交免费视频| 无码人妻av一二区二区三区| 国产成人精品日本亚洲18| 视频网站在线观看不卡| 成人国产一区二区三区av| 久久国产成人精品av| 亚洲精品一区久久久久久| 久久久精品久久波多野结衣av| 天天中文字幕av天天爽| 亚洲国产综合一区二区| 91国产精品自拍在线观看| 国产福利精品一区二区| 人与嘼av免费|