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

 
 
> Компилятор 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, 06:23
Сообщение #2


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

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



Код
unsigned char URXFind_(unsigned char* buf, unsigned char len, unsigned char* pos);
В первом посте намеренно упустил 3й параметр. В коде он присутствует. Функция возвращает 1 или 0.

Код

while(!URXFind_("OK", 2, &temp));

0240           L51:
0240                   .dbline 125
0240           L52:
0240                   .dbline 125
0240 22E0              ldi R18,2
0242 30E0              ldi R19,0
0244 00E0              ldi R16,<L54
0246 10E0              ldi R17,>L54
0248 0E940000          xcall _URXFind_
024C 402F              mov R20,R16
024E 4423              tst R20
0250 B9F3              breq L51
0252                   .dbline 126
0252 88E0              ldi R24,8
0254 28B0              in R2,0x8
0256 2826              eor R2,R24
0258 28B8              out 0x8,R2
025A                   .dbline 127
025A 01E0              ldi R16,1


Код
while(!(temp = URXFind_("OK", 2, &temp)));

0240           L51:
0240                   .dbline 125
0240           L52:
0240                   .dbline 125
0240 22E0              ldi R18,2
0242 30E0              ldi R19,0
0244 00E0              ldi R16,<L54
0246 10E0              ldi R17,>L54
0248 0E940000          xcall _URXFind_
024C 0030              cpi R16,0
024E 0107              cpc R16,R17
0250 B9F3              breq L51
0252           X5:
0252                   .dbline 126
0252 88E0              ldi R24,8
0254 28B0              in R2,0x8
0256 2826              eor R2,R24
0258 28B8              out 0x8,R2
025A                   .dbline 127
025A 01E0              ldi R16,1
Go to the top of the page
 
+Quote Post



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

 


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


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