<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 如何實(shí)現(xiàn)對(duì)PIC芯片ROM中的程序地址的精確定位?

          如何實(shí)現(xiàn)對(duì)PIC芯片ROM中的程序地址的精確定位?

          作者: 時(shí)間:2013-03-07 來源:網(wǎng)絡(luò) 收藏

          如何實(shí)現(xiàn)對(duì)中的的精確定位。

          一個(gè)懸而未決的問題,歷時(shí)4個(gè)月終于獲解。大塊人心。

          事情要從4個(gè)月前的一場討論說起。詳細(xì)情況見:天梯 之 從零開始玩PIC——11.關(guān)于FLASH操作的討論

          問題的實(shí)質(zhì),就是如何實(shí)現(xiàn)對(duì)中的的精確定位。因?yàn)橹挥芯_定位了,才能通過對(duì)FLASH的寫操作來修改表格中的數(shù)據(jù)。(甚至可以修改程序!)。

          當(dāng)時(shí),yewuyi 和martin 參與了討論。并且,martin給出了一個(gè)不太理想的解決方案:在編譯器命令行選項(xiàng)中進(jìn)行設(shè)置,讓編譯器絕對(duì)避開某些區(qū)域。然后把這塊區(qū)域開辟為表格。但是這個(gè)方案的缺點(diǎn)是,在燒芯片時(shí),無法對(duì)表格內(nèi)容初始化,必須通過串口下載,由單片機(jī)程序去修改。

          這個(gè)問題被懸置了很久,今天,終于在網(wǎng)上看到一篇貼(參見:PICC中如何用指針訪問const 數(shù)組? ),匠人由此受到啟發(fā)。找到了問題的解決方案,總結(jié)如下:

          1、在定義const數(shù)組的同時(shí),定義const指針:

          const tU08 LED_TAB[]=

          {

          //。。。。內(nèi)容略。。。。

          };

          const tU08 *romPtr; //定義指向 的指針

          2、程序中可以對(duì)上面的指針變量賦值和實(shí)現(xiàn)取數(shù)操作:

          tU08 i ;

          romPtr = LED_TAB;

          i=*romPtr++; //取指針指向的一個(gè)數(shù),然后指針加1

          3、同樣的,我們也可以把romPtr 指針值傳遞給其他變量:

          tU16 m;

          romPtr = LED_TAB;

          m=romPtr;

          4、更神奇的是,我們可以通過這種方式,找到任意一個(gè)函數(shù)的起始PC地址:

          romPtr = temp_cnt; //說明:“temp_cnt”為一個(gè)函數(shù)。

          5、找到了地址,再要修改該地址所在的FLASH,自然應(yīng)該沒有問題了吧。呵呵。



          關(guān)鍵詞: PIC芯片 ROM 程序地址

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();