有用AVR做工控板的嘛,我移植简易PLC软件时,出现了问题
我用的是AVR Studio+GCC编译器问题:时间继电器功能和计数器功能,经常出问题。
以下代码编译不通过:
#define_OUT_T(a,k) if ((ACC_BIT & 0x01) != 0)\
{ if ((a##_F) == 0){ (a##_F) = 1; a=0; *((&##a)+1) = k; }}\
else{ (a##_F) = 0; a=0; } // _Tx, _Tx_F, _TKx, K
#define_OUT_C(a,k) if ((ACC_BIT & 0x01) != 0) \
{ if ((a##_F) == 0) \
{ (a##_F) = 1; \
if (a < k) \
{ a++; \
if (a >= k) \
{ rC[(&a-&_C0)/8].BYTE |= 1<<((&a-&_C0)%8); } \
else { rC[(&a-&_C0)/8].BYTE &= ~(1 << ((&a-&_C0)%8)); } \
} \
} \
} \
else{ (a##_F) = 0; } // _Tx, _Tx_F, _TKx, K
会出现如下经过:
../main.c:176:1: error: pasting "&" and "_T12" does not give a valid preprocessing token
把*((&##a)改成*((&a)就可以编译通过了,但是时间继电器,用起来老是出问题,有时候可以正常用,有时候多加几个梯形图就又不能用了。
100ms定时器,我用的代码是这样的
void _T100mS(void)
{ unsigned char i;
if (Timer_100ms != 0)
{ Timer_100ms--;
Pulse_val_Sec++;
if (++Pulse_val_Sec == 5) //5
{ Pulse_Sec = ~Pulse_Sec;
}
if (Pulse_val_Sec == 10) //10
{ Pulse_Sec = ~Pulse_Sec;
Pulse_val_Min++;
Pulse_val_Sec = 0;
}
for (i=0; i<_T_num; i++ )
{ if ((rTF.BYTE & (1 << (i%8))) != 0)
{ if (_T < _T)
{ _T++;
if (_T >= _T)
{ rT.BYTE|=(1 << (i%8));
}
}
}
}
}
}
问题出现在哪里,找了很久一直没有找到,望各位兄弟帮忙。
费这个劲呢,www.microplc.com.cn
页:
[1]