Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Почему AVR IAR 4.1x выдаёт сообщение?
Отправлено
De_User
25 августа 2008 г. 21:42
int val; val = ( ( (int)ADCH&0x3 ) * 256 ) + ADCL;
Warning[Pa082]: undefined behavior:
the order of volatile accesses is undefined in this statement
Составить ответ
|
Вернуться на конференцию
Ответы
А написать val = ADC; религия не позволяет?
-
John1960
(26.08.2008 08:28:7
80.90.116.5
,
пустое
)
Ищу в доке EWAVR Compiler Reference - где конкретно смотреть?
-
AU
(26.08.2008 15:35:32
81.30.193.79
,
пустое
)
А никто доку на компилятор не читает :)
-
Vladimir Ljaschko
(26.08.2008 10:52:38
194.158.204.49
,
пустое
)
Патамушта ADCL положено читать первым, а ADCH - вторым, а в твоем опусе порядок их чтения замылен вспомогательными вычислениями
-
MBedder
(25.08.2008 21:51:24
80.92.96.19
,
пустое
)
СПАСИБО! Вот так стало хорошо: val = ADCL; val = ((int)ADCH&0x3)*256 + val;
-
De_User
(25.08.2008 21:57:11
81.30.183.84
, 35 байт)
точнее (int) (ADCH&0x3)*256 + val; Может IAR догадается аппаратно умножить
-
De_User
(25.08.2008 22:00:3
81.30.183.84
,
пустое
)
"аппаратно умножить на 256"? :) ИАР не будет этого делать(+)
-
Quasy
(26.08.2008 10:57:30
192.168.0.207,80.243.9.34
, 637 байт)
имхо, я как то засиделся допоздна и глюканул, вместо *256 написал *0xFF, полчаса пытался заставить компилятор оптимизировать это выражиние, потом пошел спать, утром увидел что сделал, с тех пор пишу <<8
-
AF
(26.08.2008 13:28:14
88.204.245.61
,
пустое
)
Это ты должен был догадаться сделать union и обойтись безо всяких умножений
-
MBedder
(25.08.2008 22:05:22
80.92.96.19
,
пустое
)
напишите пожалуйста пример. После третьего чтения хелпа ясности никакой
-
De_User
(25.08.2008 22:17:43
81.30.183.84
,
пустое
)
Смотри доки компилятора по структурам и юнионам и пиши сам, как тебе надо
-
MBedder
(25.08.2008 22:33:39
80.92.96.19
,
пустое
)
Типа так
-
De_User
(25.08.2008 22:27:25
81.30.183.84
, 231 байт)
val=ADCL; val+=ADCH<<8;
-
Vit
(26.08.2008 00:11:30
77.123.32.160
, 35 байт)
Зачем громоздить вычисления на МК, когда достаточно ГРАМОТНОГО чтения ADCL и ADCH в соответствующие элементы структуры/юниона?
-
MBedder
(26.08.2008 11:53:22
80.92.96.19
,
пустое
)
Нужно ещё поискать компилер, не соптимизирующий это выражение (сдвиг на 8 потеряется, вместо "+=" будет копирование байта в старший байт слова). А насчёт зачем, то
-
Vit
(26.08.2008 12:30:23
10.0.0.3,83.170.240.226
, 132 байт)
Гланды все же удобнее через глотку вырезать -->
-
MBedder
(26.08.2008 12:37:28
80.92.96.19
,
пустое
,
ссылка
)
Удобнее, согласен, но когда пишу код, корректно компилируемый и под IAR и под GCC, читать о всех вкусностях каждого обломнее, чем написать в пару строк
-
Vit
(26.08.2008 12:45:22
10.0.0.3,83.170.240.226
,
пустое
)
Однажды напоролся: в iotiny15.h в ИАР 3-10д: SFR_W(ADC, 0x05) /* The ADC Data Register Word */
-
Quasy
(26.08.2008 12:56:42
192.168.0.207,80.243.9.34
,
пустое
)
ругается
-
De_User
(25.08.2008 22:37:29
81.30.183.84
,
пустое
)
И правильно делает -->
-
MBedder
(25.08.2008 22:38:47
80.92.96.19
,
пустое
,
ссылка
)
Не знаю, так или эдак, но либо юнион, либо структура. И &0x3 лишнее - в ADCH и без этого 6 старших бит нулевые
-
MBedder
(25.08.2008 22:35:59
80.92.96.19
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 76:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru