Arduino.ru
Подскажите по следующему вопросу. Будет ли работать цикл while (1) в функции, которая вызывается из основной loop? Суть в следующем. Вызывается функция из loop, в этой функции организован цикл while (1), который должен ожидать нажатие кнопок и выбирать что делать дальше. Выход из while (1) происходит при нажатии на определенную кнопку что по идее должно вернуть управление основному циклу loop. Но почему-то не получается. Похоже что цикл while (1) просто игнорируется. Если в мою функцию (в которой есть цикл while (1)) добавить задержку, то видно, что сама функция вызывается, но цикл while (1) не обрабатывается, функция завершается без ожидания нажатия на кнопки и процесс возвращается обратно в loop.
while (1) вообще доложен работать в функциях или он только в loop работает?
- Войдите на сайт для отправки комментариев
Втр, 07/04/2015 — 00:45
Зарегистрирован: 06.07.2014
Ничего не могу сказать по поводу while (1) в среде Arduino IDE, но у Вас в корне неверный подход. Заставлять микроконтроллер впустую гонять цикл в ожидании нажатия кнопки без возможности выполнять другие задачи — это плохая практика. Используйте прерывания. Пусть лучше гоняет loop (), а в обработчике прерывания выполняйте нужные Вам действия или вызывайте другие функции. Если в обработчике прерывания будете менять значения каких-то переменных, не забудьте объявить их с квалификатором volatile.
- Войдите на сайт для отправки комментариев
Что означает while (1)
Поясните пожалуйста что означает двоеточие и то что идет после него
В 4 строчке после параметра в скобочках нету ";" или же тела функции, что не сходится с моим.
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что?
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? //анализируем все.
Что означает запись в скобках и что возвращает return
Всем привет! Начал читать книгу BecomeAnXcoder и тут появился вопрос. В пример приведен такой код.
Что такое #, include, что это означает
______
Операторы цикла
Цикл while (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.
Синтаксис цикла while в простейшем случае выглядит так:
while условие:
блок инструкций
При выполнении цикла while сначала проверяется условие. Если оно ложно, то выполнение цикла прекращается и управление передается на следующую инструкцию после тела цикла while. Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла.
Например, следующий фрагмент программы напечатает на экран квадраты всех целых чисел от 1 до 10. Видно, что цикл while может заменять цикл for . in range(. ):
i = 1
while i print(i)
i += 1
В этом примере переменная i внутри цикла изменяется от 1 до 10. Такая переменная, значение которой меняется с каждым новым проходом цикла, называется счетчиком. Заметим, что после выполнения этого фрагмента значение переменной i будет равно 11, поскольку именно при i==11 условие i
Вот еще один пример использования цикла while для определения количества цифр натурального числа n:
n = int(input())
length = 0
while n > 0:
n //= 10
length += 1
В этом цикле мы отбрасываем по одной цифре числа, начиная с конца, что эквивалентно целочисленному делению на 10 (n //= 10), при этом считаем в переменной length, сколько раз это было сделано.
В языке Питон есть и другой способ решения этой задачи: length = len(str(i)).
while (1) в Си
Мне тут недавно обхяснили, что численное значение TRUE — единица. Остальное можешь додумать сама.
понятно, то есть если у меня вот такая запись
while(1)
.
if (p=NULL)break;
>
то процедура крутится, пока p не равно NULL?
а функция exit(1 что тогда означает?
функция exit(1) говорит о том, что нужно выйти из форума с кодом 1 и наконец почитать хотя бы одну книжку из серии «Язык программирования C для начинающих за 37 минут!»
> то процедура крутится, пока p не равно NULL?
там точно только один знак ‘=’?
если все-таки два знака равенства, то да — цикл крутится пока p не равно NULL.
если один, то это ошибка, p — будет в первой же итерации приравен нулю, и цикл будет крутиться вечно.
> функция exit(1
выход из программы с кодом возврата 1.
а функция exit(1 что тогда означает?
Она означает, что тебе надо запустить man 1 exit
А если серъёзно — думаю, что завершение программы с кодом 1
while(1)
.
if (p=NULL)break;
>
то процедура крутится, пока p не равно NULL?
а функция exit(1 что тогда означает?
Да, верно, хотя здесь красивее было бы написать
do .
>
while(p!=NULL);
exit(1) — прервать работу программы с кодом ошибки =1 (0 — без ошибки). Правда обычно на код ошибки никто не смотрит, поэтому можно считать, что просто прервать работу программы.
exit(1)
означает завершение процесса с кодом выхода 1.
ЗЫ Вообщето надо читать документацию, тогда подобныеотпадут.
Правда обычно на код ошибки никто не смотрит
Если это программа, которую надо сдать преподу по информатике и забыть — да.
А если это модуль крупного проекта — ты очень не прав.
всем спасибо
действительно, там 2 знака равенства (p==NULL)
и действ-но, это прогр-ма, кот нужно сдать преп-лю и забыть
тем не менее, читать документацию стоит.
да я итак читаю
а можно узнать, что конкретно ты читаешь?
первое, что под рукку попало- Подбельский и Фомин «прогр-е на яз Си»
а под какой поерационной системой пишешь?
исходник программы одногруппника
странно, что там не описана семантика цикла while и вычисление логических выражений в СИ.
Угу, нам тоже её рекоендовали — хреновая книжка.
Могу посоветовать очень хорошую книжку Страуструпа — продаётся за ~400 в аргументе, ~500 в букинисте — там, по сути, написано вообще всё о си++
это я вообще то спросил..
Оч. хорошая книжка для начинающих.
Угу, нам тоже её рекоендовали — хреновая книжка.
нормальная книжка.
Могу посоветовать очень хорошую книжку Страуструпа.
чтобы написать программу в универе и забыть, не обязательно ее читать
Из этой книжки я, в частности, так и не смог понять — как именно перегружать операторы. там даже примеров нормальных нет. задавать пришлось смотреть рограмму знакомого. и в результате, я только совсем недавно нормально узнал хоть что-то об операторах.
чудесная книжка!
Четай, четай, меньше фтыкай ф форум и будет тебе счастье!
И не пишы сюда, некреативно.
чуве, речь идет о С, насколько я понял.
Да, протупил, сорри.
Но не думаю, что книжка подбельского/фомина по си написаноа сильно лучше, чем их же — по си++.
Кстати, это какой курс, что используется простой си? Первый, что ли
вмк 2ой осенний семестр
UNIX и язык Си
Дорогой друг, не сбивайте девушку с Пути.
Общение с наставников — важная часть духовного роста. А здесь наставников даже несколько.
Странно. на ММ уже вовсю ООП идёт.
вмк 2ой весенний ООП и Язык С++
забываете о химиках и физиках!
фиговый из тебя наставник, если сразу недопер
Очевидно, что нужно читать Чернокнижку
Обязательно ночью и при полной луне.
Подбельского-Фомина нужно в чёрный список внести, слишком уж он запутывает студентов.
Очень полезная книжка — только в ней была описана процедура, выполняя которую ваша программа не вываливается, когда в качестве аргумента при вызове задаётся очченннььь длинная строка
void f(const char* s) <>
А разве, если известно, что такое переполнение буфера ввода, непонятно, как это можно обойти
не все студенты это понимают, а если программа списана — непонимают вдвойне.
Можно, там, насколько сейчас помню, не считанные символы из командной строки (или из буфера scanf) выгребались с помощью getchar:
while (getchar != '\n');
зачем такие тонкости нужны?
разве в задании требуется какие-то заумные ошибки обходить?
Это не «заумные ошибки», а огромная дыра. Кстати, подавляющее большинство дыр в ПО как раз происходят из-за переполнения буфера.
в ПО то бесспорно, но в проге для препа то пох
Да-да, причем проценты там какие-то дикие.
А практически всё оставшееся, думаю — разнообразные injections.
Хотя, если подумать — по идее, вообще любая ошибка связана с тем, что мы начинаем исполнять пользовательский ввод.
Сто пудофф, 99.9% программ страдают от переполнения буфера, а оставшиеся 0.1% от injections.
но в проге для препа то пох
Преподы разные бывают.
Далеко не любая. Многочисленные race conditions тому примером.
думаю это просто один цикл закончится когда будет 1, не путай с true