如何解决飞思卡尔芯片使用监控程序产生的冲突问题

关于飞思卡尔用了监控程序以后出现的向量表移动问题的解决方案。

由于单片机烧写了监控程序,监控程序占用的空间正好是原来放置中断向量表的空间。F000~FEFF。

故我们需要移动向量表的起始地址,于是有了以下一段程序。

const tIsrFunc _InterruptVectorTable[] @0xEF10 = {

由于篇幅限制,表中内容省略。

总之,这段程序的意思就是将中断向量表的首地址强制定位到了EF10从而起到避免与监控程序冲突的作用。

但是链接的时候会出现问题。L1119:Vector allocated at absolute address 0xFFFE overlaps with sections placed in segment .absSeg292 就是地址冲突。如何解决呢。

相信大多数参赛的同学都是用BDM的。于是在工程文件夹下找到prm文件夹,里面有一个project.prm把里面的内容全部修改为如下

NAMES
   
END

SEGMENTS


      RAM           = READ_WRITE  DATA_NEAR            0x2000 TO   0x3FFF;


      ROM_4000      = READ_ONLY   DATA_NEAR IBCC_NEAR  0x4000 TO   0x7FFF;
      ROM_C000      = READ_ONLY   DATA_NEAR IBCC_NEAR  0xC000 TO   0xFEFF;

    //OSVECTORS     = READ_ONLY                        0xFF10 TO   0xFFFF; 


      EEPROM_00     = READ_ONLY   DATA_FAR IBCC_FAR  0x000800 TO 0x000BFF;
      EEPROM_01     = READ_ONLY   DATA_FAR IBCC_FAR  0x010800 TO 0x010BFF;
      EEPROM_02     = READ_ONLY   DATA_FAR IBCC_FAR  0x020800 TO 0x020BFF;
      EEPROM_03     = READ_ONLY   DATA_FAR IBCC_FAR  0x030800 TO 0x030BFF;
      EEPROM_04     = READ_ONLY   DATA_FAR IBCC_FAR  0x040800 TO 0x040BFF;
      EEPROM_05     = READ_ONLY   DATA_FAR IBCC_FAR  0x050800 TO 0x050BFF;
      EEPROM_06     = READ_ONLY   DATA_FAR IBCC_FAR  0x060800 TO 0x060BFF;
      EEPROM_07     = READ_ONLY   DATA_FAR IBCC_FAR  0x070800 TO 0x070BFF;




      PAGE_F8       = READ_ONLY   DATA_FAR IBCC_FAR  0xF88000 TO 0xF8BFFF;
      PAGE_F9       = READ_ONLY   DATA_FAR IBCC_FAR  0xF98000 TO 0xF9BFFF;
      PAGE_FA       = READ_ONLY   DATA_FAR IBCC_FAR  0xFA8000 TO 0xFABFFF;
      PAGE_FB       = READ_ONLY   DATA_FAR IBCC_FAR  0xFB8000 TO 0xFBBFFF;
      PAGE_FC       = READ_ONLY   DATA_FAR IBCC_FAR  0xFC8000 TO 0xFCBFFF;

      PAGE_FE       = READ_ONLY   DATA_FAR IBCC_FAR  0xFE8000 TO 0xFEBFFF;

END

PLACEMENT
      _PRESTART,             
      STARTUP,               
      ROM_VAR,               
      STRINGS,               
      VIRTUAL_TABLE_SEGMENT, 
    //.ostext,               
      DEFAULT_ROM, NON_BANKED,            
      COPY                   
                             
                        INTO  ROM_C000;

      OTHER_ROM         INTO           PAGE_FE,          PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;

    //.stackstart,           
      SSTACK,                
    //.stackend,             
      PAGED_RAM,             

      DEFAULT_RAM            
                        INTO  RAM;

      DISTRIBUTE        DISTRIBUTE_INTO
                              ROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;
      CONST_DISTRIBUTE  DISTRIBUTE_INTO
                              ROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;
      DATA_DISTRIBUTE   DISTRIBUTE_INTO
                              RAM;
    //.vectors          INTO  OSVECTORS;
END


ENTRIES
   
  //_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStart
END

STACKSIZE 0x100  


//VECTOR 0 _Startup
VECTOR 0 Entry 
//INIT Entry     
编译链接,程序通过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值