• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 如何實現對PIC芯片ROM中的程序地址的精確定位?

    如何實現對PIC芯片ROM中的程序地址的精確定位?

    作者: 時間:2013-03-07 來源:網絡 收藏

    如何實現對中的的精確定位。

    一個懸而未決的問題,歷時4個月終于獲解。大塊人心。

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

    問題的實質,就是如何實現對中的的精確定位。因為只有精確定位了,才能通過對FLASH的寫操作來修改表格中的數據。(甚至可以修改程序!)。

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

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

    1、在定義const數組的同時,定義const指針:

    const tU08 LED_TAB[]=

    {

    //。。。。內容略。。。。

    };

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

    2、程序中可以對上面的指針變量賦值和實現取數操作:

    tU08 i ;

    romPtr = LED_TAB;

    i=*romPtr++; //取指針指向的一個數,然后指針加1

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

    tU16 m;

    romPtr = LED_TAB;

    m=romPtr;

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

    romPtr = temp_cnt; //說明:“temp_cnt”為一個函數。

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



    關鍵詞: PIC芯片 ROM 程序地址

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 扶沟县| 安宁市| 丹巴县| 杂多县| 宿迁市| 乐都县| 页游| 宁河县| 阳春市| 永春县| 岳池县| 若羌县| 古蔺县| 凤山县| 孟村| 德江县| 武强县| 青田县| 明光市| 芦山县| 吉首市| 潮安县| 永康市| 安岳县| 上虞市| 海伦市| 凤山市| 图片| 绥阳县| 庆安县| 灵武市| 册亨县| 满洲里市| 玛沁县| 广州市| 武定县| 克东县| 巴彦县| 昌乐县| 乐清市| 岳阳县|