получается что в типе int памяти не хватает? она при таком построении скетча не стирает что ли ни чего и хранит каждое пропечатанное значение?
размерность типа int на 8-битных платформах, по умолчанию - 2 байта, диапазон для знакового типа: [-32768,+32767].
Размерность unsigned long - 4 байта, диапазон значений: [0,+4294967295];
это понятно, не понятно по чему не хватает типа int там же значение не превышает 300 - 310 миллисикунд, и после этого обнуляется. по чему интервал сбивается то?
это понятно, не понятно по чему не хватает типа int там же значение не превышает 300 - 310 миллисикунд, и после этого обнуляется. по чему интервал сбивается то?
возвращаемое millis() значение - имеет тип unsigned long, и НЕ ОБНУЛЯЕТСЯ до перезапуска контроллера. Вы возвращаемое значение в 4 байта пытаетесь упихнуть в двухбайтовую переменную, отсюда переполнение этой переменной. Дальше объяснять?
получается millis все время растет и занимяет больше места, и в определенный момент программа просто не может выполнить
timeRequest = millis();
по тому что обьем памяти занимаемый функцией millis превысил максимальный обьем памяти int
я это так понял
Нет, millis не занимает больше места - это вообще функция. Просто millis возвращает данные в переменной размерностью 4 байта, следовательно - переменная, которая принимает возвращаемое millis значение - должна быть такого же типа, как указано в документации к функции millis, т.е. unsigned long.
При этом никакого увеличения занимаемой памяти - нет. Вы путаете тёплое с круглым.
получается millis все время растет и занимяет больше места, и в определенный момент программа просто не может выполнить
timeRequest = millis();
по тому что обьем памяти занимаемый функцией millis превысил максимальный обьем памяти int
Как уже сказали миллис выполняется нормально, просто результат, в определенный момент, перестает впихиваться в int. И когда это происходить ваша программа начинает себя вести не так как вы задумывали.
Максимальное значение int это 32767. Миллис стартует с 0 и увеличивается на 1 за каждую миллисекунду. До истечении 32 с хвостиком секунд все работает как и задуманно, потом миллис переваливает за 32767 и продолжает увеличиваться, а в timeReques впихивается только часть от миллиса которая гарантированно меньше 32768. В результате вычитание millis() - timeRequest всегда дает больше заданных 300.
миллис переваливает за 32767 и продолжает увеличиваться, а в timeReques впихивается только часть от миллиса которая гарантированно меньше 32768. В результате вычитание millis() - timeRequest всегда дает больше заданных 300.
Да. И самый простой и эффективный способ это указать что в расчете millis() - timeRequest тоже брать только ту часть у millis() которая влазит в timeReques, т.е. написать (int)millis() - timeRequest. Увеличение размера переменной timeReques также поможет, но это более затратно.
миллис переваливает за 32767 и продолжает увеличиваться, а в timeReques впихивается только часть от миллиса которая гарантированно меньше 32768. В результате вычитание millis() - timeRequest всегда дает больше заданных 300.
Да. И самый простой и эффективный способ это указать что в расчете millis() - timeRequest тоже брать только ту часть у millis() которая влазит в timeReques, т.е. написать (int)millis() - timeRequest. Увеличение размера переменной timeReques также поможет, но это более затратно.
век живи век учись, от меня это как-то ускользнуло )))
Товарищи! всем привет. Подскажите пожалуйста чем "%" отличается от "-" ?
P.S. - я тут нашел один пример использования I2C модуля часов реального времени
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302,6,7,8);
void setup() {
delay(300);
Serial.begin(9600);
time.begin();
}
void loop(){
if(millis()%1000==0){ // если прошла 1 секунда
Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
}
}
в четвертой строчке кода 30 миллисекунд зачем пропускается? это от балды автор ляпнул или какое то сакральное предназначение имеет действие?
Товарищи! всем привет. Подскажите пожалуйста чем "%" отличается от "-" ?
Ну, прочитайте ж Вы, наконец, хоть какую-нибудь книжку о языке программирования! Хоть самую тоненькую - для дебилов! Хоть просто странички на этом сайте про % и про - прочитайте - ну сделайте же хоть что-нибудь! Неужели Вам нравится выступать в роли идиота?
Вы меня извините, но если Вам непонятна короткая статья на сайте, берите книжку, но задавать вопрос "чем отличается вычитание от взятия остатка от деления" взрослый человек может только доктору. Видимо, следующим вопросом будет "чем сложение от вычитания отличается?"
Здесь раздел "программирование", а не детский сад и не специализированное медицинское учреждение для альтернативно-одарённых.
5 пиратов решили пойти в рейд. Добычу поделить поровну, а на остаток погулять. Рейд был плохим. Получили 4 золотых. Итого каждый получил по 0, и на четыре погуляли, что бы никому обидно не было. Вот % это и есть пиратское деление.
короче понятно, просто тут оператор работает с целыми числами и не делит меньшее на большее. а в случае такой постановки примера выводит в качестве результата делимое игнорируя расчеты.
короче понятно, просто тут оператор работает с целыми числами и не делит меньшее на большее. а в случае такой постановки примера выводит в качестве результата делимое игнорируя расчеты.
вы идиот? может у вас и справка есть?
Оператор все делит и ничего не игонорирует, 4 поделить на 5 будет ноль для целых чисел, и относится это не только к оператору "%", но и к обычному делению "/"
Нет, это тяжёлый бред. Возможно, после тяжёлых наркотиков.
Posol88 пишет:
просто тут оператор работает с целыми числами и не делит меньшее на большее. а в случае такой постановки примера выводит в качестве результата делимое игнорируя расчеты.
Неверно. Правильно так:
просто тут тролль не знает арифметики уровня начальной школы, а в случае когда без этого никак, выводит свой бред на публику, игнорируя все советы хоть что-нибудь изучить.
короче понятно, просто тут оператор работает с целыми числами и не делит меньшее на большее. а в случае такой постановки примера выводит в качестве результата делимое игнорируя расчеты.
Теоретический материал для самостоятельного изучения
Ребята, мы вновь сегодня говорим о делении, о делении с остатком и рассмотрим ещё один случай. Нам нужно составить из двух палочек треугольник. Получится?
А из трёх палочек составить квадрат? Сможем?
Нет.
Треугольников мы составили ноль.
Квадратов составили тоже ноль.
Запишем при помощи чисел и знаков.
Два разделить на три равно нулю и остаток два.
Три разделить на четыре равно нулю и остаток три.
При делении меньшего числа на большее неполное частное всегда будет равно нулю, а остаток равен делимому.
Люди годами "занимаются ардуино", правда мало что понимают, в голове не откладывается ничего - но продолжают "смотреть видосы" на ютубе и задавать идиотские вопросы на форуме... ЗАЧЕМ??? - вопрос на докторскую степень...
Лично я ардуино первый раз взялся изучать около полутора месяцев назад, по видеоурокам кстати говоря(хотя сейчас пользуюсь в основном текстовыми материалами)...
До этого я даже английский не изучал, не то что программирование. И в принципе мне многое понятно с первого раза, но иногда возникают некоторые недопонимания описываемых пояснений. Приходится задать вопрос, так как самостоятельный поиск ответа чаще всего бывает безуспешным, а про его правильность и говорить нечего (Интернет однако).
Но каждый мой вопрос, на форуме,а именно Ваша аудитория не вызывает у меня сомнений в вопросе компетентности по программирования ардуино, по мимо ответа сопровождают целые тирады на тему состояния моего интеллекта. Но среди них, как правило, я нахожу ответы на свои вопросы.
Надеюсь Вам, уважаемые форумчане, Ваши высказывания , приносят не меньше удовольствия, чем мне получения, в конечном итоге, ответов на свои, глупые, вопросы.
получается что в типе int памяти не хватает? она при таком построении скетча не стирает что ли ни чего и хранит каждое пропечатанное значение?
размерность типа int на 8-битных платформах, по умолчанию - 2 байта, диапазон для знакового типа: [-32768,+32767].
Размерность unsigned long - 4 байта, диапазон значений: [0,+4294967295];
получается что в типе int памяти не хватает? она при таком построении скетча не стирает что ли ни чего и хранит каждое пропечатанное значение?
размерность типа int на 8-битных платформах, по умолчанию - 2 байта, диапазон для знакового типа: [-32768,+32767].
Размерность unsigned long - 4 байта, диапазон значений: [0,+4294967295];
это понятно, не понятно по чему не хватает типа int там же значение не превышает 300 - 310 миллисикунд, и после этого обнуляется. по чему интервал сбивается то?
а я думал под счетчик millis выделяется своя память...
это понятно, не понятно по чему не хватает типа int там же значение не превышает 300 - 310 миллисикунд, и после этого обнуляется. по чему интервал сбивается то?
возвращаемое millis() значение - имеет тип unsigned long, и НЕ ОБНУЛЯЕТСЯ до перезапуска контроллера. Вы возвращаемое значение в 4 байта пытаетесь упихнуть в двухбайтовую переменную, отсюда переполнение этой переменной. Дальше объяснять?
не, щас попробую переварить... спасибо)))
получается millis все время растет и занимяет больше места, и в определенный момент программа просто не может выполнить
по тому что обьем памяти занимаемый функцией millis превысил максимальный обьем памяти int
я это так понял
получается millis все время растет и занимяет больше места, и в определенный момент программа просто не может выполнить
по тому что обьем памяти занимаемый функцией millis превысил максимальный обьем памяти int
я это так понял
Нет, millis не занимает больше места - это вообще функция. Просто millis возвращает данные в переменной размерностью 4 байта, следовательно - переменная, которая принимает возвращаемое millis значение - должна быть такого же типа, как указано в документации к функции millis, т.е. unsigned long.
При этом никакого увеличения занимаемой памяти - нет. Вы путаете тёплое с круглым.
получается millis все время растет и занимяет больше места, и в определенный момент программа просто не может выполнить
по тому что обьем памяти занимаемый функцией millis превысил максимальный обьем памяти int
Как уже сказали миллис выполняется нормально, просто результат, в определенный момент, перестает впихиваться в int. И когда это происходить ваша программа начинает себя вести не так как вы задумывали.
Максимальное значение int это 32767. Миллис стартует с 0 и увеличивается на 1 за каждую миллисекунду. До истечении 32 с хвостиком секунд все работает как и задуманно, потом миллис переваливает за 32767 и продолжает увеличиваться, а в timeReques впихивается только часть от миллиса которая гарантированно меньше 32768. В результате вычитание millis() - timeRequest всегда дает больше заданных 300.
вот только что дошло до меня))) XD (не я и так понимал, но не понятно было в каком моменте и как это происходит в коде)))
миллис переваливает за 32767 и продолжает увеличиваться, а в timeReques впихивается только часть от миллиса которая гарантированно меньше 32768. В результате вычитание millis() - timeRequest всегда дает больше заданных 300.
Да. И самый простой и эффективный способ это указать что в расчете millis() - timeRequest тоже брать только ту часть у millis() которая влазит в timeReques, т.е. написать (int)millis() - timeRequest. Увеличение размера переменной timeReques также поможет, но это более затратно.
миллис переваливает за 32767 и продолжает увеличиваться, а в timeReques впихивается только часть от миллиса которая гарантированно меньше 32768. В результате вычитание millis() - timeRequest всегда дает больше заданных 300.
Да. И самый простой и эффективный способ это указать что в расчете millis() - timeRequest тоже брать только ту часть у millis() которая влазит в timeReques, т.е. написать (int)millis() - timeRequest. Увеличение размера переменной timeReques также поможет, но это более затратно.
век живи век учись, от меня это как-то ускользнуло )))
Похоже Logik тоже не безгрешен. Я бы вместо int написал uint16_t.
Нет предела совершенству)) Я бы тоже себе uint16_t написал, но не новичку на форуме. Ну и timeRequest такой же делать тогда.
у AVR GCC еще __uint24 есть
тут бы __uint9 годился ;)
А то и меньше. Зачастую и bool хватает.
А то и меньше. Зачастую и bool хватает.
uint0 O_o
А то и меньше. Зачастую и bool хватает.
а она не uint8_t занимает ???
uint0 O_o
Звучит!
а она не uint8_t занимает ???
Не важно сколько занимает. Важно сколько весит.)
Товарищи! всем привет. Подскажите пожалуйста чем "%" отличается от "-" ?
P.S. - я тут нашел один пример использования I2C модуля часов реального времени
в четвертой строчке кода 30 миллисекунд зачем пропускается? это от балды автор ляпнул или какое то сакральное предназначение имеет действие?
Товарищи! всем привет. Подскажите пожалуйста чем "%" отличается от "-" ?
Ну, прочитайте ж Вы, наконец, хоть какую-нибудь книжку о языке программирования! Хоть самую тоненькую - для дебилов! Хоть просто странички на этом сайте про % и про - прочитайте - ну сделайте же хоть что-нибудь! Неужели Вам нравится выступать в роли идиота?
так а я читаю, и на этом сайте в часности.
Пример
расечатать?
x = 7 % 5;
// x имеет значение 2
x = 9 % 5;
// x имеет значение 4
x = 5 % 5;
// x имеет значение 0
x = 4 % 5;
// x имеет значение 4
Пример
y = y + 3;
x = x - 7;
i = j * 6;
r = r / 5;
Синтаксис
расечатать?
result = value1 + value2;
result = value1 - value2;
result = value1 * value2;
result = value1 / value2;
и вопрос задаю, только когда не понятен ответ после прочтения всего этого
Вы меня извините, но если Вам непонятна короткая статья на сайте, берите книжку, но задавать вопрос "чем отличается вычитание от взятия остатка от деления" взрослый человек может только доктору. Видимо, следующим вопросом будет "чем сложение от вычитания отличается?"
Здесь раздел "программирование", а не детский сад и не специализированное медицинское учреждение для альтернативно-одарённых.
ругается, а все равно объясняет))
и все равно не понятно... из примера :
x = 4 % 5;
// x имеет значение 4
"% оператор
Возвращает остаток от деления одного целого (int) операнда на другой."
это как так нужно разделить 4 на 5 что бы в остатке получилось 4, когда результатом такого деления будет 0.8? ведь тут в остатке 8
(видимо теперь я буду послан изучать математику...)
это как так нужно разделить 4 на 5 что бы в остатке получилось 4
целочисленно!
В целых числах 4 делить на пять -будет ноль! И остаток 4. Что тут непонятно???
вот это вообще бред
именно
когда результатом такого деления будет 0.8? ведь тут в остатке 8
Вы решили потроллить и похихикать? Неудачный момент, у меня не то настроение
(видимо теперь я буду послан изучать математику...)
Нет, я Вам не верю, что Вы не знаете что такое остаток от деления, а потому посланы Вы будете гораздо дальше.
5 пиратов решили пойти в рейд. Добычу поделить поровну, а на остаток погулять. Рейд был плохим. Получили 4 золотых. Итого каждый получил по 0, и на четыре погуляли, что бы никому обидно не было. Вот % это и есть пиратское деление.
не я тут так понял просто
x = 7 % 5;
// x имеет значение 2
//7:5=1 и остаток 2
x = 9 % 5;
// x имеет значение 4
//9:5=1 и остаток 4
x = 5 % 5;
// x имеет значение 0
//5:5 = 1 и остаток 0
x = 4 % 5;
// x имеет значение 4
//4:5 = 0 и остаток 8
и вовсе не бред. просто легкое недопонимание.
x = 4 % 5;
// x имеет значение 4
//4:5 = 0 и остаток 8
и вовсе не бред. просто легкое недопонимание.
ПОЧЕМУ 8???? - именно бред
Остаток от деления никак не может быть больше делителя, неужели непонятно? - то есть больше пяти в этом случае
"Один дурак может задать вопросы, на которые и сто мудрецов не ответят", как говорится.
короче понятно, просто тут оператор работает с целыми числами и не делит меньшее на большее. а в случае такой постановки примера выводит в качестве результата делимое игнорируя расчеты.
короче понятно, просто тут оператор работает с целыми числами и не делит меньшее на большее. а в случае такой постановки примера выводит в качестве результата делимое игнорируя расчеты.
вы идиот? может у вас и справка есть?
Оператор все делит и ничего не игонорирует, 4 поделить на 5 будет ноль для целых чисел, и относится это не только к оператору "%", но и к обычному делению "/"
и вовсе не бред. просто легкое недопонимание.
Нет, это тяжёлый бред. Возможно, после тяжёлых наркотиков.
просто тут оператор работает с целыми числами и не делит меньшее на большее. а в случае такой постановки примера выводит в качестве результата делимое игнорируя расчеты.
Неверно. Правильно так:
просто тут тролль не знает арифметики уровня начальной школы, а в случае когда без этого никак, выводит свой бред на публику, игнорируя все советы хоть что-нибудь изучить.
Угу 28 танков в 7 рот по 13 штук
Пенсионер, поди. Судя по маразму, Всесоюзного значения.
Пенсионер, поди. Судя по маразму, Всесоюзного значения.
таких и молодых полно. Возможно цифры в нике - год рождения
короче понятно, просто тут оператор работает с целыми числами и не делит меньшее на большее. а в случае такой постановки примера выводит в качестве результата делимое игнорируя расчеты.
Теоретический материал для самостоятельного изучения
Ребята, мы вновь сегодня говорим о делении, о делении с остатком и рассмотрим ещё один случай. Нам нужно составить из двух палочек треугольник. Получится?
А из трёх палочек составить квадрат? Сможем?
Нет.
Треугольников мы составили ноль.
Квадратов составили тоже ноль.
Запишем при помощи чисел и знаков.
Два разделить на три равно нулю и остаток два.
Три разделить на четыре равно нулю и остаток три.
При делении меньшего числа на большее неполное частное всегда будет равно нулю, а остаток равен делимому.
о чем я и говорил
[/quote]
Возможно цифры в нике - год рождения
[/quote]
логика определенно Ваше))
При делении меньшего числа на большее неполное частное всегда будет равно нулю, а остаток равен делимому.
о чем я и говорил
вы говорили, что метод обрабатывает деление меньшего на большее как особый случай. "игнорируя расчеты" - что является бредом.
На самом деле никакой разницы между
9 / 5 = 1 и остаток 4
4 / 5 = 0 остаток 4
нет. Вычисление производится по одним и тем же правилам.
Не знаю. зачем я вам это пишу - видимо вы и правда троль
DetSimen, расчехляй картинко с указателем. И сертификат заодно.
https://www.youtube.com/watch?v=2H9StVnc6xc&feature=youtu.be
Что интересно: эта хрень "
if
(millis()%1000==0){
// если прошла 1 секунда
" похоже, неистребима.да. эта тема прямо клад для молодых психологов... или психиатров. Тут можно диссер писать прямо по форуму.
И таких тем много, напрмер
http://arduino.ru/forum/programmirovanie/vopros-pro-vyvod-otveta-s-komand-v-monitor-porta
Люди годами "занимаются ардуино", правда мало что понимают, в голове не откладывается ничего - но продолжают "смотреть видосы" на ютубе и задавать идиотские вопросы на форуме... ЗАЧЕМ??? - вопрос на докторскую степень...
Лично я ардуино первый раз взялся изучать около полутора месяцев назад, по видеоурокам кстати говоря(хотя сейчас пользуюсь в основном текстовыми материалами)...
До этого я даже английский не изучал, не то что программирование. И в принципе мне многое понятно с первого раза, но иногда возникают некоторые недопонимания описываемых пояснений. Приходится задать вопрос, так как самостоятельный поиск ответа чаще всего бывает безуспешным, а про его правильность и говорить нечего (Интернет однако).
Но каждый мой вопрос, на форуме,а именно Ваша аудитория не вызывает у меня сомнений в вопросе компетентности по программирования ардуино, по мимо ответа сопровождают целые тирады на тему состояния моего интеллекта. Но среди них, как правило, я нахожу ответы на свои вопросы.
Надеюсь Вам, уважаемые форумчане, Ваши высказывания , приносят не меньше удовольствия, чем мне получения, в конечном итоге, ответов на свои, глупые, вопросы.
продолжают "смотреть видосы" на ютубе
да к стати, ссылочка на ролик :http://kip-world.ru/podklyuchenie-chasov-realnogo-vremeni-ds1302-k-arduino.html
А какаво состояние твоего интеллекта, если деление с остатком в 3м классе праходют?
DetSimen, расчехляй картинко с указателем. И сертификат заодно.
У мня седня руки трясуцца после вчерашних дебошей.
деление с остатком в 3м классе праходют
А вычитание? :)
я напомню, на второй странице темы ТС спрашивал: "А почему тут тире?" - это про выражение ( currmillis - prevmillis > 100)