Board logo

标题: CW12中写中断程序遇到的问题 [打印本页]

作者: flyer03    时间: 2005-6-21 15:17     标题: CW12中写中断程序遇到的问题

小弟用cw12向导建的dp256的工程,后建立了一个irq中断,入口地址0xFFF2,但是错误L1119显示此地址已被占用,但从prm中看好像这个地址未被占用啊,求助!以下是prm

SEGMENTS
    RAM = READ_WRITE 0x1000 TO 0x3FFF;
    /* unbanked FLASH ROM */
    ROM_4000 = READ_ONLY  0x4000 TO 0x7FFF;
    ROM_C000 = READ_ONLY  0xC000 TO 0xEFFF;
    /* banked FLASH ROM */
    PAGE_30 = READ_ONLY  0x308000 TO 0x30BFFF;
    PAGE_31 = READ_ONLY  0x318000 TO 0x31BFFF;
    PAGE_32 = READ_ONLY  0x328000 TO 0x32BFFF;
    PAGE_33 = READ_ONLY  0x338000 TO 0x33BFFF;
    PAGE_34 = READ_ONLY  0x348000 TO 0x34BFFF;
    PAGE_35 = READ_ONLY  0x358000 TO 0x35BFFF;
    PAGE_36 = READ_ONLY  0x368000 TO 0x36BFFF;
    PAGE_37 = READ_ONLY  0x378000 TO 0x37BFFF;
    PAGE_38 = READ_ONLY  0x388000 TO 0x38BFFF;
    PAGE_39 = READ_ONLY  0x398000 TO 0x39BFFF;
    PAGE_3A = READ_ONLY  0x3A8000 TO 0x3ABFFF;
    PAGE_3B = READ_ONLY  0x3B8000 TO 0x3BBFFF;
    PAGE_3C = READ_ONLY  0x3C8000 TO 0x3CBFFF;
    PAGE_3D = READ_ONLY  0x3D8000 TO 0x3DBFFF;
/*    PAGE_3E = READ_ONLY  0x3E8000 TO 0x3EBFFF; not used: equivalent to ROM_4000 */
/*    PAGE_3F = READ_ONLY  0x3F8000 TO 0x3FBFFF; not used: equivalent to ROM_C000 */
END

PLACEMENT
    _PRESTART,                   /* Used in HIWARE format: jump to _Startup at the code start */
    STARTUP,                     /* startup data structures */
    ROM_VAR,                     /* constant variables */
    STRINGS,                     /* string literals */
    VIRTUAL_TABLE_SEGMENT,       /* C++ virtual table segment */
    NON_BANKED,                  /* runtime routines which must not be banked */
    COPY                         /* copy down information: how to initialize variables */
                                 /* in case you want to use ROM_4000 here as well, make sure
                                    that all files (incl. library files) are compiled with the
                                    option: -OnB=b */
                                 INTO  ROM_C000/*, ROM_4000*/;
    DEFAULT_ROM                  INTO  PAGE_30,PAGE_31,PAGE_32,PAGE_33,PAGE_34,PAGE_35,PAGE_36,PAGE_37,
                                       PAGE_38,PAGE_39,PAGE_3A,PAGE_3B,PAGE_3C,PAGE_3D;
    DEFAULT_RAM                  INTO  RAM;
END
作者: strongchen    时间: 2005-6-21 15:21

你的中断地址是怎么声明的?
作者: flyer03    时间: 2005-6-21 15:40

prm中是VECTOR ADDRESS 0XFFF2 函数名
主程序中是void interrupt 6 函数名
在dp256.h中数了一下它对应优先级是6
作者: strongchen    时间: 2005-6-21 15:45

把prm中的地址声明去掉试试。
作者: flyer03    时间: 2005-6-21 15:52

也不行,ERROR L1004:VECTOR NUMBER OR ADDRESS EXPECTED
作者: flyer03    时间: 2005-6-21 19:22

help!!
作者: libingqiang    时间: 2005-6-21 20:37

将VECTOR ADDRESS 0XFFF2 函数名
注释掉!!
作者: flyer03    时间: 2005-6-21 20:55

在prm中把vector这句注释掉后出现了L1907:Fixup overflow in _VECTOR_6, type at offset 0x0。我要晕了。 还有一个问题请教,我在main中定义了一个全局变量后debug的时候startup就回不到main程序,而定义局部变量没问题。
作者: wang_r00    时间: 2005-6-30 09:38

PAGE_30 = READ_ONLY 0x308000 TO 0x30BFFF;
地址0x308000,0x30BFFF有问题吧?
作者: shpdlizj    时间: 2005-7-12 17:38     标题: 可以这样试试看看

1、不要用处理器专家
2、在原程序里用了interrupr 6 .....后,prm文件里不要加"VECTOR"了!
作者: achao86926    时间: 2009-2-28 15:24

中断程序一般有2种写法:interrupt 23 name();就是中断后加上相应的中断号,中断号你要自己去中断向量表种去查看,还有一种方法就是      interrupt void IRPT_RTI(void) ,接着你去PRM文件中定义 VECTOR ADDRESS 0xFFF0  IRPT_RTI,当然中断程序都要定位在非分页寻址区;#pragma CODE_SEG NON_BANKED;我知道的就只有这些了,我也是个新手




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0