<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

  筆者曾協(xié)助多家公司工程師,在A(yíng)ndesCore™上發(fā)展firmware。我們發(fā)現,當客戶(hù)開(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://dyxdggzs.com/article/135126.htm

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

  1. 主程序架構

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

 

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

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

  為了要修補ROM內的function,所以規劃出jump_table區域,原本都是指向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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>