爱玩电的大雄 发表于 2023-7-19 12:07:45

求助:中断号超过31报错问题:已安装拓展插件,*** ERROR L121: IMPROPER FIX

报错代码:
这是编码器检测程序,还没验证可行性,编译不过
void P2_isr() interrupt 39
{
        u8 intf;
        intf=P2INTF;
        if (intf)
        {
                P2INTF=0X00;//清除中断
                if (intf & 0x10)
                {
                        if (ENCODER_B)
                        {
                                if (!ENCODER_A)
                                {
                                        if (ENCODER_Nb<40)
                                        {
                                                ENCODER_Nb++;
                                                hc595_Tx=1;
                                        }
                                }
                        }
                        else
                        {
                                if (!ENCODER_A)
                                {
                                        if (ENCODER_Nb)
                                        {
                                                ENCODER_Nb--;
                                                hc595_Tx=1;
                                        }
                                }
                        }
                }
        }
       
}
报错信息:
*** ERROR L121: IMPROPER FIXUP
    MODULE:.\list\ZP01.obj (ZP01)

    OFFSET:00013CH


如果把39改小,就会编译通过,比如31:
*** WARNING L30: MEMORY SPACE OVERLAP
    FROM:    C:0000FBH   
    TO:      C:0000FEH   
Program Size: data=11.3 xdata=684 const=0 code=3809
creating hex file from ".\list\STC8G-H-LIB"...
".\list\STC8G-H-LIB" - 0 Error(s), 1 Warning(s).

我用的是官方的库函数,加了一点代码,确定扩展已经装好了,因为我把39改成33,也能编译通过


中断号:33 编译通过:
Program Size: data=11.3 xdata=684 const=0 code=3809
creating hex file from ".\list\STC8G-H-LIB"...
".\list\STC8G-H-LIB" - 0 Error(s), 0 Warning(s).
但是我这里要用的是39,P2的普通IO中断
并且我发现一个现象:报错地址 跟中断入口地址差1


会不会是哪里出错了?请大佬帮忙看一下,源代码已上传

爱玩电的大雄 发表于 2023-7-19 15:28:24

按手册里借用中断向量13的方法可以跑起来了,先这么用着吧,但根因没找到,实际问题还没解决

爱玩电的大雄 发表于 2023-7-19 15:39:50

第一次上传的源码能能编译通过,因为我把39改成33了{:4_167:},但是无法使用,这个才是编译不过的代码

爱玩电的大雄 发表于 2023-7-19 15:43:39

不知道是不是我的keil版本问题或者环境问题,有没有人能帮忙在自己的电脑上编译试试

乘风飞扬 发表于 2023-7-19 19:38:50

C51编译器使用中断扩展插件时不能使用LX51模式。
把“LX51 Misc”标签里的“REMOVEUNUSED”删掉,然后在“Device”标签里把使用LX51选项勾选去掉试试。

爱玩电的大雄 发表于 2023-7-21 09:56:37

乘风飞扬 发表于 2023-7-19 19:38
C51编译器使用中断扩展插件时不能使用LX51模式。
把“LX51 Misc”标签里的“REMOVEUNUSED”删掉,然后在“D ...

的确是这个问题,改完之后编译通过了,但是多了一堆未调用函数的警告,code量从4k变成了16k。看来扩展插件还可以优化一下,让它支持LX51

_奶咖君_ 发表于 2023-12-13 16:50:32

与到同样的扩展插件不兼容 LX51的情况,,真得有点蛋疼..

xhbwork 发表于 2023-12-13 18:37:53

乘风飞扬 发表于 2023-7-19 19:38
C51编译器使用中断扩展插件时不能使用LX51模式。
把“LX51 Misc”标签里的“REMOVEUNUSED”删掉,然后在“D ...

这个是一定需要支持的,LX51使用起来方便很多,L51功能太弱了呢

飞捷 发表于 2024-3-4 08:29:49

xhbwork 发表于 2023-12-13 18:37
这个是一定需要支持的,LX51使用起来方便很多,L51功能太弱了呢

请问LX51和L51区别在哪里?
页: [1]
查看完整版本: 求助:中断号超过31报错问题:已安装拓展插件,*** ERROR L121: IMPROPER FIX