[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ: Добавлю для IAR AVR C++ v2.26c:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Alf_ 27 февраля 2002 г. 05:37
В ответ на: Непонятное поведение IAR C 2.26 для AVR отправлено ПАП 25 февраля 2002 г. 15:29

при работе с long в зависимости от кода ( сложности, навороченности и т.д. ) даже без структур компилятор неожиданно начинает использовать регистры R16, R18, R18, R19, т.е. пропускает R17. Это происходило на операциях сдвига, при разбиении числа на байты:

unsigned long a;
unsigned char L1,L2,H1,H2;
L1=a & 0xFF; // здесь используется R16
L2|=(a>>8) & 0xFF; // здесь используется R18 !!!
H1|=(a>>16) & 0xFF; // здесь используется снова R18 !!!
H2|=(a>>24) & 0xFF; // здесь используется R19
результат - сами понимаете
ЭТО я видел собственными глазами в листинге

пришлось сделать объединение и им разбить байт.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru