23.07.2017, 16:22
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Выйти из цикла while Keil 5.0
Доброго дня.
Не отрабатывает как хотелось конструкция :
Код:
|
while (!(I2C2-›SR1 & 0x0002) && WATCHDOG_I2C != 0 )
{
if(WATCHDOG_I2C == 0)
{return -1;}
} |
Когда флаг меняется отрабатывает корректно..
Когда WATCHDOG_I2C = 0 зависает в функции.
Кто что скажет ?
|
|
|
|
23.07.2017, 16:36
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,091
Сказал спасибо: 2,566
Сказали Спасибо 11,900 раз(а) в 5,973 сообщении(ях)
|
Re: Выйти из цикла while Keil 5.0
Сообщение от bass1981
|
Когда WATCHDOG_I2C = 0
|
тогда
Сообщение от bass1981
|
if(WATCHDOG_I2C == 0)
|
не сработает из-за
Сообщение от bass1981
|
while (!(I2C2-›SR1 & 0x0002) && WATCHDOG_I2C != 0 )
|
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
23.07.2017, 17:46
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Выйти из цикла while Keil 5.0
Сообщение от akegor
|
тогда
не сработает из-за
|
Переменная (WATCHDOG_I2C) по таймеру уменьшается до нуля ...
И когда она становиться 0 то мы должны выйти из цикла while.
Из цикла мы так и не выходим ...
|
|
|
|
23.07.2017, 18:05
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,091
Сказал спасибо: 2,566
Сказали Спасибо 11,900 раз(а) в 5,973 сообщении(ях)
|
Re: Выйти из цикла while Keil 5.0
Сообщение от bass1981
|
Из цикла мы так и не выходим ...
|
Надо посмотреть во что превращается
Сообщение от bass1981
|
WATCHDOG_I2C != 0
|
А проще заменить его на "WATCHDOG_I2C › 0". Бывают фокусы в подобных местах, но я сильно не раскапываю, просто заменяю.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
23.07.2017, 18:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Выйти из цикла while Keil 5.0
Сообщение от bass1981
|
Переменная (WATCHDOG_I2C) по таймеру уменьшается до нуля ...
|
В прерывании, небось, уменьшается-то? Курим модификатор volatile...
|
|
|
Сказали "Спасибо" AR_Favorit
|
|
|
23.07.2017, 19:49
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Выйти из цикла while Keil 5.0
Сообщение от AR_Favorit
|
В прерывании, небось, уменьшается-то? Курим модификатор volatile...
|
В прерывании в прерывании...
Что боюсь спросить курим..? Это переменная int32_t ...
Екстерны все объявлены...
|
|
|
|
23.07.2017, 19:58
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: Выйти из цикла while Keil 5.0
bass1981, int32_t - ну и что? она у Вас volatile или нет? вот что важно.
|
|
|
|
23.07.2017, 20:08
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Выйти из цикла while Keil 5.0
Обычно переменные как-то принято обозначать маленькими буквами, а большими буквами обозначаются дефайны.
А начальное значение этой переменной какое и где оное задаётся? А то, знаете ли, даже половину от 32 бит считать ооочень долго можно. Здается мне чето, что она не инициализуется начальным значением перед началом счета.
А, и кстати, сама конструкция составлена избыточно. Переведем ее на литературный язык:
"пока флаг адреса не установлен и значение переменной_собаки не равно нулю, повторять сравнение переменной_собаки с нулем, и если оно вдруг равно нулю, то выйти с возвратом -1"
Масло масляное. Первую переменную_собаку в условии цикла надо убрать, она дублируется второй проверкой if. Это напоминает проверку на инверсивное утверждение. "Вы не согласны? Вы против?" - означает одно и то же, но ответы разные.
И перед началом цикла while не забыть установить начальное значение переменной_собаки.
Последний раз редактировалось NewWriter; 23.07.2017 в 20:26.
|
|
|
|
23.07.2017, 20:37
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,091
Сказал спасибо: 2,566
Сказали Спасибо 11,900 раз(а) в 5,973 сообщении(ях)
|
Re: Выйти из цикла while Keil 5.0
Сообщение от bass1981
|
int32_t
|
Для счетчика знаковая... Лучше не надо.
Сообщение от NewWriter
|
А, и кстати, сама конструкция составлена избыточно. Переведем ее на литературный язык:
"пока флаг адреса не установлен и значение переменной_собаки не равно нулю, повторять сравнение переменной_собаки с нулем, и если оно вдруг равно нулю, то выйти с возвратом -1"
|
Да вполне достаточно
Сообщение от bass1981
|
while (!(I2C2-›SR1 & 0x0002) && WATCHDOG_I2C != 0 );
|
ведь кроме ожидания ничего не делается.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
23.07.2017, 21:20
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: Выйти из цикла while Keil 5.0
akegor, как это ничего не делается? а выход из функции с возвратом -1
Хотя не знаю, что именно автор этим хочет делать. Может быть это просто таймаут так организован, но тогда наверное лучше так:
PHP код:
|
while (!(I2C2-›SR1 & 0x0002))
{
if(WATCHDOG_I2C == 0) {return -1;}
}
|
не знаю, дальше гадать не буду. А переменную лучше нормально назвать(не капсом).
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:39.
|
|