打印

picc 编译出现问题 急!

[复制链接]
3658|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
loveme99|  楼主 | 2011-2-28 13:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Looping around MACH_ALLOC
用picc 9.65编译时出现上面提示不知道怎么出现的,还有怎么给解决掉啊,高手指点一下!!
沙发
yewuyi| | 2011-2-28 13:44 | 只看该作者
可能是递归调用了。

PIC不支持递归调用。

使用特权

评论回复
板凳
loveme99|  楼主 | 2011-2-28 14:02 | 只看该作者
没有递归调用啊,函数里加有个数组赋值,就不好用了

使用特权

评论回复
地板
loveme99|  楼主 | 2011-2-28 14:09 | 只看该作者
byte Find()
{
    byte Found;
    Found = FALSE;      // init to not found

    for (Ind=0; Ind < (EL_SIZE * MAX_USER); Ind+=EL_SIZE)
    {
        FCode = r[Ind][0];
        FCode = (Dato>>8);
        // check if 1111xxxx
        if ( (FCode & 0xf0) == 0xf0)        //高8位
            continue;   // empty  
        if (IDHi != (Dato & 0xff))                //低8位Buffer[4] //S/N LSB
            continue;   // fails match
        
              Dato = Read93LC46(Ind+1);
                if ( ( (Dato & 0xff) == IDLo) && (((Dato>>8)& 0xff) == IDMi))        //IDMi Buffer[5] //S/N IDHi    Buffer[6] //S/N MSB
        {
            Found = TRUE;     // match
            break;
        }
    } // for

    if (Found == TRUE)
    {
                EEADR++;
              Dato = Read93LC46(EEADR);
        EHop = Dato;
                EEADR++;
              Dato = Read93LC46(EEADR);
        ETemp= Dato;
     }
     return Found;
}

将以下这段去掉就会出现Looping around MACH_ALLOC
    if (Found == TRUE)
    {
                EEADR++;
              Dato = Read93LC46(EEADR);
        EHop = Dato;
                EEADR++;
              Dato = Read93LC46(EEADR);
        ETemp= Dato;
     }

使用特权

评论回复
5
loveme99|  楼主 | 2011-2-28 15:15 | 只看该作者
是不是编译器有问题啊,大家都用哪个版本的,我换个试试

使用特权

评论回复
6
yewuyi| | 2011-2-28 15:45 | 只看该作者
看这些代码真让人头大啊 。。。

使用特权

评论回复
7
loveme99|  楼主 | 2011-2-28 16:16 | 只看该作者
“Looping around MACH_ALLOC” error (9.65) This error may have been produced in some sit-
uations where memory allocation of variables failed. Better sorting has been implemented.资料是这样写的,没看太懂

使用特权

评论回复
8
yewuyi| | 2011-2-28 16:42 | 只看该作者
for (Ind=0; Ind < (EL_SIZE * MAX_USER); Ind+=EL_SIZE)


郁闷,看这样的代码简直会折寿啊。

难道你没有办法做个简化!?EL_SIZE顶个啥用。。。。。。

byte 是你自己定义的吗!?
我印象中PICC好像本身不支持这个关键字的吧。

使用特权

评论回复
9
loveme99|  楼主 | 2011-2-28 16:46 | 只看该作者
typedef unsigned char byte;
EL_SIZE,是方便以后设定的
辛苦了,没想到我这程序有这么难懂啊!!

使用特权

评论回复
10
Mary_luo| | 2011-2-28 17:47 | 只看该作者
应该和编译器没关系吧!不懂程序:$:$

使用特权

评论回复
11
loveme99|  楼主 | 2011-2-28 20:50 | 只看该作者
“Looping around MACH_ALLOC” error (9.65) This error may have been produced in some sit-
uations where memory allocation of variables failed. Better sorting has been implemented.

使用特权

评论回复
12
yewuyi| | 2011-3-1 08:36 | 只看该作者
FCode = r[Ind][0];
        FCode = (Dato>>8);

写这样的代码!?
凑代码量吗!?

第一行顶个神马鸟用。。。

使用特权

评论回复
13
loveme99|  楼主 | 2011-3-1 09:14 | 只看该作者
FCode = r[Ind][0];
这是我放上去,看是不是这个数组影响的。

使用特权

评论回复
14
loveme99|  楼主 | 2011-3-1 09:15 | 只看该作者
没有这个数组时可以编译的,,而放上之后就不可以了.

使用特权

评论回复
15
庄庄| | 2011-3-1 10:26 | 只看该作者
建议你将子程序代码量减小,子程序变量减少
一分为二

使用特权

评论回复
16
zyy657220| | 2011-3-1 13:13 | 只看该作者
a,好复杂

使用特权

评论回复
17
yewuyi| | 2011-3-1 13:17 | 只看该作者
首先是,你这一行放上去有什么用!?

除了多打一行字,其余是P用没有啊。。。

使用特权

评论回复
18
loveme99|  楼主 | 2011-3-1 16:11 | 只看该作者
又搞了一天,又发现个问题        Dato = Buffer[7]; Dato = (Dato<<8) + IDHi;这语句放入函数里就不出现问题,改成    Dato = Buffer[7];Dato = (Dato<<8);Dato+=IDHi;就能编译了

使用特权

评论回复
19
yewuyi| | 2011-3-1 17:04 | 只看该作者
我记得上次就告诉你简洁的比较16位位长的数据大小的方法了。

所以看到 :if ( (FCode & 0xf0) == 0xf0)        //高8位

我就郁闷了。。。:L

使用特权

评论回复
20
loveme99|  楼主 | 2011-3-1 17:30 | 只看该作者
还有简洁办法么?还真不知道啊!!以前是在哪个帖子上有啊,我查查!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

119

帖子

1

粉丝