新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM8 IAR中斷向量表重映射

        STM8 IAR中斷向量表重映射

        作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
        分享STM8 IAP方法
        A:BOOT 項(xiàng)目里操作:
        1.把BOOT程序跟應(yīng)用程序分兩個(gè)項(xiàng)目編寫
        2.在BOOT程序里最重要的是中斷向量表重定向,icf文件就不用設(shè)置了(BOOT里不能開中斷)
        中斷向量表重定向設(shè)置方法代碼如下:
        __root const long reintvec[]@".intvec"=
        { 0x82008080,0x82009004,0x82009008,0x8200900c, //當(dāng)應(yīng)用程序地址不是0x9000時(shí)則要相應(yīng)改掉除第一個(gè)0x82008080以外的數(shù)值
        0x82009010,0x82009014,0x82009018,0x8200901c,
        0x82009020,0x82009024,0x82009028,0x8200902c,
        0x82009030,0x82009034,0x82009038,0x8200903c,
        0x82009040,0x82009044,0x82009048,0x8200904c,
        0x82009050,0x82009054,0x82009058,0x8200905c,
        0x82009060,0x82009064,0x82009068,0x8200906c,
        0x82009070,0x82009074,0x82009078,0x8200907c,
        };
        3.然后BOOT程序的跟一般程序一樣編寫通信協(xié)議及FLASH操作代碼就行了,還有一點(diǎn)要記住,BOOT程序里不要開中斷哦!
        這種方法缺點(diǎn)就是會浪費(fèi)約128個(gè)字節(jié)的FLASH空間,如果有高手能把這些空間省下來,請指點(diǎn)哦!
        B:應(yīng)用程序項(xiàng)目里操作:
        在應(yīng)用程序項(xiàng)目里必須在icf文件修改,修改如下:
        把下面三行
        define region NearFuncCode = [from 0x8000 to 0xFFFF];
        define region FarFuncCode = [from 0x8000 to 0xFFFF];
        define region HugeFuncCode = [from 0x8000 to 0xFFFF];
        改為
        define region NearFuncCode = [from 0x9000 to 0xFFFF];
        define region FarFuncCode = [from 0x9000 to 0xFFFF];
        define region HugeFuncCode = [from 0x9000 to 0xFFFF];
        就可以了,應(yīng)用程序就可以開中斷了,IAP就是這么簡單吧!
        當(dāng)然我這里是用0x9000地址作為應(yīng)用程序區(qū)的首地址,至于各位BOOT大小是多小就按不同的數(shù)值設(shè)置
        但是必須記得在BOOT的中斷向量重定向表也必須要相應(yīng)修改哦!
        解析下BOOT重定向表內(nèi)的0x82008080為什么是這個(gè)數(shù)值:因?yàn)橹囟ㄏ虮砀袛啾碇丿B了,編譯器就先分配重定向表,在接著的地址0x008080處,
        再分配一份中斷向量表,所以其實(shí)是兩份中斷向量表,所以BOOT重定向表內(nèi)的0x82008080就是為了要跳到真正的BOOT程序入口,
        因?yàn)樵?x8080處才是真正跳轉(zhuǎn)到__iar_program_start入口。


        關(guān)鍵詞: STM8IAR中斷向量表重映

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 威信县| 措勤县| 龙南县| 商洛市| 克拉玛依市| 玉树县| 滁州市| 西峡县| 吴堡县| 昭平县| 新津县| 陕西省| 酒泉市| 肥乡县| 台中市| 治多县| 凤庆县| 淅川县| 呼玛县| 新巴尔虎左旗| 扶沟县| 阳山县| 临颍县| 阳原县| 波密县| 明溪县| 苗栗县| 桐乡市| 寻甸| 陆良县| 中阳县| 航空| 苗栗市| 定南县| 贵阳市| 革吉县| 库车县| 米泉市| 九龙城区| 浦东新区| 杭州市|