• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    利用HEX文件實現(xiàn)TMS320F28335的程序升級方法

    2017-07-31 21:57:23高世皓
    關(guān)鍵詞:用戶程序扇區(qū)字節(jié)

    高世皓

    (北京郵電大學(xué) 泛網(wǎng)無線通信教育部重點實驗室,北京 100876)

    利用HEX文件實現(xiàn)TMS320F28335的程序升級方法

    高世皓

    (北京郵電大學(xué) 泛網(wǎng)無線通信教育部重點實驗室,北京 100876)

    提出了一種通過發(fā)送HEX文件到TMS320F28335進(jìn)行程序升級的新方法。配置TMS320F28335為FLASH啟動模式,通過預(yù)燒寫升級程序到FLASH中,可實現(xiàn)在串口發(fā)送HEX文件升級用戶程序的功能。詳細(xì)介紹了該方法實現(xiàn)原理和開發(fā)過程,并且給出軟件流程圖和關(guān)鍵代碼。實驗證明,該方法操作方便,可靠性高,大大提高了效率。

    TMS320F28335;FLASH啟動;HEX文件;程序升級

    引 言

    伴隨著科技的進(jìn)步和用戶需求的不斷更新,在實際應(yīng)用中需要對已安裝的DSP設(shè)備進(jìn)行程序更新升級。在開發(fā)階段,更新程序的方法是采用CCS集成開發(fā)環(huán)境進(jìn)行編譯,然后通過仿真器連接設(shè)備進(jìn)行升級,但在實際復(fù)雜的工作環(huán)境中,取下設(shè)備連接仿真器會降低效率,而且有些情況下很難實現(xiàn),考慮到升級程序的需要,可以通過串口接收數(shù)據(jù)來實現(xiàn)程序的升級[1]。

    利用串口更新DSP程序的方法有很多,本文創(chuàng)新地提出使用HEX文件實現(xiàn)TMS320F28335升級程序的方法。當(dāng)DSP中已經(jīng)預(yù)燒寫了升級程序時,升級時只需PC機(jī)上具有用戶程序的HEX文件和串口調(diào)試助手即可完成程序的更新,不需要使用專業(yè)的CCS軟件和仿真器。

    1 方法介紹

    本方法是在TMS320F28335處于FLASH啟動模式下開發(fā)的,首先通過仿真器向DSP的FLASH扇區(qū)中燒寫升級程序,此程序不是用戶程序,當(dāng)需要升級程序時,將DSP復(fù)位后發(fā)送升級命令,此時DSP進(jìn)入升級狀態(tài),然后通過串口發(fā)送HEX文件到DSP,根據(jù)HEX文件內(nèi)容燒寫到相應(yīng)的FLASH扇區(qū)完成升級,之后DSP開始運行新的用戶程序。硬件由TMS320F28335最小系統(tǒng)板和USB轉(zhuǎn)TTL模塊組成,使用DSP的SCI-B進(jìn)行串口通信,引導(dǎo)模式設(shè)置為FLASH引導(dǎo),即GPIO84~GPIO87引腳狀態(tài)配置為高電平,硬件組成框圖如圖1所示。

    圖1 硬件組成框圖

    2 HEX文件格式解析

    HEX文件以行為單位,每一行為一條HEX記錄,HEX每行以冒號開頭,由一個回車和一個換行結(jié)束,內(nèi)容以十六進(jìn)制數(shù)的ASCII碼形式顯示,其格式如下[2]:

    “:”表示開始標(biāo)志;第1字節(jié)表示長度域,代表這條記錄中數(shù)據(jù)的字節(jié)數(shù);第2、3字節(jié)表示地址域,代表相對于基地址的偏移地址;第4字節(jié)表示類型域,0x00表示數(shù)據(jù)記錄,0x01表示結(jié)尾記錄,用來標(biāo)識文件結(jié)束,0x04表示擴(kuò)展線性地址記錄;第5字節(jié)——倒數(shù)第2字節(jié)為數(shù)據(jù)域,表示本記錄的數(shù)據(jù);最后1字節(jié)為校驗和,計算本記錄中除了冒號和校驗字節(jié)之外的所有字節(jié)累加和(不計進(jìn)位),校驗和=0x100-累加和。

    分析以下例子:

    :020000040031C9

    :048000000071865134

    :00000001FF

    第1條記錄長度是0x02,偏移量為0x0000,類型域為0x04,代表該記錄為擴(kuò)展線性地址記錄,數(shù)據(jù)為0x0031,校驗和為0xC9,從而可以計算基地址:0x0031 << 16 = 0x0031 0000,后面的數(shù)據(jù)都以此地址為基地址。

    第2條記錄長度為0x04,偏移量為0x8000,類型域為0x00,代表該記錄為數(shù)據(jù)記錄,數(shù)據(jù)為0071 8651,校驗和為0x34,此時基地址為0x0031 0000,加上偏移量0x8000便可計算出此記錄數(shù)據(jù)的起始地址為0x0031 8000。

    第3條記錄長度為0x00,偏移量為0x0000,類型域為0x01,代表該記錄為結(jié)尾記錄,表示文件的結(jié)尾。

    3 FLASH引導(dǎo)啟動流程

    系統(tǒng)開機(jī)時處于reset中斷,因此直接跳到中斷向量表中0x3F FFC0處的reset執(zhí)行,而這個地址下只放了一個指令,就是跳至初始化引導(dǎo)函數(shù)InitBoot,然后調(diào)用引導(dǎo)模式選擇函數(shù)SelectBootMode,用來檢測配置為輸入的GPIO84~GPIO87引腳的狀態(tài),從而確定為FLASH啟動,然后跳轉(zhuǎn)到入口地址0x33 FFF6,此地址下存放了程序最初執(zhí)行的第一條指令,通常是codestart,開始執(zhí)行應(yīng)用程序。

    4 軟件設(shè)計

    TMS320F28335片上有256×16位嵌入式FLASH存儲器,其由8個32 KB×16位扇區(qū)組成,用戶可對其中任意一個扇區(qū)擦除、編程和校驗,而其他扇區(qū)不變[3]。

    本方法在CCS5.5.0集成開發(fā)環(huán)境上開發(fā),最終體現(xiàn)在FLASH扇區(qū)上的是兩套程序:升級程序(用來實現(xiàn)串口通信接收HEX文件以及FLASH扇區(qū)的燒寫和驗證)和用戶程序(用來實現(xiàn)系統(tǒng)功能)。升級程序和用戶程序分別在兩個工程中設(shè)計,分別編譯,沒有直接聯(lián)系。本方法這樣分配FLASH空間:升級程序放置在FLASHG中,F(xiàn)LASH_API函數(shù)庫放置在FLASHH中,用戶代碼放置在FLASHE中,其他扇區(qū)作為備用盤,當(dāng)用戶程序量大時可擴(kuò)展使用,F(xiàn)LASH空間分配圖如圖2所示。

    圖2 FLASH空間分配圖

    4.1 升級程序設(shè)計

    4.1.1 升級程序鏈接命令文件update.cmd

    鏈接命令文件以后綴.cmd結(jié)尾,簡稱CMD文件,其作用就像倉庫的貨物擺放記錄一樣,為程序代碼和數(shù)據(jù)分配存儲空間[4]。update.cmd文件主要代碼為:

    SECTIONS{

    Flash28_API:{

    -lFlash28335_API_V210.lib(.econst)

    -lFlash28335_API_V210.lib(.text)

    } LOAD = FLASHH,

    RUN = RAML0,

    LOAD_START(_Flash28_API_LoadStart),

    LOAD_END(_Flash28_API_LoadEnd),

    RUN_START(_Flash28_API_RunStart),

    PAGE = 0

    .USER_CODE : > FLASHE PAGE = 0

    .cinit : > FLASHG PAGE = 0//升級程序

    .pinit : > FLASHG PAGE = 0//升級程序

    .text : > FLASHG PAGE = 0//升級程序

    codestart : > BEGIN PAGE = 0

    ramfuncs : LOAD = FLASHG,

    //接收HEX數(shù)據(jù)并處理的函數(shù)

    RUN = RAML0,

    LOAD_START(_RamfuncsLoadStart),

    LOAD_END(_RamfuncsLoadEnd),

    RUN_START(_RamfuncsRunStart),

    PAGE = 0

    .econst : > FLASHG PAGE = 0//bootloader

    .switch : > FLASHG PAGE = 0//bootloader

    ……

    }

    4.1.2 升級程序總體框架

    升級程序總體流程圖如圖3所示,升級流程如下:

    ① InitSysCtrl()函數(shù)關(guān)閉看門狗,分別對鎖相環(huán)PLL和外設(shè)時鐘初始化,然后InitScibGpio()函數(shù)配置GPIO22為SCITXDB、GPIO23為SCIRXDB,SCIBInit()對SCI-B初始化,之后InitPieCtrl()函數(shù)初始化PIE控制寄存器為默認(rèn)狀態(tài), InitPieVectTable()函數(shù)為PIE向量表中的所有中斷向量配置向量入口地址。

    ② IER = 0x0000為禁止CPU中斷,IFR=0x0000為清除所有CPU中斷標(biāo)志。

    ③ Ram_Init()、InitFlash()、FlashAPI_Init()分別對RAM、FLASH和FlashAPI初始化,由于不能在其中一個FLASH扇區(qū)上執(zhí)行程序來操作其他扇區(qū),所以使用memcpy函數(shù)將對Flash的操作代碼拷貝到RAM中運行,最后解鎖CSM。

    ④ 若在2 s內(nèi)發(fā)送升級指令“u”,則進(jìn)入UpdatePrj()函數(shù)進(jìn)行程序的升級,此時在串口調(diào)試助手中發(fā)送HEX文件即可完成FLASH中用戶程序的更新,升級完成后運行User_Main()函數(shù),升級程序中有以下段的定義:

    #pragma CODE_SECTION(User_Main,".USER_CODE");

    在升級程序CMD文件中,USER_CODE段被放置在FLASHE扇區(qū),也就是說升級完成后執(zhí)行FLASHE扇區(qū)上的程序,巧妙的是用戶程序恰好被放置在此扇區(qū)上,所以升級完成后執(zhí)行的便是新的用戶程序。

    ⑤ 若在2 s內(nèi)未收到升級指令,則直接執(zhí)行FLASHE扇區(qū)上的用戶程序。

    圖3 升級程序總體流程圖

    4.1.3 升級函數(shù)UpdatePrj()

    升級函數(shù)UpdatePrj()程序流程圖如圖4所示。

    圖4 升級函數(shù)UpdatePrj()程序流程圖

    程序升級時,首先調(diào)用API函數(shù)庫中的擦除函數(shù)Flash_Erase()擦除存放用戶程序的區(qū)域FLASHE,然后開始逐行讀取HEX文件,首行不同于其他行,因為在讀取首行時只需將前面的冒號讀取略掉,而其他行的十六進(jìn)制數(shù)據(jù)前除了有冒號外,還存在換行和回車符,所以要區(qū)分處理,當(dāng)讀取其他行時本方法采用不斷讀取判斷的方式,直到讀到的數(shù)據(jù)為冒號,這樣冒號的下一個十六進(jìn)制數(shù)就代表了本行中數(shù)據(jù)的開始。之后調(diào)用SCIRx_Data()函數(shù)接收本行數(shù)據(jù),SCIRx_Process()函數(shù)得到目的地址和數(shù)據(jù),program()函數(shù)燒寫數(shù)據(jù)到FLASH扇區(qū)。

    程序中定義結(jié)構(gòu)體ALLSCIRXD,并聲明變量SCIRXD,結(jié)構(gòu)體中的成員列表含義如表1所列,其中Uint16代表unsigned int,Uint32代表unsigned long。

    表1 ALLSCIRXD結(jié)構(gòu)體成員列表含義

    (1) SCIRx_Data()函數(shù)

    SCIRx_Data()函數(shù)程序流程圖如圖5所示。

    圖5 SCIRx_Data()函數(shù)程序流程圖

    此函數(shù)根據(jù)HEX文件的格式將某行記錄接收到數(shù)組SCIRXD.RcvData[50]中,首先接收前4個字節(jié)的數(shù)據(jù),然后可以根據(jù)第1個字節(jié)得到此行記錄的數(shù)據(jù)長度,之后再將剩余數(shù)據(jù)進(jìn)行接收,最后計算校驗和是否與最后1個字節(jié)一致。SCIRx_Data()函數(shù)代碼如下:

    void SCIRx_Data(void){

    Uint16 temp1,temp2,temp3,temp4;

    Uint16CheckSumValue;

    Uint16 Count = 0;

    SCIRXD.RecLength = 0;//初始化

    memset(SCIRXD.RcvData, 0, sizeof(Uint16) * 50);

    //數(shù)組RcvData清0

    while(ScibRegs.SCIRXST.bit.RXRDY !=1) { }

    for(Count=0; Count < 4; Count++){

    while(ScibRegs.SCIRXST.bit.RXRDY !=1) { }

    temp1 = (Uint16)ScibRegs.SCIRXBUF.bit.RXDT;

    //如果HEX文件中發(fā)送的是C,則接收到的字節(jié)temp1=67,

    //這為實際HEX記錄中一個字節(jié)的高位

    temp2 = ASCIIconvert(temp1);

    //將temp1=65通過函數(shù)ASCIIconvert轉(zhuǎn)換為temp2=0x0C

    while(ScibRegs.SCIRXST.bit.RXRDY != 1) { }

    temp3 = (Uint16)ScibRegs.SCIRXBUF.bit.RXDT;

    temp4 = ASCIIconvert(temp3);

    SCIRXD.RcvData[Count] = (temp2 << 4) | temp4;

    //接收一個字節(jié)的低位并轉(zhuǎn)換,例如轉(zhuǎn)換之后為0x09,和0x0c

    //合成為0xC9

    }

    SCIRXD.RecLength = SCIRXD.RcvData[0] + 5;

    //接收到的某一行的長度

    for(Count=4; Count < SCIRXD.RecLength; Count++){

    while(ScibRegs.SCIRXST.bit.RXRDY != 1) { }

    temp1 = (Uint16)ScibRegs.SCIRXBUF.bit.RXDT;

    temp2 = ASCIIconvert(temp1);

    while(ScibRegs.SCIRXST.bit.RXRDY != 1) { }

    temp3 = (Uint16)ScibRegs.SCIRXBUF.bit.RXDT;

    temp4 = ASCIIconvert(temp3);

    SCIRXD.RcvData[Count] = (temp2 << 4) | temp4;

    }

    if (Count == SCIRXD.RecLength)

    SCIRXD.RecOverFlag = 1;//接收一行完成

    else

    SCIRXD.RecOverFlag = 0;

    //以下計算校驗和是否等于最后一個字節(jié)

    CheckSumValue = CheckSum(SCIRXD.RcvData, SCIRXD.RecLength);

    if(CheckSumValue != SCIRXD.RcvData[SCIRXD.RecLength - 1])//校驗失敗

    RxValid = 0;

    else //校驗通過

    RxValid = 1;

    }

    Uint16ASCIIconvert(Uint16 temp){

    if(( temp >= 48 ) && (temp <= 57))//0~9

    temp = temp - 48;

    else if(temp >= 65 && ( temp <= 90 ))//A~Z

    temp = temp - 55;

    return temp;

    }

    (2) SCIRx_Process()函數(shù)

    SCIRx_Process()函數(shù)程序流程圖如圖6所示。

    圖6 SCIRx_Process()函數(shù)程序流程圖

    此函數(shù)根據(jù)本行記錄中的類型域分別執(zhí)行不同操作,類型域若為擴(kuò)展線性地址記錄,則計算基地址;若為數(shù)據(jù)記錄,則計算偏移地址進(jìn)而得到目的地址,并且將待存儲到FLASH中的數(shù)據(jù)放置于DataBuffer[50]數(shù)組中。SCIRx_Process()函數(shù)代碼如下:

    void SCIRx_Process(void){

    if(RxValid == 1){

    RxValid = 0;

    if (SCIRXD.RcvData[3] == 0x04){

    //擴(kuò)展線性地址記錄

    SCIRXD.DestAddrHigh = (SCIRXD.RcvData[4] << 8) | (SCIRXD.RcvData[5]);

    SCIRXD.DestAddrHigh = SCIRXD.DestAddrHigh << 16; //計算基地址

    }

    else if(SCIRXD.RcvData[3] == 0x00){ //數(shù)據(jù)記錄

    Uint16 i;

    SCIRXD.RawDataFlag = 1;

    //兩個字節(jié)合在一起發(fā)

    DataLength = SCIRXD.RcvData[0];//數(shù)據(jù)長度

    DataLength = DataLength / 2;

    //兩個數(shù)據(jù)字節(jié)合在一起存儲,數(shù)據(jù)長度減半

    SCIRXD.DestAddrLow = SCIRXD.RcvData[1] << 8|SCIRXD.RcvData[2];//偏移地址

    SCIRXD.DestAddr = SCIRXD.DestAddrHigh | (SCIRXD.DestAddrLow);

    //目的地址=基地址+偏移地址

    memset(DataBuffer, 0, sizeof(Uint16) * 50);

    //數(shù)據(jù)清0

    for(i = 0; i < DataLength; i++){

    DataBuffer[i] = SCIRXD.RcvData[2 * i + 4] <<8 | SCIRXD.RcvData[2 * i + 5];

    }

    }

    else if(SCIRXD.RcvData[3] == 0x01) //文件結(jié)尾記錄

    return;

    }

    }

    (3) program()函數(shù)

    調(diào)用API函數(shù)庫中編程函數(shù)Flash_Program(),將DataBuffer[50]數(shù)組中長度為DataLength的數(shù)據(jù)燒寫到FLASH中以SCIRXD.DestAddr為起始地址的區(qū)域中,然后使用Flash_Verify函數(shù)驗證燒寫的正確性[5],函數(shù)代碼如下:

    void program(void){//燒寫數(shù)據(jù)到FLASH

    Uint16 status;

    if(SCIRXD.RcvData[3] == 0x0000){//此行是數(shù)據(jù)

    status = Flash_Program((Uint16 *) SCIRXD.DestAddr, (Uint16 *)DataBuffer, DataLength, &FlashStatus);

    status = Flash_Verify((Uint16 *) SCIRXD.DestAddr, (Uint16 *)DataBuffer, DataLength, &FlashStatus);

    }

    }

    4.2 用戶程序設(shè)計

    用戶程序的設(shè)計主要包括CMD文件中程序段在FLASH扇區(qū)上的分配,目的是不與FLASH上的升級程序存放位置相沖突。用戶程序放置在FLASHE扇區(qū),如果后續(xù)用戶程序量大,可以將用戶程序擴(kuò)展存放至FLASHB~FLASHE。

    程序編寫完成后需要對用戶程序工程進(jìn)行以下設(shè)置:右擊工程→Properties→Build→Steps→Apply Predefined Step→Create flash image: Intel-HEX,使得編譯工程時自動生成HEX文件,以供升級時使用。

    4.2.1 用戶程序鏈接命令文件user.cmd

    user.cmd文件中將codestart段分配在FLASHE扇區(qū)的起始地址0x31 8000,長度為:0x00 0010,然后將用戶代碼放在FLASHE扇區(qū)剩余空間中,用戶程序FLASH空間分配圖如圖7所示。

    圖7 用戶程序FLASH空間分配圖

    對應(yīng)的主要cmd代碼為:

    MEMORY{

    PAGE 0: //程序空間

    ……

    FLASHH : origin = 0x300000, length = 0x008000

    FLASHG : origin = 0x308000, length = 0x008000

    FLASHF : origin = 0x310000, length = 0x008000

    FLASHE_BEGIN : origin = 0x318000, length = 0x000010/* codestart段*/

    FLASHE_USERCODE :origin = 0x318010, length = 0x007FF0

    FLASHD : origin =0x320000, length = 0x008000

    FLASHC : origin =0x328000, length = 0x008000

    FLASHA : origin = 0x338000, length = 0x007F80

    ……

    }

    SECTIONS{

    .cinit : > FLASHE_USERCODE PAGE = 0

    .pinit : > FLASHE_USERCODE PAGE = 0

    .text : > FLASHE_USERCODE PAGE = 0

    codestart : > FLASHE_BEGIN PAGE = 0

    ramfuncs : LOAD = FLASHE_USERCODE,

    RUN = RAML0,

    LOAD_START(_RamfuncsLoadStart),

    LOAD_END(_RamfuncsLoadEnd),

    RUN_START(_RamfuncsRunStart),

    LOAD_SIZE(_RamfuncsLoadSize),

    PAGE = 0

    .econst : > FLASHE_USERCODE PAGE = 0

    .switch : > FLASHE_USERCODE PAGE = 0

    ……

    }

    4.2.2 user.hex文件

    將用戶程序設(shè)計為每隔1 s向串口打印“USER CODE!”,然后編譯生成user. hex文件。打開此文件可以看到所有數(shù)據(jù)都被分配到以0x0031 8000為起始地址下(即FLASHE扇區(qū)),user. hex文件部分內(nèi)容如圖8所示。

    圖8 user. hex文件部分內(nèi)容

    5 實驗驗證

    以TMS320F28335最小系統(tǒng)板為測試平臺,通過SEED XDS510PLUS型號仿真器連接開發(fā)板與PC機(jī),然后將開發(fā)板上電,升級程序的User_Main()函數(shù)設(shè)計為每隔1 s向串口打印“boot code!”,使用CCS5.5.0編譯升級程序,接著將程序通過仿真器燒寫到FLASH中,此時可以在串口上看到不斷打印出來的“boot code!”。將開發(fā)板斷電,仿真器斷開,然后通過USB轉(zhuǎn)TTL模塊連接PC機(jī)與開發(fā)板的串行通信接口SCI-B,模塊的RXD與SCITXDB相接,TXD與SCIRXDB相接,在PC機(jī)上打開串口調(diào)試助手,然后打開相應(yīng)串口,設(shè)置波特率為9 600 bps,8位數(shù)據(jù)位,無校驗位,1個停止位。

    再次給開發(fā)板上電,2 s內(nèi)在串口調(diào)試助手中向開發(fā)板發(fā)送升級命令“u”,此時進(jìn)入升級狀態(tài),芯片等待串口調(diào)試程序發(fā)送HEX文件,之后選擇發(fā)送user.hex,此時便將用戶程序燒寫到FLASHE扇區(qū)中,升級完成后從FLASHE起始地址開始運行,即從用戶程序的codestart執(zhí)行,進(jìn)而執(zhí)行用戶程序,可以看到在串口調(diào)試助手上每隔1 s打印出“user code!”。

    結(jié) 語

    [1] 羅秋鳳,葉慧,李勇,等.DSP28335嵌入式系統(tǒng)的SCI在線編程方法實現(xiàn)[J].河北科技大學(xué)學(xué)報,2013(4):318-324.

    [2] 徐魯花,董小衛(wèi),張浩,等.嵌入式開發(fā)系統(tǒng)編程文件格式解析[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2011(12):4-7.

    [3] 張卿杰,徐友,左楠,等.手把手教你學(xué)DSP:基于TMS320F28335[M].北京:北京航空航天大學(xué)出版社,2015:61-67.

    [4] 顧衛(wèi)鋼.手把手教你學(xué)DSP:基于TMS320X281x[M].北京:北京航空航天大學(xué)出版社,2011:135-144.

    [5] 陶維青,任謙.通過串口通訊實現(xiàn)TMS320F2812的軟件更新[J].合肥工業(yè)大學(xué)學(xué)報:自然科學(xué)版,2008(4):569-572.

    [6] 金鑫,史浩山,謝福平.通過無線串口實現(xiàn)TMS320F2812程序更新[J].微型電腦應(yīng)用,2011(11):44-46,69.

    [7] 李靜,張樹團(tuán).TMS320F2812片內(nèi)Flash在線燒寫技術(shù)研究[J].國外電子元器件,2008(10):37-38,40.

    高世皓(碩士研究生),主要研究領(lǐng)域為物聯(lián)網(wǎng)、嵌入式系統(tǒng)開發(fā)。

    Software Updating Method of TMS320F28335 Using HEX File

    Gao Shihao

    (Key Laboratory of Universal Wireless Communications,Ministry of Education,Beijing University of Posts and Telecommunications,Beijing 100876,China)

    In the paper,a new method of FLASH updating by transmitting HEX file to TMS320F28335 is proposed.To realize the function of updating the application program by sending HEX file to the TMS320F28335,it is configured as a FLASH boot mode and the program used for updating is downloaded into the FLASH.The implementation principle and the development process of this method are introduced,and the software flowchart and the critical code are given.The experiment results indicate that the new method is simple to operate and has high reliability,so this method improves the working efficiency.

    TMS320F28335;FLASH boot;HEX file;software update

    TP311.52

    A

    ?士然

    2017-02-27)

    猜你喜歡
    用戶程序扇區(qū)字節(jié)
    分階段調(diào)整增加扇區(qū)通行能力策略
    南北橋(2022年2期)2022-05-31 04:28:07
    No.8 字節(jié)跳動將推出獨立出口電商APP
    變速箱控制系統(tǒng)Bootloader設(shè)計與實現(xiàn)
    No.10 “字節(jié)跳動手機(jī)”要來了?
    嵌入式設(shè)備遠(yuǎn)程升級方案設(shè)計
    U盤故障排除經(jīng)驗談
    簡談MC7字節(jié)碼
    基于貝葉斯估計的短時空域扇區(qū)交通流量預(yù)測
    重建分區(qū)表與FAT32_DBR研究與實現(xiàn)
    C8051F410單片機(jī)BootLoader的實現(xiàn)
    精品国产亚洲在线| 美女黄网站色视频| 国产高清有码在线观看视频| 一级黄片播放器| 制服人妻中文乱码| 色老头精品视频在线观看| 欧美一区二区精品小视频在线| 18禁国产床啪视频网站| 午夜福利在线观看吧| 美女高潮的动态| 小蜜桃在线观看免费完整版高清| 欧美日韩综合久久久久久 | 国产视频内射| 欧美一级a爱片免费观看看| av福利片在线观看| 国产精品影院久久| 国产三级黄色录像| 亚洲成人久久爱视频| 最近最新中文字幕大全电影3| 少妇高潮的动态图| 中文字幕人成人乱码亚洲影| 免费大片18禁| 亚洲第一欧美日韩一区二区三区| 欧美乱色亚洲激情| 村上凉子中文字幕在线| 国内毛片毛片毛片毛片毛片| 久久精品国产99精品国产亚洲性色| 亚洲中文日韩欧美视频| 嫩草影视91久久| 99在线人妻在线中文字幕| 国产成人影院久久av| 欧洲精品卡2卡3卡4卡5卡区| 国产黄片美女视频| 男女做爰动态图高潮gif福利片| 亚洲av第一区精品v没综合| 桃色一区二区三区在线观看| 久久精品国产综合久久久| 国产爱豆传媒在线观看| 国产精品三级大全| 非洲黑人性xxxx精品又粗又长| 国产精品野战在线观看| 好男人电影高清在线观看| 久久精品国产清高在天天线| 午夜免费激情av| 国内久久婷婷六月综合欲色啪| 国产精品一区二区三区四区免费观看 | 大型黄色视频在线免费观看| 亚洲av电影在线进入| 亚洲成人久久爱视频| 丁香六月欧美| 国产三级中文精品| 亚洲性夜色夜夜综合| av在线蜜桃| 亚洲美女视频黄频| 最近最新免费中文字幕在线| 国产精品 欧美亚洲| 国产精品一区二区三区四区免费观看 | 日本一二三区视频观看| 精品一区二区三区av网在线观看| av在线蜜桃| 久久精品影院6| 精品欧美国产一区二区三| 日本一本二区三区精品| 1000部很黄的大片| 变态另类丝袜制服| 国产麻豆成人av免费视频| 成人一区二区视频在线观看| 一区二区三区高清视频在线| 有码 亚洲区| 精品熟女少妇八av免费久了| 久久久久久国产a免费观看| 亚洲欧美日韩卡通动漫| 亚洲久久久久久中文字幕| 欧美不卡视频在线免费观看| 久久99热这里只有精品18| 一区二区三区免费毛片| 天堂网av新在线| 亚洲中文字幕一区二区三区有码在线看| 免费电影在线观看免费观看| 国产精品嫩草影院av在线观看 | 在线观看午夜福利视频| 男女那种视频在线观看| av在线蜜桃| 麻豆国产97在线/欧美| 在线观看免费午夜福利视频| 国产激情偷乱视频一区二区| 亚洲真实伦在线观看| 亚洲av电影在线进入| 两人在一起打扑克的视频| 搡老熟女国产l中国老女人| 色在线成人网| 亚洲欧美一区二区三区黑人| 日本在线视频免费播放| 国内精品美女久久久久久| 亚洲精品美女久久久久99蜜臀| 精品欧美国产一区二区三| 窝窝影院91人妻| 国产爱豆传媒在线观看| 天美传媒精品一区二区| 国产精品 欧美亚洲| 午夜两性在线视频| 琪琪午夜伦伦电影理论片6080| 狂野欧美白嫩少妇大欣赏| 午夜视频国产福利| 国产午夜精品久久久久久一区二区三区 | 成人av在线播放网站| 免费一级毛片在线播放高清视频| 亚洲美女黄片视频| 亚洲aⅴ乱码一区二区在线播放| 欧美中文综合在线视频| 成人特级黄色片久久久久久久| 99精品欧美一区二区三区四区| 精品欧美国产一区二区三| 免费一级毛片在线播放高清视频| 91av网一区二区| 99久久无色码亚洲精品果冻| 亚洲欧美日韩高清在线视频| 精品人妻1区二区| 超碰av人人做人人爽久久 | 欧美又色又爽又黄视频| 狠狠狠狠99中文字幕| 国产精品久久电影中文字幕| 老汉色∧v一级毛片| 琪琪午夜伦伦电影理论片6080| 色视频www国产| 在线十欧美十亚洲十日本专区| 日韩 欧美 亚洲 中文字幕| 18美女黄网站色大片免费观看| 两个人看的免费小视频| 91字幕亚洲| 亚洲av一区综合| 欧美极品一区二区三区四区| 999久久久精品免费观看国产| 亚洲国产欧美人成| 色av中文字幕| 1000部很黄的大片| 91在线精品国自产拍蜜月 | 国产一区二区亚洲精品在线观看| 亚洲欧美精品综合久久99| 国产精品98久久久久久宅男小说| 哪里可以看免费的av片| www国产在线视频色| 老熟妇乱子伦视频在线观看| 变态另类丝袜制服| 色综合欧美亚洲国产小说| 国产精品99久久99久久久不卡| 免费电影在线观看免费观看| 成年免费大片在线观看| 日本成人三级电影网站| 亚洲狠狠婷婷综合久久图片| 久久伊人香网站| 国产一级毛片七仙女欲春2| 国产一区二区亚洲精品在线观看| 国产成人aa在线观看| 真实男女啪啪啪动态图| 观看免费一级毛片| 亚洲av电影在线进入| 久久午夜亚洲精品久久| 亚洲男人的天堂狠狠| netflix在线观看网站| 麻豆久久精品国产亚洲av| 国产不卡一卡二| 听说在线观看完整版免费高清| 男插女下体视频免费在线播放| 无人区码免费观看不卡| 天堂网av新在线| 老司机深夜福利视频在线观看| 99视频精品全部免费 在线| 啦啦啦免费观看视频1| 听说在线观看完整版免费高清| 无人区码免费观看不卡| 亚洲中文日韩欧美视频| 亚洲精品亚洲一区二区| 亚洲熟妇熟女久久| 久久性视频一级片| 免费在线观看亚洲国产| 99热精品在线国产| 国产亚洲精品久久久久久毛片| 深夜精品福利| 国模一区二区三区四区视频| 国产高清三级在线| 国产99白浆流出| 丁香欧美五月| 日韩欧美三级三区| 国产欧美日韩一区二区精品| 蜜桃亚洲精品一区二区三区| 成人欧美大片| 国产毛片a区久久久久| 高清日韩中文字幕在线| 成人av在线播放网站| 久久久精品大字幕| 在线观看舔阴道视频| 91久久精品电影网| 美女高潮喷水抽搐中文字幕| 午夜精品久久久久久毛片777| 久久久久久久久中文| 亚洲成人精品中文字幕电影| 色播亚洲综合网| 中出人妻视频一区二区| 日韩大尺度精品在线看网址| 久久精品人妻少妇| 我要搜黄色片| 性色avwww在线观看| 熟女人妻精品中文字幕| 国产 一区 欧美 日韩| 日本成人三级电影网站| 午夜福利欧美成人| 亚洲av电影在线进入| 久久久色成人| 狂野欧美白嫩少妇大欣赏| 精品久久久久久久久久免费视频| 日本成人三级电影网站| 免费av毛片视频| 色精品久久人妻99蜜桃| 内地一区二区视频在线| 国产午夜精品论理片| 男女午夜视频在线观看| 欧美午夜高清在线| 天堂√8在线中文| 欧美性猛交╳xxx乱大交人| 91久久精品国产一区二区成人 | 欧美日韩中文字幕国产精品一区二区三区| 中文字幕熟女人妻在线| 观看美女的网站| aaaaa片日本免费| 看片在线看免费视频| 国产高潮美女av| 久久久久久久久久黄片| 一进一出抽搐动态| 久久久久免费精品人妻一区二区| 色在线成人网| 91在线精品国自产拍蜜月 | 国产午夜精品久久久久久一区二区三区 | 国产一级毛片七仙女欲春2| 国产欧美日韩一区二区三| 亚洲黑人精品在线| 级片在线观看| 三级国产精品欧美在线观看| 国产三级黄色录像| 国产精品亚洲av一区麻豆| 91九色精品人成在线观看| 国产三级中文精品| 69av精品久久久久久| 可以在线观看毛片的网站| 欧美bdsm另类| 国产精品亚洲av一区麻豆| 日本黄大片高清| av视频在线观看入口| 国产精品野战在线观看| 深夜精品福利| 亚洲天堂国产精品一区在线| av欧美777| 国产美女午夜福利| 国产午夜福利久久久久久| 91在线精品国自产拍蜜月 | av视频在线观看入口| 99久久精品一区二区三区| 亚洲片人在线观看| 首页视频小说图片口味搜索| 欧美日韩黄片免| 亚洲av熟女| 亚洲中文日韩欧美视频| 中文字幕人妻丝袜一区二区| 中文字幕人妻熟人妻熟丝袜美 | 色尼玛亚洲综合影院| 婷婷精品国产亚洲av在线| 男人的好看免费观看在线视频| 国产成+人综合+亚洲专区| 五月玫瑰六月丁香| 亚洲不卡免费看| 欧美日本亚洲视频在线播放| 给我免费播放毛片高清在线观看| av福利片在线观看| 91久久精品国产一区二区成人 | 高清日韩中文字幕在线| 欧美极品一区二区三区四区| 亚洲自拍偷在线| 久久久国产成人免费| 精品福利观看| 两个人视频免费观看高清| 波多野结衣巨乳人妻| 免费电影在线观看免费观看| 在线播放国产精品三级| 国产主播在线观看一区二区| 人妻久久中文字幕网| 波多野结衣高清无吗| 成年人黄色毛片网站| 白带黄色成豆腐渣| а√天堂www在线а√下载| 亚洲av中文字字幕乱码综合| 长腿黑丝高跟| 精品久久久久久久久久免费视频| 久久精品夜夜夜夜夜久久蜜豆| 日本撒尿小便嘘嘘汇集6| 国产极品精品免费视频能看的| 欧美zozozo另类| 亚洲中文日韩欧美视频| 久久精品综合一区二区三区| 国产av麻豆久久久久久久| 免费av毛片视频| 人妻久久中文字幕网| 久久久久亚洲av毛片大全| 久久久色成人| 午夜福利在线观看免费完整高清在 | 香蕉丝袜av| 免费观看精品视频网站| 亚洲精品美女久久久久99蜜臀| 久久伊人香网站| av天堂在线播放| 麻豆国产av国片精品| av女优亚洲男人天堂| 女同久久另类99精品国产91| 日本 欧美在线| 日本熟妇午夜| 久久久精品欧美日韩精品| 人妻丰满熟妇av一区二区三区| 国内揄拍国产精品人妻在线| 成人亚洲精品av一区二区| av天堂在线播放| 久久久色成人| 麻豆久久精品国产亚洲av| a在线观看视频网站| 欧美日韩精品网址| 日韩av在线大香蕉| 老司机在亚洲福利影院| 最近最新中文字幕大全免费视频| 国产免费男女视频| 听说在线观看完整版免费高清| 国产高清三级在线| 黄片小视频在线播放| 精品99又大又爽又粗少妇毛片 | 精品一区二区三区视频在线观看免费| 亚洲精品久久国产高清桃花| 老司机在亚洲福利影院| 国产高清有码在线观看视频| 亚洲国产精品合色在线| 少妇裸体淫交视频免费看高清| 窝窝影院91人妻| 日韩欧美三级三区| 久久久精品大字幕| 国产av不卡久久| 国产成人av激情在线播放| 黄片小视频在线播放| 99久久成人亚洲精品观看| 亚洲成人中文字幕在线播放| 亚洲欧美激情综合另类| 欧美又色又爽又黄视频| xxxwww97欧美| 日韩欧美精品v在线| 99久久精品国产亚洲精品| 国产爱豆传媒在线观看| 午夜激情欧美在线| 日韩欧美国产一区二区入口| 亚洲欧美激情综合另类| 人人妻人人澡欧美一区二区| 首页视频小说图片口味搜索| 丁香欧美五月| 亚洲欧美精品综合久久99| 欧美av亚洲av综合av国产av| 亚洲成人久久爱视频| 一区二区三区高清视频在线| 黄色片一级片一级黄色片| 日本免费一区二区三区高清不卡| 欧美日韩福利视频一区二区| 91字幕亚洲| 欧美日韩一级在线毛片| 欧美+亚洲+日韩+国产| 黄色片一级片一级黄色片| 在线观看av片永久免费下载| 黄色片一级片一级黄色片| 午夜福利高清视频| 很黄的视频免费| 欧美又色又爽又黄视频| 国产精品亚洲av一区麻豆| 久久国产乱子伦精品免费另类| av片东京热男人的天堂| 少妇人妻一区二区三区视频| 校园春色视频在线观看| 婷婷六月久久综合丁香| 亚洲第一电影网av| 亚洲,欧美精品.| 国产精品一区二区免费欧美| 变态另类丝袜制服| 日韩欧美在线乱码| 一个人免费在线观看电影| 国产伦一二天堂av在线观看| 天美传媒精品一区二区| 白带黄色成豆腐渣| 俺也久久电影网| 欧美三级亚洲精品| 在线观看日韩欧美| 欧美又色又爽又黄视频| 老司机午夜福利在线观看视频| 久久人人精品亚洲av| 两人在一起打扑克的视频| 99国产极品粉嫩在线观看| 日本撒尿小便嘘嘘汇集6| 午夜福利在线在线| 成人鲁丝片一二三区免费| 美女大奶头视频| 婷婷丁香在线五月| 精品国产三级普通话版| 久久国产精品人妻蜜桃| 国产国拍精品亚洲av在线观看 | 日本 av在线| 国产精品永久免费网站| 在线免费观看的www视频| 天堂网av新在线| 亚洲内射少妇av| 午夜视频国产福利| 免费观看人在逋| 国产精品乱码一区二三区的特点| 亚洲精品影视一区二区三区av| 在线观看66精品国产| 久久精品91无色码中文字幕| 在线天堂最新版资源| 男人和女人高潮做爰伦理| 人妻夜夜爽99麻豆av| 一进一出抽搐动态| 日韩成人在线观看一区二区三区| 蜜桃久久精品国产亚洲av| 一进一出好大好爽视频| 精品国内亚洲2022精品成人| or卡值多少钱| 欧美日韩瑟瑟在线播放| 免费看十八禁软件| 亚洲中文字幕一区二区三区有码在线看| 最近在线观看免费完整版| 国产高清视频在线播放一区| 97超级碰碰碰精品色视频在线观看| 亚洲美女黄片视频| 亚洲不卡免费看| 国产精品免费一区二区三区在线| 国产欧美日韩精品一区二区| 我要搜黄色片| 黄色日韩在线| 欧美乱妇无乱码| 在线观看av片永久免费下载| 久久久国产成人精品二区| 最新中文字幕久久久久| 国产在线精品亚洲第一网站| 成年女人永久免费观看视频| 韩国av一区二区三区四区| 欧美成人性av电影在线观看| 久久香蕉精品热| 男人和女人高潮做爰伦理| 国产乱人视频| www国产在线视频色| 搡女人真爽免费视频火全软件 | 亚洲精品成人久久久久久| 久久伊人香网站| 深夜精品福利| 免费av观看视频| or卡值多少钱| 老熟妇乱子伦视频在线观看| 午夜精品在线福利| 国产精品影院久久| 99热这里只有精品一区| 制服丝袜大香蕉在线| 欧美成狂野欧美在线观看| 国产精品1区2区在线观看.| 国产精品爽爽va在线观看网站| 亚洲av成人精品一区久久| 九九久久精品国产亚洲av麻豆| 久久草成人影院| 国产精品久久久久久亚洲av鲁大| 欧美日韩福利视频一区二区| 国产精品国产高清国产av| 十八禁网站免费在线| 夜夜夜夜夜久久久久| 国产精品98久久久久久宅男小说| 草草在线视频免费看| 99riav亚洲国产免费| 啦啦啦观看免费观看视频高清| 国产男靠女视频免费网站| 在线观看美女被高潮喷水网站 | 国产真人三级小视频在线观看| 中亚洲国语对白在线视频| 日本熟妇午夜| 在线观看美女被高潮喷水网站 | 婷婷六月久久综合丁香| 久久草成人影院| av中文乱码字幕在线| 麻豆成人午夜福利视频| 精品不卡国产一区二区三区| 久久6这里有精品| 日本熟妇午夜| 午夜福利免费观看在线| 美女被艹到高潮喷水动态| 老汉色av国产亚洲站长工具| 国产又黄又爽又无遮挡在线| 亚洲国产精品sss在线观看| 亚洲成a人片在线一区二区| 亚洲真实伦在线观看| 一级作爱视频免费观看| 精品国产亚洲在线| 国产精品嫩草影院av在线观看 | 国产伦一二天堂av在线观看| 日韩欧美精品免费久久 | 淫秽高清视频在线观看| 精品福利观看| 99精品久久久久人妻精品| 91av网一区二区| 男女那种视频在线观看| 亚洲av电影在线进入| 国产黄片美女视频| bbb黄色大片| 最新中文字幕久久久久| 美女被艹到高潮喷水动态| 狠狠狠狠99中文字幕| 999久久久精品免费观看国产| 成年免费大片在线观看| 丰满人妻一区二区三区视频av | 99精品欧美一区二区三区四区| 国产熟女xx| 最后的刺客免费高清国语| 此物有八面人人有两片| 蜜桃久久精品国产亚洲av| 床上黄色一级片| 欧美日韩瑟瑟在线播放| 午夜精品久久久久久毛片777| 一级a爱片免费观看的视频| 最近最新中文字幕大全电影3| 亚洲性夜色夜夜综合| 国产老妇女一区| 久久久久性生活片| 丰满的人妻完整版| 91在线观看av| 午夜免费激情av| 欧美日本亚洲视频在线播放| 久久国产精品人妻蜜桃| 十八禁网站免费在线| 啦啦啦韩国在线观看视频| 久久久久久国产a免费观看| 中文字幕高清在线视频| АⅤ资源中文在线天堂| 国内精品久久久久精免费| 五月玫瑰六月丁香| 99热精品在线国产| 成年女人永久免费观看视频| 在线观看舔阴道视频| 日本a在线网址| 国产亚洲精品一区二区www| 90打野战视频偷拍视频| 精品久久久久久久人妻蜜臀av| 哪里可以看免费的av片| 可以在线观看毛片的网站| 九九热线精品视视频播放| 国产探花在线观看一区二区| 婷婷六月久久综合丁香| 国产97色在线日韩免费| 麻豆久久精品国产亚洲av| 欧美黑人巨大hd| 欧美乱色亚洲激情| 女生性感内裤真人,穿戴方法视频| 高清在线国产一区| 亚洲精品日韩av片在线观看 | 少妇的丰满在线观看| 每晚都被弄得嗷嗷叫到高潮| 亚洲五月天丁香| 国产精品乱码一区二三区的特点| 亚洲av电影在线进入| 老司机深夜福利视频在线观看| 一个人观看的视频www高清免费观看| 国产老妇女一区| 欧美色视频一区免费| 伊人久久大香线蕉亚洲五| 国产单亲对白刺激| 黄色女人牲交| 午夜精品一区二区三区免费看| 亚洲无线在线观看| 天天一区二区日本电影三级| 免费看十八禁软件| 国产高清视频在线播放一区| 桃色一区二区三区在线观看| 国产精品香港三级国产av潘金莲| 亚洲精品乱码久久久v下载方式 | 亚洲在线自拍视频| 久久久久久大精品| 搞女人的毛片| 天天躁日日操中文字幕| 亚洲国产高清在线一区二区三| 久99久视频精品免费| 日韩欧美 国产精品| 国产成人影院久久av| 久久久久国产精品人妻aⅴ院| 成年女人看的毛片在线观看| 少妇的逼水好多| АⅤ资源中文在线天堂| 国产高清videossex| 男人舔女人下体高潮全视频| 日本黄色片子视频| 亚洲精品亚洲一区二区| 成人av在线播放网站| 国产爱豆传媒在线观看| 国产精品美女特级片免费视频播放器| 午夜福利在线在线| 亚洲av不卡在线观看| 热99在线观看视频| 人妻丰满熟妇av一区二区三区| 亚洲性夜色夜夜综合| 黄色日韩在线| 国产成人aa在线观看| 久久精品夜夜夜夜夜久久蜜豆| 精品国内亚洲2022精品成人| 两个人视频免费观看高清| 国产免费一级a男人的天堂| 欧美中文日本在线观看视频| 久久精品国产清高在天天线| 亚洲午夜理论影院| 在线观看午夜福利视频| 久久欧美精品欧美久久欧美| 日本在线视频免费播放| 国产精品爽爽va在线观看网站| 网址你懂的国产日韩在线|