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

 
 
> Компилятор ICC AVR, Помогите разобраться
lolful
сообщение Sep 16 2008, 05:56
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 27-11-07
Из: Пермь
Пользователь №: 32 732



Логка программы. В определенном месте кода ждать пока функция не вернет "1".
Пишу:
Код
while(!URXFind_("OK", 2));
И что же происходит? Функция возвращает "1" в тот момент, когда не должна. Сейчас поясню.
Далее исправляю эту сточку на:
Код
while(!(temp = URXFind_("OK", 2)));
...и все начинает работать так, как надо. Когда надо функция возвращает "1", когда надо - "0". Что это за подводный камень? Ума не приложу как такое имеет место быть...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
lolful
сообщение Sep 16 2008, 07:32
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 27-11-07
Из: Пермь
Пользователь №: 32 732



temp - это unsigned char. Функция возвращает именно число 0 или 1, а не их ASCII-код.
Но проблема то в том, что в первом случае чушь происходит, а во втором - все отлично работает.

PS Ой-ой! Что это тут написано! temp = URXFind_("OK", 2, &temp) - temp как параметр и как возвращаемое значение. Так не должно быть, хотя на работу это не влияет.

Ладно, буду сам разбираться. Придется вспоминать ассемблер...

Сообщение отредактировал lolful - Sep 16 2008, 07:33
Go to the top of the page
 
+Quote Post
zhevak
сообщение Sep 16 2008, 07:42
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(lolful @ Sep 16 2008, 13:32) *
temp - это unsigned char. Функция возвращает именно число 0 или 1, а не их ASCII-код.


Обратите внимание, во втором случае ветвление зависит от двубайтовой переменной
Код
024C 0030              cpi R16,0
024E 0107              cpc R16,R17

Компилятор пытается оценить двухбайтовую переменную. Но еще раз скажу, эту логику оптимизатора я не догоняю, чего это он тут пытался изобразить?

Удачи!

ЗЫ. Отключите всю оптимизацию нафиг, на данном этапе она только вредит.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 5th August 2025 - 18:14
Рейтинг@Mail.ru


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