新聞中心

        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 程序地址

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 榆树市| 沅陵县| 苍溪县| 囊谦县| 灵山县| 安达市| 长子县| 温宿县| 科技| 兰西县| 临邑县| 金堂县| 读书| 泽州县| 和龙市| 三门县| 江西省| 绍兴市| 胶南市| 祁门县| 荆门市| 五常市| 寻甸| 开远市| 汶川县| 长顺县| 扶绥县| 新野县| 枣强县| 古蔺县| 定兴县| 堆龙德庆县| 叶城县| 台中市| 临沭县| 南华县| 通渭县| 溧阳市| 大足县| 海晏县| 阿拉善右旗|