在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<s id="cmphk"><label id="cmphk"></label></s>
    <span id="cmphk"><var id="cmphk"></var></span>
    <dfn id="cmphk"><var id="cmphk"></var></dfn>
    <menu id="cmphk"><thead id="cmphk"></thead></menu>

    <address id="cmphk"></address>

      <dfn id="cmphk"></dfn>
      
      
      <span id="cmphk"></span>

      <object id="cmphk"><tt id="cmphk"></tt></object>
      1. 新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LPC1100處理器通過(guò)SD卡實(shí)現(xiàn)IAP功能

        LPC1100處理器通過(guò)SD卡實(shí)現(xiàn)IAP功能

        作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏

        代碼:

        本文引用地址:http://www.biyoush.com/article/201611/322352.htm


        uint32 BlankChk(uint8 sec1, uint8 sec2)
        {
        ParamIn[0] = IAP_BLANKCHK;
        ParamIn[1] = sec1;
        ParamIn[2] = sec2;
        (*IAP_Entry)(ParamIn, ParamOut);

        return (ParamOut[0]);
        }

        5.比較<地址1><地址2><字節(jié)數(shù)>

        代碼:


        uint32 DataCompare(uint32 dst, uint32 src, uint32 no)
        {
        ParamIn[0] = IAP_COMPARE;
        ParamIn[1] = dst;
        ParamIn[2] = src;
        ParamIn[3] = no;
        (*IAP_Entry)(ParamIn, ParamOut);

        return (ParamOut[0]);
        }

        有上面的幾個(gè)函數(shù)后,下面就可以根據(jù)需要編寫(xiě)SD卡升級(jí)函數(shù)了:

        1.定義用戶程序地址

        定義用戶程序的起始地址,用戶可以根據(jù)自己的實(shí)際情況設(shè)定,一般都從0x0000 0000開(kāi)始存放IAP代碼,之后的空間才是存放用戶代碼的。

        代碼:

        #define APP_CODE_START_ADDR0x00006000// 用戶程序起始地址

        2.從SD卡中讀寫(xiě)bin文件更新升級(jí)

        從SD卡中升級(jí)程序很簡(jiǎn)單。流程是:從SD卡中打開(kāi)升級(jí)文件,每次讀取512字節(jié),然后寫(xiě)入Flash,直到編寫(xiě)完成。

        IAP支持256/512/1024/2048/4096等多字節(jié)編程方式,只是SD卡每扇區(qū)大小一般都是512字節(jié),所以這里使用512字節(jié)為單位進(jìn)行編程。

        代碼:
        uint8 UCSDCardProgram(uint8 *fileName, uint8 *buf)
        {
        uint32 addr = 0;
        FATFS fs;
        FIL file;
        UINTbr;
        FRESULT res;

        DisableIRQ();// 禁止中斷
        SectorPrepare(6, 6);// 選擇扇區(qū)
        SectorErase(6, 6);// 擦除扇區(qū)
        EnableIRQ();// 使能中斷


        f_mount(0, &fs);


        res = f_open(&file, (const TCHAR *)fileName, FA_OPEN_EXISTING|FA_READ);

        if(res != FR_OK)
        {
        return res;
        }
        else
        {
        while (1)
        {
        res = f_read(&file, buf, 512, &br);// 讀取數(shù)據(jù)

        DisableIRQ();
        SectorPrepare(6, 6);
        RamToFlash(APP_CODE_START_ADDR + addr, (uint32)buf, 512); // 寫(xiě)數(shù)據(jù)到FLASH
        EnableIRQ();
        addr += 512;

        if ((res != FR_OK) || (br < 512))
        {
        break;
        }
        }
        }


        f_close(&file);// 關(guān)閉文件,必須和f_open函數(shù)成對(duì)出現(xiàn)


        f_mount(0, 0);

        return FR_OK;
        }

        3.主函數(shù):

        主函數(shù)實(shí)現(xiàn)按鍵掃描,如果有按鍵,進(jìn)行SD卡升級(jí),如果沒(méi)有按鍵直接跳轉(zhuǎn)到應(yīng)用程序。

        代碼一開(kāi)始判斷按鍵,所以一般都是需要按下按鍵后復(fù)位系統(tǒng),當(dāng)然也可以適當(dāng)循環(huán)掃描按鍵的次數(shù)。等待一定的時(shí)間。。。。。。。

        代碼:


        int main(void)
        {
        void (*userProgram)() = (void (*)())OSInit;// 函數(shù)指針

        OSInit();// 初始化系統(tǒng)

        while (1)
        {
        if (KeyGetValue())
        {
        UCSDCardProgram("LPC1114.bin", SDBuf);
        }

        userProgram = (void (*)())(APP_CODE_START_ADDR + 1);
        (*userProgram)();// 啟動(dòng)程序
        }
        }

        到此IAP程序完成了,下面就是編寫(xiě)應(yīng)用程序了。。。。。。。。。。。。。。。。。。。。。。

        應(yīng)用程序編寫(xiě):

        應(yīng)用程序編寫(xiě)沒(méi)有什么特殊的,只是需要注意幾個(gè)地方的設(shè)置

        1.設(shè)置編譯地址:

        設(shè)置用戶程序的開(kāi)始地址,根據(jù)需要設(shè)置,一般都在IAP函數(shù)之上,需要適當(dāng)大于IAP,給IAP自己增加功能提供空間。內(nèi)存也可以適當(dāng)設(shè)置一下,不過(guò)一般應(yīng)用程都沒(méi)有完全使用完內(nèi)存,所以不設(shè)置也是可以的。

        2.編譯設(shè)置

        設(shè)置NO_CRP條件編譯,否則程序編譯會(huì)出錯(cuò),此字段在啟動(dòng)代碼中使用,如果要加密代碼,此段號(hào)也需要設(shè)置。

        3.生存bin文件

        設(shè)置bin文件生成命令,具體的設(shè)置方法請(qǐng)看<>:http://bbs.eeworld.com.cn/thread-314169-1-1.html

        4.編寫(xiě)應(yīng)用程序,并把bin文件存放SD卡中,運(yùn)行IAP升級(jí)程序。

        具體的升級(jí)過(guò)程:

        1.把IAP程序下載到板子上。

        2.編寫(xiě)并編譯好應(yīng)用程序,需要是的bin文件。

        3.把應(yīng)用程序的bin文件拷貝到SD卡中。

        4.在板子上插入SD卡,并按下按鍵重啟系統(tǒng)。

        5.板子就會(huì)自動(dòng)實(shí)現(xiàn)升級(jí)并跳轉(zhuǎn)到應(yīng)用中運(yùn)行。



        上一頁(yè) 1 2 下一頁(yè)

        關(guān)鍵詞: LPC1100處理器SD卡IAP功

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉