Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Выйти из цикла while Keil 5.0

Непрочитано 23.07.2017, 16:22  
bass1981
Гражданин KAZUS.RUN
 
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
bass1981 на пути к лучшему
По умолчанию Выйти из цикла while Keil 5.0

Доброго дня.

Не отрабатывает как хотелось конструкция :
Код:
while (!(I2C2-›SR1 & 0x0002)  && WATCHDOG_I2C != 0 ) 
{
if(WATCHDOG_I2C == 0)
{return -1;}
}
Когда флаг меняется отрабатывает корректно..
Когда WATCHDOG_I2C = 0 зависает в функции.

Кто что скажет ?
Реклама:
bass1981 вне форума  
Непрочитано 23.07.2017, 16:36  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Выйти из цикла while Keil 5.0

Сообщение от bass1981 Посмотреть сообщение
Когда WATCHDOG_I2C = 0
тогда
Сообщение от bass1981 Посмотреть сообщение
if(WATCHDOG_I2C == 0)
не сработает из-за
Сообщение от bass1981 Посмотреть сообщение
while (!(I2C2-›SR1 & 0x0002) && WATCHDOG_I2C != 0 )
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 23.07.2017, 17:46  
bass1981
Гражданин KAZUS.RUN
 
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
bass1981 на пути к лучшему
По умолчанию Re: Выйти из цикла while Keil 5.0

Сообщение от akegor Посмотреть сообщение
тогда

не сработает из-за
Переменная (WATCHDOG_I2C) по таймеру уменьшается до нуля ...

И когда она становиться 0 то мы должны выйти из цикла while.
Из цикла мы так и не выходим ...
bass1981 вне форума  
Непрочитано 23.07.2017, 18:05  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Выйти из цикла while Keil 5.0

Сообщение от bass1981 Посмотреть сообщение
Из цикла мы так и не выходим ...
Надо посмотреть во что превращается
Сообщение от bass1981 Посмотреть сообщение
WATCHDOG_I2C != 0
А проще заменить его на "WATCHDOG_I2C › 0". Бывают фокусы в подобных местах, но я сильно не раскапываю, просто заменяю.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 23.07.2017, 18:36  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Выйти из цикла while Keil 5.0

Сообщение от bass1981 Посмотреть сообщение
Переменная (WATCHDOG_I2C) по таймеру уменьшается до нуля ...
В прерывании, небось, уменьшается-то? Курим модификатор volatile...
AR_Favorit вне форума  
Сказали "Спасибо" AR_Favorit
bass1981 (23.07.2017)
Непрочитано 23.07.2017, 19:49  
bass1981
Гражданин KAZUS.RUN
 
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
bass1981 на пути к лучшему
По умолчанию Re: Выйти из цикла while Keil 5.0

Сообщение от AR_Favorit Посмотреть сообщение
В прерывании, небось, уменьшается-то? Курим модификатор volatile...
В прерывании в прерывании...
Что боюсь спросить курим..? Это переменная int32_t ...
Екстерны все объявлены...
bass1981 вне форума  
Непрочитано 23.07.2017, 19:58  
H4LF
Вид на жительство
 
Аватар для H4LF
 
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
H4LF на пути к лучшему
По умолчанию Re: Выйти из цикла while Keil 5.0

bass1981, int32_t - ну и что? она у Вас volatile или нет? вот что важно.
H4LF вне форума  
Сказали "Спасибо" H4LF
bass1981 (23.07.2017)
Непрочитано 23.07.2017, 20:08  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Выйти из цикла while Keil 5.0

Обычно переменные как-то принято обозначать маленькими буквами, а большими буквами обозначаются дефайны.
А начальное значение этой переменной какое и где оное задаётся? А то, знаете ли, даже половину от 32 бит считать ооочень долго можно. Здается мне чето, что она не инициализуется начальным значением перед началом счета.

А, и кстати, сама конструкция составлена избыточно. Переведем ее на литературный язык:
"пока флаг адреса не установлен и значение переменной_собаки не равно нулю, повторять сравнение переменной_собаки с нулем, и если оно вдруг равно нулю, то выйти с возвратом -1"
Масло масляное. Первую переменную_собаку в условии цикла надо убрать, она дублируется второй проверкой if. Это напоминает проверку на инверсивное утверждение. "Вы не согласны? Вы против?" - означает одно и то же, но ответы разные.
И перед началом цикла while не забыть установить начальное значение переменной_собаки.

Последний раз редактировалось NewWriter; 23.07.2017 в 20:26.
NewWriter вне форума  
Непрочитано 23.07.2017, 20:37  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Выйти из цикла while Keil 5.0

Сообщение от bass1981 Посмотреть сообщение
int32_t
Для счетчика знаковая... Лучше не надо.
Сообщение от NewWriter Посмотреть сообщение
А, и кстати, сама конструкция составлена избыточно. Переведем ее на литературный язык:
"пока флаг адреса не установлен и значение переменной_собаки не равно нулю, повторять сравнение переменной_собаки с нулем, и если оно вдруг равно нулю, то выйти с возвратом -1"
Да вполне достаточно
Сообщение от bass1981 Посмотреть сообщение
while (!(I2C2-›SR1 & 0x0002) && WATCHDOG_I2C != 0 );
ведь кроме ожидания ничего не делается.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 23.07.2017, 21:20  
H4LF
Вид на жительство
 
Аватар для H4LF
 
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
H4LF на пути к лучшему
По умолчанию Re: Выйти из цикла while Keil 5.0

akegor, как это ничего не делается? а выход из функции с возвратом -1
Хотя не знаю, что именно автор этим хочет делать. Может быть это просто таймаут так организован, но тогда наверное лучше так:
PHP код:
while (!(I2C2-›SR1 & 0x0002))
{
    if(WATCHDOG_I2C == 0) {return -1;}
} 
не знаю, дальше гадать не буду. А переменную лучше нормально назвать(не капсом).
H4LF вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Keil MDK 5.0 dosikus Embedd С 72 07.11.2013 20:52
найти файл STM32_init.c (Keil) к библиотеке CMSIS и StdPeriph_Lib Alex_8 ARM 2 01.08.2013 14:20
Keil и сторонние программаторы Qares Embedd С 17 06.02.2013 19:40
Class string in Keil Chudilo Микроконтроллеры, АЦП, память и т.д 18 13.08.2012 13:10
Почему Keil собирает нерабочий hex west329 Микроконтроллеры, АЦП, память и т.д 1 10.07.2009 14:09


Часовой пояс GMT +4, время: 08:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.