|
我用的是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[i/8].BYTE & (1 << (i%8))) != 0)
{ if (_T[i][0] < _T[i][1])
{ _T[i][0]++;
if (_T[i][0] >= _T[i][1])
{ rT[i/8].BYTE |= (1 << (i%8));
}
}
}
}
}
}
问题出现在哪里,找了很久一直没有找到,望各位兄弟帮忙。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|