|
ИМХО ((*(unsigned int *) 0xFFFF0000) >>= 1) не lvalue
если делать, то вроде бы так
#define WHATEVER_YOU_WANT_REG (*(volatile unsigned int *) 0xFFFF0000)
WHATEVER_YOU_WANT_REG = (WHATEVER_YOU_WANT_REG = WHATEVER_YOU_WANT_REG >> 1)) | 1;
или
WHATEVER_YOU_WANT_REG = (WHATEVER_YOU_WANT_REG >>= 1) | 1;
прочитать, сдвинуть, записать, установить бит, записать.
конечно, компилер может сделать "прочитать, сдвинуть, записать, прочитать, установить бит, записать".
volatile в декларацию, а то может не записать сдвинутое значение.
а вот почему *((unsigned int *) 0xFFFF0000) |= 1; не по стандарту - я хоть убей понять не могу.
E-mail: info@telesys.ru