реклама на сайте
подробности

 
 
> Неожиданный результат, Прочитать два байта
alux
сообщение Jan 19 2008, 14:37
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Долго не мог выявить, почему цифровой датчик давления выдает неверный результат.
Код
//Первый случай;
resultat = ((unsigned int)i2c_read(ACK)<<8) | i2c_read(ACK);

//Второй случай:
HiTemp=i2c_read(ACK);        
LowTemp=i2c_read(ACK);
resultat = ((unsigned int)HiTemp<<8) | LowTemp;

Во втором случае дает другой (правильный) результат. Почему?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jan 20 2008, 12:23
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Я не такой большой специалист в Си и могу ошибаться, но ИМХО компилятор может "оптимизировать" вызов функции и вместо двух вызовов формировать один, а все бинарные операции проводить с одним полученным результатом. Как уже заметили, просмотр листинга может прояснить этот нюанс.
Go to the top of the page
 
+Quote Post
alux
сообщение Jan 20 2008, 15:01
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(rezident @ Jan 20 2008, 16:23) *
...компилятор может "оптимизировать" вызов функции и вместо двух вызовов формировать один, а все бинарные операции проводить с одним полученным результатом. Как уже заметили, просмотр листинга может прояснить этот нюанс.

Вот что выдал листинг:
Код
     49          Accumulator = ((unsigned int)i2c_read(ACK)<<8) | i2c_read(ACK);
   \   00000024   ....               RCALL   ?Subroutine0
   \                     ??CrossCallReturnLabel_0:
   \   00000026   2F80               MOV     R24, R16
   \   00000028   E090               LDI     R25, 0
     50                i2c_stop();
   \   0000002A   ........           CALL    i2c_stop

Как говорят у нас, на Украине, rezident "має рацію" smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alux   Неожиданный результат   Jan 19 2008, 14:37
- - Сергей Борщ   Цитата(alux @ Jan 19 2008, 16:37) Во втор...   Jan 19 2008, 14:45
|- - alux   Я поражен меткости и, главное, оперативности Ваших...   Jan 19 2008, 14:53
|- - Aesthete Animus   Цитата(Сергей Борщ @ Jan 19 2008, 17:45) ...   Jan 20 2008, 12:17
|- - Сергей Борщ   Цитата(Aesthete Animus @ Jan 20 2008, 14...   Jan 20 2008, 18:59
|- - Aesthete Animus   Цитата(Сергей Борщ @ Jan 20 2008, 21:59) ...   Jan 20 2008, 19:43
||- - Сергей Борщ   Цитата(Aesthete Animus @ Jan 20 2008, 21...   Jan 20 2008, 21:34
|- - singlskv   Цитата(Сергей Борщ @ Jan 20 2008, 21:59) ...   Jan 20 2008, 22:07
|- - Dog Pawlowa   Цитата(singlskv @ Jan 21 2008, 02:07) Даж...   Jan 21 2008, 07:39
|- - singlskv   Цитата(Dog Pawlowa @ Jan 21 2008, 10:39) ...   Jan 21 2008, 20:54
|- - Сергей Борщ   Цитата(singlskv @ Jan 21 2008, 22:54) по ...   Jan 21 2008, 21:10
|- - singlskv   Цитата(Сергей Борщ @ Jan 22 2008, 00:10) ...   Jan 21 2008, 21:16
|- - Сергей Борщ   Цитата(singlskv @ Jan 21 2008, 23:16) кон...   Jan 21 2008, 23:13
|- - singlskv   Цитата(Сергей Борщ @ Jan 22 2008, 02:13) ...   Jan 22 2008, 08:50
|- - Сергей Борщ   Цитата(singlskv @ Jan 22 2008, 10:50) Воп...   Jan 22 2008, 11:57
|- - singlskv   Цитата(Сергей Борщ @ Jan 22 2008, 14:57) ...   Jan 22 2008, 12:44
|- - alux   Цитата(singlskv @ Jan 22 2008, 16:44) Авт...   Jan 22 2008, 13:31
|- - singlskv   Цитата(alux @ Jan 22 2008, 16:31) Прошу п...   Jan 22 2008, 17:53
|- - alux   Код 49 Accumulator = ((unsigned int...   Jan 22 2008, 19:47
|- - ReAl   Цитата(alux @ Jan 22 2008, 15:31) Кстати,...   Jan 22 2008, 21:17
|- - alux   Цитата(ReAl @ Jan 23 2008, 01:17) У IAR-а...   Jan 23 2008, 07:13
|- - ReAl   Я немного цитаты перетасую Цитата(alux @ Jan...   Jan 23 2008, 14:49
|- - alux   Цитата(ReAl @ Jan 23 2008, 18:49) в преды...   Jan 23 2008, 15:10
|- - Сергей Борщ   Цитата(alux @ Jan 23 2008, 17:10) ReAl ог...   Jan 23 2008, 15:30
|- - ReAl   Цитата(Сергей Борщ @ Jan 23 2008, 17:30) ...   Jan 24 2008, 08:04
- - Baser   Цитата(alux @ Jan 19 2008, 16:37) Долго н...   Jan 19 2008, 15:44


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 23:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01435 секунд с 7
ELECTRONIX ©2004-2016