Vladimir Ljaschko (30.12.2013 16:10, просмотров: 387) ответил fk0 на Да, трэш угар и содомия. Иногда абстракции через край, поэтому я имею такое мнение, что иногда и не грех в исходники прямо вписать чуть ли не адрес регистра, ну и уж номер бита так точно. Только чем поможет собственно битовое поле? Формально
ни фига, не согласен. Использую X-макросы для абстракций работы с портами и в общем то доволен. Но все покрыть действительно сложно. // name port bit
OUTPUT ( PulseWdt , P1 , 0x01u )
OUTPUT ( Backlight , P1 , 0x02u )
OUTPUT ( EmptyError , P1 , 0x04u )
INPUT ( EmptyErrorIn , P1 , 0x04u )
OUTPUT ( IrdaTx , P1 , 0x08u )
INPUT ( KeyStIn , ~P1 , 0x10u )
INPUT ( KeyDnIn , ~P1 , 0x20u )
INPUT ( KeyFnIn , ~P1 , 0x40u )
INPUT ( KeyUpIn , ~P1 , 0x80u )
INPUT ( KbdIn , ~P1 , 0xf0u )
INPUT ( FnFreeIn , P1 , 0x40u )
// port direction start value selection
PORT ( P1 , mPulseWdt | mBacklight | mEmptyError | mIrdaTx , 0 , mIrdaTx )
PORT ( P2 , mScl|mOtherError|mP2_3|mPumpB|mP2_5|mPumpA , 0 , 0 )
PORT ( P3 , mP3_0|mP3_1|mIrdaSc|mP3_3|mTxD0|mTxD1 , mTxD0|mTxD1 , mTxD0|mRxD0|mTxD1|mRxD1 )
PORT ( P4 , mValve|mAc|mAc2|mSound| mP46|mErrorLed , 0 , mAc |mAc2 )
PORT ( P5 , 0xff , 0 , 0 )
PORT ( P6 , 0 , 0 , mA0Adc|mInputAdc|mCanAdc|mFlowAdc|mOutputAdc|mLeakageAdc|mPowerAdc|mTemperatureAdc )
//PORT ( P1 , mPulseWdt | mBacklight | mEmptyError | mIrdaTx , 0 , mIrdaTx )
//PORT ( P2 , mScl | mOtherError | mCloseCC | mPumpB | mCloseWC | mPumpA , 0 , 0 )
//PORT ( P3 , mCloseUp | mIrdaSc | mTxD0 | mTxD1 , mTxD0 | mTxD1 , mTxD0 | mRxD0In | mTxD1 | mRxD1In )
//PORT ( P4 , mCloseDn | mValve | mAc | mSound | mChemLed | mWaterLed , 0 , mAc )
//PORT ( P5 , 0xff , 0 , 0 )
//PORT ( P6 , 0 , 0 , mOutputAdc|mInputAdc|mCanAdc|mFlowAdc|mLeakageAdc|mPowerAdc )
FUNCTION ( IrdaTxFunction , P1SEL, mIrdaTx )
FUNCTION ( IrdaRxInterrupt , P2IE, mIrdaRxIn )
FUNCTION ( ValvePWM , P4SEL, mValve )
FUNCTION ( SdaLow , P2DIR, mSda )
FUNCTION ( SclLow , P2DIR, mScl )