• <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)
    99精品久久久久人妻精品| 亚洲最大成人手机在线| 热99re8久久精品国产| 中文在线观看免费www的网站| 国产毛片a区久久久久| ponron亚洲| 少妇人妻一区二区三区视频| 欧美一区二区国产精品久久精品| 午夜精品在线福利| 最近最新中文字幕大全电影3| 99久久九九国产精品国产免费| 一区二区三区高清视频在线| 亚洲美女黄片视频| 国产伦精品一区二区三区视频9 | 在线观看一区二区三区| 亚洲乱码一区二区免费版| 欧美日本亚洲视频在线播放| 色在线成人网| 亚洲国产精品sss在线观看| 男人舔女人下体高潮全视频| 丰满的人妻完整版| 99精品欧美一区二区三区四区| 香蕉av资源在线| 九色成人免费人妻av| 亚洲精品国产精品久久久不卡| 天天添夜夜摸| 亚洲精品影视一区二区三区av| bbb黄色大片| 真实男女啪啪啪动态图| 亚洲人成网站在线播放欧美日韩| 听说在线观看完整版免费高清| xxx96com| 成人亚洲精品av一区二区| 国产精品爽爽va在线观看网站| 女生性感内裤真人,穿戴方法视频| 亚洲熟妇中文字幕五十中出| 观看美女的网站| 一个人免费在线观看电影| 国产黄色小视频在线观看| 69av精品久久久久久| 成年女人永久免费观看视频| 亚洲熟妇中文字幕五十中出| 国产一区二区亚洲精品在线观看| 嫩草影院精品99| 男女视频在线观看网站免费| 国产亚洲av嫩草精品影院| bbb黄色大片| 欧美另类亚洲清纯唯美| 国产成人a区在线观看| 亚洲午夜理论影院| h日本视频在线播放| 成年女人看的毛片在线观看| 亚洲国产精品999在线| 亚洲精品国产精品久久久不卡| 免费看十八禁软件| 午夜激情欧美在线| 99久久99久久久精品蜜桃| 精品电影一区二区在线| 90打野战视频偷拍视频| aaaaa片日本免费| 久久精品国产综合久久久| 久久久久亚洲av毛片大全| 淫秽高清视频在线观看| 99久久精品国产亚洲精品| 久久精品国产综合久久久| 女人高潮潮喷娇喘18禁视频| 舔av片在线| 日本撒尿小便嘘嘘汇集6| 国产亚洲精品av在线| 日本与韩国留学比较| 深爱激情五月婷婷| 国产成人欧美在线观看| 特级一级黄色大片| 中文字幕人成人乱码亚洲影| 欧美zozozo另类| 熟女少妇亚洲综合色aaa.| 国产黄片美女视频| www.色视频.com| 男人的好看免费观看在线视频| xxx96com| 成人av一区二区三区在线看| 琪琪午夜伦伦电影理论片6080| 国产成人av教育| 18+在线观看网站| 国产男靠女视频免费网站| 叶爱在线成人免费视频播放| 久久草成人影院| 欧美不卡视频在线免费观看| 久久久成人免费电影| 18禁裸乳无遮挡免费网站照片| 国产综合懂色| 夜夜看夜夜爽夜夜摸| 亚洲av免费在线观看| 日韩亚洲欧美综合| 中文字幕高清在线视频| 亚洲美女黄片视频| 免费搜索国产男女视频| 99久久成人亚洲精品观看| 国产精品久久久久久久电影 | 少妇的丰满在线观看| 欧美+日韩+精品| 国产真人三级小视频在线观看| 欧美zozozo另类| 亚洲第一电影网av| 亚洲 欧美 日韩 在线 免费| 床上黄色一级片| 中文字幕精品亚洲无线码一区| 精品久久久久久久人妻蜜臀av| 国产男靠女视频免费网站| 亚洲av第一区精品v没综合| 色av中文字幕| 在线观看免费视频日本深夜| 男女床上黄色一级片免费看| 18禁黄网站禁片午夜丰满| 久久精品国产综合久久久| 美女免费视频网站| 老鸭窝网址在线观看| 国产高清三级在线| 大型黄色视频在线免费观看| 香蕉丝袜av| 精品99又大又爽又粗少妇毛片 | 亚洲欧美日韩东京热| 18禁黄网站禁片免费观看直播| 老鸭窝网址在线观看| 国产色爽女视频免费观看| 日韩欧美 国产精品| 亚洲av日韩精品久久久久久密| 99热6这里只有精品| 欧美日韩国产亚洲二区| 亚洲精品成人久久久久久| 欧美成人a在线观看| 精品一区二区三区av网在线观看| 成人国产综合亚洲| 又黄又粗又硬又大视频| 午夜精品在线福利| 国产淫片久久久久久久久 | 久久久久久久精品吃奶| 日韩有码中文字幕| 99久久成人亚洲精品观看| 波野结衣二区三区在线 | 久久精品91无色码中文字幕| 国产单亲对白刺激| 久久精品国产综合久久久| 久久久久久九九精品二区国产| 丰满人妻一区二区三区视频av | 在线播放国产精品三级| 成人永久免费在线观看视频| 亚洲精品亚洲一区二区| 少妇的逼好多水| 18禁黄网站禁片午夜丰满| 亚洲电影在线观看av| 美女黄网站色视频| bbb黄色大片| 欧美精品啪啪一区二区三区| 97超视频在线观看视频| 无人区码免费观看不卡| 亚洲国产精品合色在线| 亚洲av美国av| 日本撒尿小便嘘嘘汇集6| 白带黄色成豆腐渣| 国产高清视频在线观看网站| 国产日本99.免费观看| 老司机在亚洲福利影院| 国产精品一区二区三区四区久久| 97超级碰碰碰精品色视频在线观看| 国产毛片a区久久久久| 欧美黑人欧美精品刺激| 日本黄色片子视频| 又紧又爽又黄一区二区| 麻豆国产97在线/欧美| 日本黄色片子视频| 在线天堂最新版资源| 色综合站精品国产| 成人亚洲精品av一区二区| 亚洲精品在线美女| 欧美一区二区亚洲| 制服人妻中文乱码| 男女午夜视频在线观看| 在线观看午夜福利视频| 亚洲av中文字字幕乱码综合| 午夜福利欧美成人| 国产精华一区二区三区| 亚洲无线观看免费| 精品国产美女av久久久久小说| 女警被强在线播放| 手机成人av网站| 免费高清视频大片| 欧美中文日本在线观看视频| 欧美三级亚洲精品| 国产伦人伦偷精品视频| 黑人欧美特级aaaaaa片| 日韩成人在线观看一区二区三区| 青草久久国产| 亚洲一区二区三区不卡视频| 国产精品,欧美在线| 国产成人av教育| 国产精品98久久久久久宅男小说| 欧美一区二区国产精品久久精品| 国产精品 欧美亚洲| 国产高清视频在线播放一区| 两个人视频免费观看高清| 国产成人av激情在线播放| 日韩欧美精品v在线| 毛片女人毛片| 无限看片的www在线观看| 午夜免费观看网址| 国产日本99.免费观看| 又紧又爽又黄一区二区| 国产精品女同一区二区软件 | 成人亚洲精品av一区二区| 1000部很黄的大片| 欧美在线一区亚洲| 色综合婷婷激情| 国产欧美日韩一区二区三| 免费在线观看亚洲国产| 久久香蕉精品热| 欧美一区二区亚洲| 国产色婷婷99| 国内揄拍国产精品人妻在线| 非洲黑人性xxxx精品又粗又长| 亚洲色图av天堂| 少妇的逼好多水| 99热这里只有精品一区| 嫩草影视91久久| 天天躁日日操中文字幕| 国产av麻豆久久久久久久| 久久这里只有精品中国| 欧美色欧美亚洲另类二区| 亚洲中文字幕日韩| 亚洲七黄色美女视频| 欧美一级a爱片免费观看看| 国产成人系列免费观看| 别揉我奶头~嗯~啊~动态视频| 亚洲欧美日韩东京热| 亚洲内射少妇av| 校园春色视频在线观看| 国产三级中文精品| a在线观看视频网站| 成人永久免费在线观看视频| 长腿黑丝高跟| 亚洲国产精品久久男人天堂| 亚洲av成人不卡在线观看播放网| 极品教师在线免费播放| 日本a在线网址| 欧美在线黄色| 在线观看美女被高潮喷水网站 | 91字幕亚洲| 国产精品久久久久久精品电影| 精品国产美女av久久久久小说| 性色avwww在线观看| 在线播放国产精品三级| 又紧又爽又黄一区二区| 岛国视频午夜一区免费看| 国产亚洲精品久久久com| 深夜精品福利| 草草在线视频免费看| 亚洲精品在线观看二区| 国产精品久久视频播放| 亚洲天堂国产精品一区在线| 每晚都被弄得嗷嗷叫到高潮| 国产私拍福利视频在线观看| 亚洲成人久久爱视频| 一本综合久久免费| 男女下面进入的视频免费午夜| 国模一区二区三区四区视频| 高潮久久久久久久久久久不卡| 国产爱豆传媒在线观看| 国内毛片毛片毛片毛片毛片| 特大巨黑吊av在线直播| 熟女电影av网| 色综合亚洲欧美另类图片| 一本久久中文字幕| 免费在线观看日本一区| 亚洲av成人不卡在线观看播放网| 一夜夜www| 国产精品 欧美亚洲| 午夜福利在线观看免费完整高清在 | 欧美激情在线99| 亚洲天堂国产精品一区在线| 久久久久久人人人人人| 嫩草影院精品99| 一卡2卡三卡四卡精品乱码亚洲| 久久国产精品影院| 国产黄a三级三级三级人| 亚洲欧美精品综合久久99| 少妇熟女aⅴ在线视频| 亚洲,欧美精品.| 久99久视频精品免费| 欧美日本视频| 激情在线观看视频在线高清| 国内精品一区二区在线观看| 日韩欧美精品v在线| 一个人观看的视频www高清免费观看| 国产在视频线在精品| 12—13女人毛片做爰片一| 久久久精品欧美日韩精品| 午夜福利成人在线免费观看| 一区二区三区激情视频| 久久久精品欧美日韩精品| 色综合欧美亚洲国产小说| 亚洲精品一卡2卡三卡4卡5卡| 男人舔奶头视频| 久久欧美精品欧美久久欧美| 性色av乱码一区二区三区2| 最新在线观看一区二区三区| h日本视频在线播放| 国产一区二区激情短视频| 午夜激情福利司机影院| 两性午夜刺激爽爽歪歪视频在线观看| 99热只有精品国产| 又爽又黄无遮挡网站| 亚洲最大成人中文| 黄色女人牲交| 久久久久久久精品吃奶| 啦啦啦韩国在线观看视频| 校园春色视频在线观看| 婷婷亚洲欧美| www.999成人在线观看| 午夜精品久久久久久毛片777| 国产在视频线在精品| 亚洲人成网站在线播| 亚洲人成网站在线播放欧美日韩| 色综合站精品国产| 中出人妻视频一区二区| 久久精品人妻少妇| 亚洲欧美日韩卡通动漫| 天堂影院成人在线观看| 精品一区二区三区视频在线观看免费| 色吧在线观看| 无人区码免费观看不卡| 亚洲最大成人中文| 日本精品一区二区三区蜜桃| 欧美色欧美亚洲另类二区| 九九在线视频观看精品| 九九热线精品视视频播放| 99热这里只有精品一区| 日韩欧美 国产精品| 精品免费久久久久久久清纯| 日本一本二区三区精品| av中文乱码字幕在线| 久久天躁狠狠躁夜夜2o2o| 精品久久久久久久人妻蜜臀av| 一区福利在线观看| 女警被强在线播放| 手机成人av网站| 久久精品综合一区二区三区| 国产精品亚洲av一区麻豆| 国产99白浆流出| 少妇裸体淫交视频免费看高清| 国产精品电影一区二区三区| 精品乱码久久久久久99久播| 欧美黄色淫秽网站| 久久精品91蜜桃| 久久精品91无色码中文字幕| 黄色日韩在线| 久久精品91无色码中文字幕| 在线观看免费视频日本深夜| 亚洲五月婷婷丁香| 不卡一级毛片| 一本一本综合久久| 12—13女人毛片做爰片一| 麻豆成人午夜福利视频| 国产爱豆传媒在线观看| 午夜激情欧美在线| 女人高潮潮喷娇喘18禁视频| 国产精品亚洲av一区麻豆| 精品久久久久久,| 成人鲁丝片一二三区免费| 久久人人精品亚洲av| 在线免费观看不下载黄p国产 | 国产成+人综合+亚洲专区| 欧美一区二区亚洲| 一个人看视频在线观看www免费 | 老汉色∧v一级毛片| 亚洲av免费高清在线观看| 日本黄大片高清| 成年人黄色毛片网站| 亚洲一区二区三区色噜噜| tocl精华| 国产一区二区三区视频了| 欧美色视频一区免费| 12—13女人毛片做爰片一| 可以在线观看的亚洲视频| 精品人妻偷拍中文字幕| 在线看三级毛片| 亚洲乱码一区二区免费版| 欧美中文日本在线观看视频| 少妇丰满av| 日本三级黄在线观看| 亚洲美女视频黄频| 一本精品99久久精品77| 欧美黑人欧美精品刺激| 丁香六月欧美| 天天添夜夜摸| 亚洲国产欧美网| ponron亚洲| 最近最新中文字幕大全电影3| 亚洲一区二区三区不卡视频| 在线观看66精品国产| 男女之事视频高清在线观看| 亚洲无线观看免费| 嫩草影院精品99| 男女那种视频在线观看| 久久欧美精品欧美久久欧美| 亚洲av第一区精品v没综合| 九色国产91popny在线| 精华霜和精华液先用哪个| 狂野欧美白嫩少妇大欣赏| 在线观看免费视频日本深夜| 精品免费久久久久久久清纯| 麻豆一二三区av精品| 高清日韩中文字幕在线| 老司机福利观看| 国内少妇人妻偷人精品xxx网站| 天天躁日日操中文字幕| 国产午夜精品论理片| 19禁男女啪啪无遮挡网站| 天堂影院成人在线观看| 欧美在线黄色| 97超级碰碰碰精品色视频在线观看| 国产午夜福利久久久久久| 99久久无色码亚洲精品果冻| 国产亚洲精品一区二区www| 99在线人妻在线中文字幕| 亚洲天堂国产精品一区在线| avwww免费| www国产在线视频色| av天堂在线播放| 午夜精品在线福利| 女同久久另类99精品国产91| 久久久久久久精品吃奶| netflix在线观看网站| 亚洲精品美女久久久久99蜜臀| 亚洲av电影在线进入| 又爽又黄无遮挡网站| 国内精品一区二区在线观看| 国产国拍精品亚洲av在线观看 | 99久久99久久久精品蜜桃| 99热只有精品国产| 老司机午夜福利在线观看视频| 99久久九九国产精品国产免费| 日本黄色视频三级网站网址| 欧美日韩乱码在线| 国内精品久久久久精免费| 丁香欧美五月| 国产亚洲精品久久久com| 看免费av毛片| 日韩欧美 国产精品| 午夜免费激情av| 国产黄片美女视频| 欧美日韩乱码在线| 国产亚洲精品av在线| 国产精品日韩av在线免费观看| 精品一区二区三区av网在线观看| 久久婷婷人人爽人人干人人爱| 久久精品国产99精品国产亚洲性色| 99国产极品粉嫩在线观看| 少妇的丰满在线观看| 国产蜜桃级精品一区二区三区| 日本一本二区三区精品| 久久久精品欧美日韩精品| 国内精品一区二区在线观看| 国产亚洲av嫩草精品影院| 成人国产一区最新在线观看| 欧美日韩亚洲国产一区二区在线观看| 深夜精品福利| 好看av亚洲va欧美ⅴa在| 99久久无色码亚洲精品果冻| 麻豆久久精品国产亚洲av| 亚洲成a人片在线一区二区| 久久精品夜夜夜夜夜久久蜜豆| 久久久久久久亚洲中文字幕 | 丝袜美腿在线中文| 国产一级毛片七仙女欲春2| 狂野欧美白嫩少妇大欣赏| 丁香欧美五月| 久久久久久久亚洲中文字幕 | 桃色一区二区三区在线观看| 亚洲片人在线观看| 精品国内亚洲2022精品成人| 香蕉丝袜av| 亚洲精品一卡2卡三卡4卡5卡| 亚洲欧美日韩高清专用| 国产午夜精品久久久久久一区二区三区 | 91在线观看av| 母亲3免费完整高清在线观看| 国产99白浆流出| 国产视频内射| 亚洲激情在线av| 成人欧美大片| 久久久久久久精品吃奶| 麻豆久久精品国产亚洲av| 色视频www国产| 亚洲片人在线观看| 丁香六月欧美| 亚洲av熟女| 国产极品精品免费视频能看的| 非洲黑人性xxxx精品又粗又长| 欧美bdsm另类| 亚洲欧美日韩高清在线视频| 观看美女的网站| 夜夜看夜夜爽夜夜摸| 国产日本99.免费观看| 久久99热这里只有精品18| 99久久精品一区二区三区| 亚洲七黄色美女视频| 动漫黄色视频在线观看| 日本撒尿小便嘘嘘汇集6| 国产蜜桃级精品一区二区三区| 国产激情偷乱视频一区二区| 日日干狠狠操夜夜爽| 欧美日韩黄片免| 成年免费大片在线观看| 久久久久久久久大av| 日韩欧美在线乱码| 中亚洲国语对白在线视频| 好男人电影高清在线观看| 国产精品久久电影中文字幕| 国产亚洲欧美在线一区二区| 亚洲av二区三区四区| 欧美日韩福利视频一区二区| 国产真人三级小视频在线观看| 国内精品久久久久精免费| 搡老妇女老女人老熟妇| 国产午夜福利久久久久久| 又爽又黄无遮挡网站| 美女高潮喷水抽搐中文字幕| 欧美乱色亚洲激情| 男人和女人高潮做爰伦理| 在线视频色国产色| 午夜精品一区二区三区免费看| 偷拍熟女少妇极品色| 夜夜看夜夜爽夜夜摸| 国产69精品久久久久777片| 亚洲,欧美精品.| 成人永久免费在线观看视频| 成年人黄色毛片网站| 国产成人系列免费观看| 免费观看精品视频网站| 丝袜美腿在线中文| 伊人久久大香线蕉亚洲五| 国产精品 欧美亚洲| a级毛片a级免费在线| av福利片在线观看| 国内精品久久久久久久电影| 欧美午夜高清在线| 国产伦一二天堂av在线观看| 美女cb高潮喷水在线观看| 国产真实伦视频高清在线观看 | 久久伊人香网站| 露出奶头的视频| 小说图片视频综合网站| 色视频www国产| 男女床上黄色一级片免费看| 欧美日韩瑟瑟在线播放| 国产精品美女特级片免费视频播放器| 国产精品av视频在线免费观看| 久久久久久久久中文| 午夜老司机福利剧场| 日本五十路高清| 黑人欧美特级aaaaaa片| 91在线精品国自产拍蜜月 | 精品午夜福利视频在线观看一区| 国产高清视频在线观看网站| 色老头精品视频在线观看| 在线观看日韩欧美| 久久99热这里只有精品18| 亚洲国产日韩欧美精品在线观看 | 男女午夜视频在线观看| 日本一本二区三区精品| 女人十人毛片免费观看3o分钟| 久久久久久九九精品二区国产| svipshipincom国产片| 一个人免费在线观看的高清视频| 国产视频一区二区在线看| 首页视频小说图片口味搜索| АⅤ资源中文在线天堂| 国产精品99久久99久久久不卡| 亚洲欧美激情综合另类| 五月玫瑰六月丁香| 老熟妇乱子伦视频在线观看| x7x7x7水蜜桃| 中文字幕人妻丝袜一区二区| 成年版毛片免费区| 国产视频内射| 国产av不卡久久| 国语自产精品视频在线第100页| 国产日本99.免费观看| 亚洲18禁久久av| 激情在线观看视频在线高清| 很黄的视频免费| 男女床上黄色一级片免费看| 免费无遮挡裸体视频| xxxwww97欧美| 一二三四社区在线视频社区8| 国产乱人伦免费视频| 国产亚洲欧美98| 99在线人妻在线中文字幕| 变态另类成人亚洲欧美熟女| 久久久国产成人精品二区| 国产国拍精品亚洲av在线观看 | 国产高清有码在线观看视频| 嫩草影视91久久| 亚洲人成网站高清观看| 99国产精品一区二区蜜桃av| 99国产极品粉嫩在线观看| 人妻丰满熟妇av一区二区三区| 嫩草影院入口| 久久国产乱子伦精品免费另类| 美女被艹到高潮喷水动态| 18禁裸乳无遮挡免费网站照片| www日本黄色视频网| 免费av观看视频| 真人一进一出gif抽搐免费| 草草在线视频免费看|