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

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 如何在晶心平臺(tái)實(shí)作ROM patch

      如何在晶心平臺(tái)實(shí)作ROM patch

      作者: 時(shí)間:2012-07-27 來(lái)源:電子產(chǎn)品世界 收藏

        筆者曾協(xié)助多家公司工程師,在AndesCore™上發(fā)展firmware。我們發(fā)現(xiàn),當(dāng)客戶開(kāi)發(fā)Non-OS的程序代碼,最常遇到的問(wèn)題在于開(kāi)發(fā)者不知如何撰寫(xiě)linker script。網(wǎng)絡(luò)上有GNU ld的使用文件,但是linker script的范例太少,尤其開(kāi)發(fā)者需要撰寫(xiě)進(jìn)階的linker script,常常不知如何下手。

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

        本篇文章我們分享如何實(shí)作 patch。使用CPU建構(gòu)的embedded system,一般具有CPU、外圍IP及RAM、。部份客戶使用 code開(kāi)機(jī),程序代碼放在ROM內(nèi),data section放在SRAM里。ROM code的特性是成本低,跟著IC光罩一起生產(chǎn),當(dāng)IC制作完成即不可修改,若有制作上的錯(cuò)誤或是程序代碼邏輯上的錯(cuò)誤,只能用ROM patch的方式修補(bǔ)。也就是將需要修補(bǔ)的程序代碼放到小容量的flash里。這就是我們今天要分享的技術(shù)。

        1. 主程序架構(gòu)

        首先介紹主程序的架構(gòu)。IC的Memory layout如下圖?! ?/p>

       

        紅色框線的部份,為主程序編譯的范圍。主程序main會(huì)呼叫到func1、func2和func3這3個(gè)function。

        在上圖中,黃色區(qū)域是IC的ROM,這部份的程序是IC制作出來(lái)即不可以改變。綠色部份是flash。在圖中,flash分成2區(qū),一個(gè)是jump_table,存放func1~func3的地址。剩余的空間FUNC_PATCH,預(yù)留給patch使用。

        為了要修補(bǔ)ROM內(nèi)的function,所以規(guī)劃出jump_table區(qū)域,原本都是指向ROM的function。如果ROM里的部份function損壞或是需要改寫(xiě),就把jump_table改為指向FUNC_PATCH里新建的function。

        1.1 源代碼

        主程序的程序代碼如下:(main.c)

        #include
        #include
        int func1(int);
        int func2(int);
        int func3(int);
        int num1=1;
        int num2=2;
        int num3=3;

        typedef struct strfunptr {
        int (*func_a)(int);
        int (*func_b)(int);
        int (*func_c)(int);
        }sfptr;

        sfptr jump_table __attribute__ ((section ("FUNC_TABLE")))= {func1, func2, func3};

        int main(void) {

        printf("func1(30)=%dn",jump_table.func_a(30));
        printf("func2(30)=%dn",jump_table.func_b(30));
        printf("func3(30)=%dn",jump_table.func_c(30));

        return EXIT_SUCCESS;

        }

        int func1(int x){
        return x*num1;

        }


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

      關(guān)鍵詞: 晶心 ROM

      評(píng)論


      相關(guān)推薦

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

      關(guān)閉