首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

将中断向量表写入Flash的方案?![讨论][求助]

高手来看一下嘛!!!
小弟不才,以后多多向大家学习。

将中断向量表写入Flash的方案?![讨论][求助]

我用S912DP256 ECU,中断向量表所要存放的位置为0xFF80--0xFFFF.
CodeWarrior自动生成的Vectors.c是这样解决的:
typedef void (*near tIsrFunc)(void);
const tIsrFunc _vect[] @0xFF80 = {     /* Interrupt table */
        Cpu_Interrupt,                 /* 0 Default (unused) interrupt */
        Cpu_Interrupt,                 /* 1 Default (unused) interrupt */
        ..........................
  }
也就是将函数指针数组写到以@0xFF80 开始的一段flash内,刚好是到0xFFFF.
这个方法当然正确.
但是小弟需要移植操作系统,对中断向量表有系统自己的定义,采取这种方案:
#pragma CONST_SEG .vector
typedef void (*near tIsrFunc)(void);
const tIsrFunc _vect[] = {     /* Interrupt table */
        Cpu_Interrupt,                 /* 0 Default (unused) interrupt */
        .....................
}

然后在PRM文件中加入(只写出了添加部分,其他的保持原PRM)
SECTIONS
VECTORS  =  READ_ONLY          0x0000FF80 TO 0x0000FFFF;
END

PLACEMENT
     .vector          INTO        VECTORS
END

结果编译链接,下载到硬件中,我一读0xFF80,根本没有写到里面去,这是怎么回事。理论上这样是可以的吧?请教!!!


[em07][em07]


[此贴子已经被作者于2005-7-7 15:18:21编辑过]

小弟不才,以后多多向大家学习。
你要检查一下你的定义与CodeWarrior原有的定义是否有冲突。
海纳百川  有容乃大
我的RPM文件全部如下:NAMES

END

SECTIONS
      /* List of all sections specified on the "Build options" tab */
      RAM  =  READ_WRITE                0x00001000 TO 0x00003FFF;
      ROM_C000  =  READ_ONLY            0x0000C000 TO 0x0000FF7F;
      ROM_VECTOR = READ_ONLY            0x0000FF80 TO 0x0000FFFF;
      ROM_4000  =  READ_ONLY            0x00004000 TO 0x00007FFF;
      ROM_PAGE30  =  READ_ONLY          0x00308000 TO 0x0030BFFF;
      ROM_PAGE31  =  READ_ONLY          0x00318000 TO 0x0031BFFF;
      ROM_PAGE32  =  READ_ONLY          0x00328000 TO 0x0032BFFF;
      ROM_PAGE33  =  READ_ONLY          0x00338000 TO 0x0033BFFF;
      ROM_PAGE34  =  READ_ONLY          0x00348000 TO 0x0034BFFF;
      ROM_PAGE35  =  READ_ONLY          0x00358000 TO 0x0035BFFF;
      ROM_PAGE36  =  READ_ONLY          0x00368000 TO 0x0036BFFF;
      ROM_PAGE37  =  READ_ONLY          0x00378000 TO 0x0037BFFF;
      ROM_PAGE38  =  READ_ONLY          0x00388000 TO 0x0038BFFF;
      ROM_PAGE39  =  READ_ONLY          0x00398000 TO 0x0039BFFF;
      ROM_PAGE3A  =  READ_ONLY          0x003A8000 TO 0x003ABFFF;
      ROM_PAGE3B  =  READ_ONLY          0x003B8000 TO 0x003BBFFF;
      ROM_PAGE3C  =  READ_ONLY          0x003C8000 TO 0x003CBFFF;
      ROM_PAGE3D  =  READ_ONLY          0x003D8000 TO 0x003DBFFF;
END

PLACEMENT
      DEFAULT_RAM                      INTO RAM;
      DEFAULT_ROM                      INTO ROM_PAGE30, ROM_PAGE31, ROM_PAGE32, ROM_PAGE33, ROM_PAGE34, ROM_PAGE35, ROM_PAGE36,
ROM_PAGE37, ROM_PAGE38, ROM_PAGE39, ROM_PAGE3A, ROM_PAGE3B, ROM_PAGE3C, ROM_PAGE3D;
      _PRESTART, STARTUP,
      ROM_VAR, STRINGS,
      NON_BANKED, COPY                 INTO ROM_C000, ROM_4000;
      .vector                          INTO ROM_VECTOR;
END

INIT _EntryPoint                       /* The entry point of the application. This function is generated into the CPU module. */

STACKSIZE 0x0080                       /* Size of the system stack. Value can be changed on the "Build options" tab */
小弟不才,以后多多向大家学习。
看看是否被优化掉了?
海纳百川  有容乃大
怎么解决??到哪里看???

    help!!!!
    急!!!
小弟不才,以后多多向大家学习。
我的SmartLinker option Settings设置面板的Optimization一栏的复选框我都没有选择,这样没有使用任何优化吧?你能否帮我看一下我的工程文件,谢谢!
我的邮箱是fly_cjh@126.com,谢谢!!!!!!
小弟不才,以后多多向大家学习。
救命啊!!!!
小弟不才,以后多多向大家学习。
把你的project打包发到strongchen_free@yahoo.com.cn。发后出个帖子通知一声。
海纳百川  有容乃大
谢谢,给你发了,谢谢!!!!!


[此贴子已经被作者于2005-7-8 17:59:04编辑过]

小弟不才,以后多多向大家学习。
我试了一下你发过来的project。你似乎打开了Processor Expert功能,而且编译根本无法通过。我用的是CodeWarrior 3.1。你再试试看。
海纳百川  有容乃大
那如果采取这种方案,你怎么配置呢?你能给一个例子不?:
#pragma CONST_SEG .vector
typedef void (*near tIsrFunc)(void);
const tIsrFunc _vect[] = { /* Interrupt table */
Cpu_Interrupt, /* 0 Default (unused) interrupt */
.....................
}

然后在PRM文件中加入(只写出了添加部分,其他的保持原PRM)
SECTIONS
VECTORS = READ_ONLY 0x0000FF80 TO 0x0000FFFF;
END

PLACEMENT
.vector INTO VECTORS
END
小弟不才,以后多多向大家学习。
我根据你的意思做了一个project,已经发给你了。你可以看到MyInterrupt的地址已经写入了FFFC~FFFF的矢量地址中。
海纳百川  有容乃大
返回列表