Ответ: ИМХО: вообще это не должно компилироваться и работать, т.к.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Eddie 14 сентября 2004 г. 13:36
В ответ на: прошу прощения, немного не так. Над так ((*(unsigned int *) 0xFFFF0000) >>= 1) | = 0x01 отправлено DASM 14 сентября 2004 г. 11:31

ИМХО ((*(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