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

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

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

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

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

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


 
Опции темы
Непрочитано 23.07.2017, 16:22  
bass1981
Гражданин KAZUS.RU
 
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 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
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,841
Сказал спасибо: 2,531
Сказали Спасибо 11,764 раз(а) в 5,895 сообщении(ях)
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.RU
 
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 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
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,841
Сказал спасибо: 2,531
Сказали Спасибо 11,764 раз(а) в 5,895 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Выйти из цикла while Keil 5.0

Сообщение от bass1981 Посмотреть сообщение
Из цикла мы так и не выходим ...
Надо посмотреть во что превращается
Сообщение от bass1981 Посмотреть сообщение
WATCHDOG_I2C != 0
А проще заменить его на "WATCHDOG_I2C › 0". Бывают фокусы в подобных местах, но я сильно не раскапываю, просто заменяю.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor на форуме  
Непрочитано 23.07.2017, 18:36  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 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.RU
 
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 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.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,490
Сказал спасибо: 401
Сказали Спасибо 2,216 раз(а) в 1,314 сообщении(ях)
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
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,841
Сказал спасибо: 2,531
Сказали Спасибо 11,764 раз(а) в 5,895 сообщении(ях)
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, время: 00:51.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot