кстати - для новичков - вот это и есть пример "велосипеда с костылем" "%1000" - явный велосипед, причем сваренный из водопроводной трубы, а delay(1) - костыль к нему, поскольку необходим из=за "трубного" наследия велосипеда. ;)))))))))))))
В этом коде delay(1) - необходим, потому, что millis()%1000 останется равным 0 в течении 1 мс, а цикл - значительно короче.
ну так я о чём, для этого кода он необходим и, человек его писавший это понимал,
то-есть показал знание языка С, а может показывал )))
Так как я С не владею, пришлось идти за книгой и смотреть, что да как
ну так я о чём, для этого кода он необходим и, человек его писавший это понимал,
понимал бы - не вставил бы в код %1000.
Ставлю на то, что делей появился в этом коде именно как костыль - то есть пока делея не было, код работал неустойчиво - вот и ПРИШЛОСЬ добавлять.
Является ли это признаком владения языком - сначала самому создать себе проблему, потом героически ее решить - это как посмотреть.
Я бы точно не смог даже теоретически написать %1000 а потом использовать отрицание-отрицания )))
Ограничился простым delay(1000) которого в этом случае за глаза
С другой стороны анекдот, что у нас даже гланды через ж... удаляют неспроста ведь возник
В этом коде delay(1) - необходим, потому, что millis()%1000 останется равным 0 в течении 1 мс, а цикл - значительно короче.
Зачем здесь delay() - понятно.
Что это - грубый костыль - тоже понятно.
Осталось добавить, что даже при наличии костыля эта конструкция все равно не будет устойчиво работать, потому что счетчик миллисекунд обновляется раз в 1024 мкс, а не раз в 1000 мкс, следовательно:
1. Периодически (но не строго периодично) пауза будет составлять не 1, а 2 секунды, т.к. приращение мс иногда происходит сразу на 2 единицы.
2. Если остальные действия в цикле в сумме занимают менее 24 мкс, время от времени будет наблюдаться два "срабатывания" подряд.
В этом коде delay(1) - необходим, потому, что millis()%1000 останется равным 0 в течении 1 мс, а цикл - значительно короче.
Зачем здесь delay() - понятно.
Осталось добавить, что даже при наличии костыля эта конструкция все равно не будет устойчиво работать, потому что счетчик миллисекунд обновляется раз в 1024 мкс, а не раз в 1000 мкс, следовательно:
Это точно? Функция миллис именно так и написана? Я считал, что использует micros(), а у ней точность 4 -ре микросекунды
Не поленился проверить, Вы заблуждаетесь!
unsigned long time_micros;
unsigned long time_millis;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
delay(8000);
time_micros = micros();
time_millis = millis();
//выводит количество микросекунд с момента начала выполнения программы
Serial.print(time_micros/1024);
Serial.print(" ");
Serial.println(time_millis);
Serial.println();
// ждет секунду, перед следующей итерацией цикла.
delay(1000);
}
unsigned long time_micros;
unsigned long time_millis;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
delay(8000);
time_micros = micros();
time_millis = millis();
//выводит количество микросекунд с момента начала выполнения программы
Serial.print(time_micros/1024);
Serial.print(" ");
Serial.println(time_millis);
Serial.println();
// ждет секунду, перед следующей итерацией цикла.
delay(1000);
}
Интересно, что именно Вы проверяли, и в чем именно я, по Вашему мнению, заблуждаюсь?
// the prescaler is set so that timer0 ticks every 64 clock cycles, and the
// the overflow handler is called every 256 ticks.
#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(64 * 256))
// the whole number of milliseconds per timer0 overflow
#define MILLIS_INC (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000)
// the fractional number of milliseconds per timer0 overflow. we shift right
// by three to fit these numbers into a byte. (for the clock speeds we care
// about - 8 and 16 MHz - this doesn't lose precision.)
#define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3)
#define FRACT_MAX (1000 >> 3)
volatile unsigned long timer0_overflow_count = 0;
volatile unsigned long timer0_millis = 0;
static unsigned char timer0_fract = 0;
#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ISR(TIM0_OVF_vect)
#else
ISR(TIMER0_OVF_vect)
#endif
{
// copy these to local variables so they can be stored in registers
// (volatile variables must be read from memory on every access)
unsigned long m = timer0_millis;
unsigned char f = timer0_fract;
m += MILLIS_INC;
f += FRACT_INC;
if (f >= FRACT_MAX) {
f -= FRACT_MAX;
m += 1;
}
timer0_fract = f;
timer0_millis = m;
timer0_overflow_count++;
}
unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer0_millis)
cli();
m = timer0_millis;
SREG = oldSREG;
return m;
}
ну началось )))
Сначала Клапауций в своих часиках на миллис не истинное значение переменной присваивал и всё сообщество этого не видело ...
Я понимаю, что программировать RTL сложно но Вы не представляете насколько сложно мне было ловить ваши косяки, приходилось делать пробники с триггерами защёлками и по нулю и по единице и только благодаря им их отлавливать...
Но это уже совсем другая история
И смотрим, пишут жеж, что можно, без потери точности - #define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3)
999 нацело делится на 3, на 9, на 27 и 37. Вас что-то еще интересует?
Если же Вас заинтересовал фрагмент дискуссии в постах 110, 113 и 114, то поясняю, что авторы wiring.c, фрагмент которого помещен в посте №110, в строках 11 и 12 сокращают дробь 24/1000 до 3/125, а в строках 8-10 объясняют, зачем они это делают.
кстати - для новичков - вот это и есть пример "велосипеда с костылем" "%1000" - явный велосипед, причем сваренный из водопроводной трубы, а delay(1) - костыль к нему, поскольку необходим из=за "трубного" наследия велосипеда. ;)))))))))))))
Интересно мнение профессионала, Вадим, а как ты бы обыграл эту ситуацию - поймать и обработать импульс по переднему фронту
Еще раз: ответ на этот вопрос содержится в строках 8-9 фрагмента wiring.c, который я разместил в сообщении 110. (я не думаю, что я должен своими словами пересказывать ответ, данный авторами исходника)
Но Вы все-таки ответьте на мой вопрос: что именно Вы пытались сделать в исходнике из сообщения №109, и как интерпретировали результат его прогона?
какой алгоритм кроме прямого выводы показаний микросекунд и миллисекунд может быть?
В опубликованном вами же ни разу не вижу, что миллис шлёпает через 1024 микросекунды
Хуже того, то-есть вижу непрофессионализм разработчиков (исходя из ваших слов) так как они применяют
и, я скажу вам довольно успешно, конструкцию вида x%1000 ;-)))
PS кода не смотрел да и толку, коли не понимаю в С, а вот на ассемблере смог бы, но коли счетчик микросекунд делят сдвигом на три бита когда в битах D0-D2 нули, не думаю чтобы скосячили в миллис )))
кстати - для новичков - вот это и есть пример "велосипеда с костылем" "%1000" - явный велосипед, причем сваренный из водопроводной трубы, а delay(1) - костыль к нему, поскольку необходим из=за "трубного" наследия велосипеда. ;)))))))))))))
Интересно мнение профессионала, Вадим, а как ты бы обыграл эту ситуацию - поймать и обработать импульс по переднему фронту
Так и не удалось заслушать начальника транспортного цеха:
Попытаюсь тогда самостоятельно:
Подытоживая, что костылём в этой конструкции является использование блокирующей функции delay(1) обойти её можно используя к примеру флаги, а использование простого чтения состояния пина 13 позволит экономить еще пару байт памяти программ
ЗЫ что удивительно - время исполнения кода в loop более 500 микросекунд и тормозит отнюдь не вывод в сериал )))
void loop(){
// Каждую секунду мигаем светодиодом и значение счетчика пишем в Serial
if(!(millis()%1000) && flag==0){
timer++;
Serial.println(timer);
// digitalWrite(13, digitalRead(13)==1?0:1);delay(1);
digitalWrite(13, !digitalRead(13));
flag = 1;
}
if(millis()%1000)flag=0;
}
Хуже того, то-есть вижу непрофессионализм разработчиков (исходя из ваших слов) так как они применяют
и, я скажу вам довольно успешно, конструкцию вида x%1000 ;-)))
Теперь над другой стороной поглумлюсь:
А где ты в коде увидел %1000 ??????
В #define? Так это компайл-тайм вычисления, к коду не имеют никакого отношения и туда не попадают.
Отсылки к якобы "знанию ассемблера" без знания С вызывают... ну как сказать... снисходительную ухмылку.
ua6em пишет:
Интересно мнение профессионала, Вадим, а как ты бы обыграл эту ситуацию - поймать и обработать импульс по переднему фронту
..... Так и не удалось заслушать начальника транспортного цеха:
Если это ко мне, то меня зовут не так. В каких областях необъятной России можно превратить имя Владислав в Вадим???? Просто любопытно? Потому, что оба на "В"? ;))))
Если это ко мне, то меня зовут не так. В каких областях необъятной России можно превратить имя Владислав в Вадим???? Просто любопытно? Потому, что оба на "В"? ;))))
Владислав! С именами у меня извечная проблема, за то ничего не скажу тем, кто так спрашивает так спрашивает )))
Имею точное представление о жёсткой логике то-есть сделать к примеру микропроцессор на элемантах жёсткой логики смог бы ...
Листинг читаю свободно (для интел) думаю что-то знаю всё жеж )))
Я жеж говорю драйвер дисководов гибких дисков мной был написан задолго до Альберто Паскуале, написан в машинных кодах, объем 3.6 килобайта, читал, писал и форматировал ЛЮБЫЕ дискеты 180/360/720/1.2/1.44 использовал INT13 (а не 21 как у него)
PS ассемблер у меня появился, но потом, версии 1.27
Владислав! С именами у меня извечная проблема, за то ничего не скажу тем, кто так спрашивает так спрашивает )))
Имею точное представление о жёсткой логике то-есть сделать к примеру микропроцессор на элемантах жёсткой логики смог бы ...
Листинг читаю свободно (для интел) думаю что-то знаю всё жеж )))
Я жеж говорю драйвер дисководов гибких дисков мной был написан задолго до Альберто Паскуале, написан в машинных кодах, объем 3.6 килобайта, читал, писал и форматировал ЛЮБЫЕ дискеты 180/360/720/1.2/1.44 использовал INT13 (а не 21 как у него)
PS ассемблер у меня появился, но потом, версии 1.27
Это не ассемблер, а знание архитектуры первых ПК, уровня 8086-8088. Прерывание 21 - системный вызов ДОС, 13 - БИОС в стандартном режиме - дисковый интерфейс. Знание интерфейса БИОС первыз ПиСюков - круто, но какое отношение это имеет к программированию вообще?
Если уж "по Гамбургскому счету", то в Кнуте много машинного кода? А это все-таки "Тора" програмиста. Ну да ладно...
Прерывание 21 - системный вызов ДОС, 13 - БИОС в стандартном режиме - дисковый интерфейс.
Вот это память! (реально круто)
Круто, это когда ты анализируя код Чернобыля, понимаешь, что сотни тысяч программистов зная команду перехода процессора на нулевой уровень не написали эту блудь )))
PS вот чесслово интуитивно предполагал что конструкция x%y реализована как команда процессора, логично жеж?
набор слов. Какой ху? Какого ху? У какого процессора?
Вычисления до компиляции происходят ДО компиляции... неожиданно?
Ты думаешь, что
#define r2 sqrt(2.0)
компилируется в вычисление квадратного корня? Как я всегда предлагаю слушателям: "А ты поставь себя на место автора, зачем бы стал так делать? Сознательно вредить? Таких людей мало.".
Конечно все что можно вычислить на этапе компиляции - тогда и вычисляется. Более того, выражение
"а = 2+3;" на практически любом современном компиляторе компилируется как "a = 5;".
имеем: одна переменная, вторая константа и?, как тут не быть дураком после твоих слов???
Я предполагал, берём переменную по адресу, делим на константу, смотрим флаг
имеем: одна переменная, вторая константа и?, как тут не быть дураком после твоих слов???
Я предполагал, берём переменную по адресу, делим на константу, смотрим флаг
ты не следишь за темой разговора. Я уже давно говорю о куске кода из wiring.c, который представил Андиано, и про который ты заявил о "непрофессионализме" ссылаясь на использование "%". Про миллис мы давно закончили.
имеем: одна переменная, вторая константа и?, как тут не быть дураком после твоих слов???
Я предполагал, берём переменную по адресу, делим на константу, смотрим флаг
ты не следишь за темой разговора. Я уже давно говорю о куске кода из wiring.c, который представил Андиано, и про который ты заявил о "непрофессионализме" ссылаясь на использование "%". Про миллис мы давно закончили.
Будь внимателен!
сей предмет не входит в круг моих понятий ))) а счетчик микро разве не переменная величина, я так понимал, что программа обрабатывая счетчик микро ждёт совпадения кратного 1000 и сдвигает значение вправо на 3, так как в D0-D2 нули, так и пишут - без потери точности
Так всё же 1000 или 1024? Не пойму, где это прописано?
Мой скетч выводит, что микро с миллисом шлёпают синхронно если счетчик микро делим на 1000 и несинхронно, если на 1024
прочитайте внимательно ссылку, на которую сами ссылаетесь. "Товарищ" нигде не утверждал. что миллис образуется делением на 1024. Он писал, что миллис обновляется раз в 1024 микроса. Это как бы разница, не находите?
прочитайте внимательно ссылку, на которую сами ссылаетесь. "Товарищ" нигде не утверждал. что миллис образуется делением на 1024. Он писал, что миллис обновляется раз в 1024 микроса. Это как бы разница, не находите?
не нахожу, я понимаю прямо - счетчик миллис увеличивает свое значение на единицу раз в 1024 микросекунды, не, ну если тут все отчаянные охотники убившие "3 целых 72 сотых зайца и 5 целых 34 сотых лисицы", тогда да
Подключайтесь...а то тут меня уже запинали типа гранаты у меняif(!(millis()%1000)){ не той системы
Вас действительно интересует моё мнение?
Ну, что сказать … «Так-то оно так, потому как не может того быть, кабы не было бы никак. И не потому, что оно вообще, а потому что когда оно что, тогда оно и пожалуйста».
В общем, тут часто народ пускается в теоретизирование. оторванное от конкретной ситуации. Никогда не забуду, как мне начали возражать с вводной фразы: «А вот в некоторых четырёхразрядных процессорах …»
Ну, так и здесь. Ежели про четырёхразрядные процессоры, то оно, конечно, да, а вот если про конкретный код из поста #80, да ещё и на конкретной частоте 16 мегагерц, то «тогда оно и пожалуйста».
andriano пишет:
счетчик миллисекунд обновляется раз в 1024 мкс, а не раз в 1000 мкс
Таки, да. Согласен.
andriano пишет:
эта конструкция все равно не будет устойчиво работать,
С какого перепугу? Какая-то абстрактная конско-вакуумная конструкция – возможно, но конкретная конструкция из поста #80 чем виновата? Нормально она будет работать.
andriano пишет:
1. Периодически (но не строго периодично) пауза будет составлять не 1, а 2 секунды, т.к. приращение мс иногда происходит сразу на 2 единицы.
Приращение действительно иногда происходит на 2 мс и какие-то значения пропускаются. Но среди пропущенных значений нет ни одного кратного 1000! Так что к данной конкретной конструкции сиё замечание не относится. К коню в вакууме – да, а к этой конструкции – нет.
andriano пишет:
2. Если остальные действия в цикле в сумме занимают менее 24 мкс, время от времени будет наблюдаться два "срабатывания" подряд.
Остальные действия в данной конструкции – это вот это?
Менее 24 мкс? Ну, andriano, наверное, сам долго смеялся, когда это написал. Т.е. как и выше – замечание верно про коня в вакууме, но не про конкретный код из поста #80.
Оно, конечно, код в посте 80 уж больно любительский, но данные конкретные претензии - не про него.
так код не синхронный жеж тогда, его плющит, как минимум раз в 40 миллисекунд
так упомянутый вами "товарищ" именно про это и писал - а вы спорить начали
мы не в церкви, на веру не воспринимаем, показал бы код, чтобы начинающему это понятно было и флуда бы не было )))
Проверил, написал простеший код, смотрю Logic-om, да плющит (сжимает импульс) каждые 40 миллисекунд
unsigned long my = 0;
void setup() {
pinMode(12,OUTPUT);
digitalWrite(12,HIGH);
my = millis();
}
void loop() {
if(millis()-my >=9){
digitalWrite(12,!digitalRead(12));
my = millis();
}
}
Теперь то понятно, нужны точные интервали micros() вам в руки )))
PS и эти люди кидали в меня ссаными тряпками, когда я в своих часиках на миллис вводил трехэтапный режим корректировки )))
кстати - для новичков - вот это и есть пример "велосипеда с костылем" "%1000" - явный велосипед, причем сваренный из водопроводной трубы, а delay(1) - костыль к нему, поскольку необходим из=за "трубного" наследия велосипеда. ;)))))))))))))
В этом коде delay(1) - необходим, потому, что millis()%1000 останется равным 0 в течении 1 мс, а цикл - значительно короче.
ну так я о чём, для этого кода он необходим и, человек его писавший это понимал,
то-есть показал знание языка С, а может показывал )))
Так как я С не владею, пришлось идти за книгой и смотреть, что да как
ну так я о чём, для этого кода он необходим и, человек его писавший это понимал,
понимал бы - не вставил бы в код %1000.
Ставлю на то, что делей появился в этом коде именно как костыль - то есть пока делея не было, код работал неустойчиво - вот и ПРИШЛОСЬ добавлять.
Является ли это признаком владения языком - сначала самому создать себе проблему, потом героически ее решить - это как посмотреть.
ну так я о чём, для этого кода он необходим и, человек его писавший это понимал,
понимал бы - не вставил бы в код %1000.
Ставлю на то, что делей появился в этом коде именно как костыль - то есть пока делея не было, код работал неустойчиво - вот и ПРИШЛОСЬ добавлять.
Является ли это признаком владения языком - сначала самому создать себе проблему, потом героически ее решить - это как посмотреть.
Я бы точно не смог даже теоретически написать %1000 а потом использовать отрицание-отрицания )))
Ограничился простым delay(1000) которого в этом случае за глаза
С другой стороны анекдот, что у нас даже гланды через ж... удаляют неспроста ведь возник
Кстати, хорошая статья мне многое прояснила
оставь ссылку в Песочнице, чтобы не потерялась. Немного скомкано, но нормально.
В этом коде delay(1) - необходим, потому, что millis()%1000 останется равным 0 в течении 1 мс, а цикл - значительно короче.
Что это - грубый костыль - тоже понятно.
Осталось добавить, что даже при наличии костыля эта конструкция все равно не будет устойчиво работать, потому что счетчик миллисекунд обновляется раз в 1024 мкс, а не раз в 1000 мкс, следовательно:
1. Периодически (но не строго периодично) пауза будет составлять не 1, а 2 секунды, т.к. приращение мс иногда происходит сразу на 2 единицы.
2. Если остальные действия в цикле в сумме занимают менее 24 мкс, время от времени будет наблюдаться два "срабатывания" подряд.
Кстати, хорошая статья мне многое прояснила
Поддерживаю Влада, если не трудно запостите в песочницу. Со всех просторов я собрать не сумею и забуду. А там постоянно просматриваю и редактирую.
В этом коде delay(1) - необходим, потому, что millis()%1000 останется равным 0 в течении 1 мс, а цикл - значительно короче.
Осталось добавить, что даже при наличии костыля эта конструкция все равно не будет устойчиво работать, потому что счетчик миллисекунд обновляется раз в 1024 мкс, а не раз в 1000 мкс, следовательно:
Это точно? Функция миллис именно так и написана? Я считал, что использует micros(), а у ней точность 4 -ре микросекунды
Не поленился проверить, Вы заблуждаетесь!
Не поленился проверить, Вы заблуждаетесь!
Интересно, что именно Вы проверяли, и в чем именно я, по Вашему мнению, заблуждаюсь?
...
Ну? ;))))))))) дык 1000 или 1024?
Зависит от того, в какой валюте.
ну началось )))
Сначала Клапауций в своих часиках на миллис не истинное значение переменной присваивал и всё сообщество этого не видело ...
Я понимаю, что программировать RTL сложно но Вы не представляете насколько сложно мне было ловить ваши косяки, приходилось делать пробники с триггерами защёлками и по нулю и по единице и только благодаря им их отлавливать...
Но это уже совсем другая история
И смотрим, пишут жеж, что можно, без потери точности -
#define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3)
И смотрим, пишут жеж, что можно, без потери точности -
#define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3)
999 нацело не делится, нет?
999 нацело делится на 3, на 9, на 27 и 37. Вас что-то еще интересует?
Если же Вас заинтересовал фрагмент дискуссии в постах 110, 113 и 114, то поясняю, что авторы wiring.c, фрагмент которого помещен в посте №110, в строках 11 и 12 сокращают дробь 24/1000 до 3/125, а в строках 8-10 объясняют, зачем они это делают.
а какая разница между 24/1000 и 3/125 ?
кстати - для новичков - вот это и есть пример "велосипеда с костылем" "%1000" - явный велосипед, причем сваренный из водопроводной трубы, а delay(1) - костыль к нему, поскольку необходим из=за "трубного" наследия велосипеда. ;)))))))))))))
Интересно мнение профессионала, Вадим, а как ты бы обыграл эту ситуацию - поймать и обработать импульс по переднему фронту
а какая разница между 24/1000 и 3/125 ?
Но Вы все-таки ответьте на мой вопрос: что именно Вы пытались сделать в исходнике из сообщения №109, и как интерпретировали результат его прогона?
пытался проверить ваше утверждение - что счетчик миллисекунд обновляется раз в 1024 мкс, а не раз в 1000 мкс, следовательно:
пытался проверить ваше утверждение - что счетчик миллисекунд обновляется раз в 1024 мкс, а не раз в 1000 мкс, следовательно:
Опишите алгоритм и расскажите, почему он должен приводить к такому выводу.
Опишите алгоритм и расскажите, почему он должен приводить к такому выводу.
...Та побистрее, швайн! - сказал он, похлопывая стеком по надраенному голенищу. ;)))))))))))
какой алгоритм кроме прямого выводы показаний микросекунд и миллисекунд может быть?
В опубликованном вами же ни разу не вижу, что миллис шлёпает через 1024 микросекунды
#define MILLIS_INC (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000)
Хуже того, то-есть вижу непрофессионализм разработчиков (исходя из ваших слов) так как они применяют
и, я скажу вам довольно успешно, конструкцию вида x%1000 ;-)))
PS кода не смотрел да и толку, коли не понимаю в С, а вот на ассемблере смог бы, но коли счетчик микросекунд делят сдвигом на три бита когда в битах D0-D2 нули, не думаю чтобы скосячили в миллис )))
кстати - для новичков - вот это и есть пример "велосипеда с костылем" "%1000" - явный велосипед, причем сваренный из водопроводной трубы, а delay(1) - костыль к нему, поскольку необходим из=за "трубного" наследия велосипеда. ;)))))))))))))
Интересно мнение профессионала, Вадим, а как ты бы обыграл эту ситуацию - поймать и обработать импульс по переднему фронту
Так и не удалось заслушать начальника транспортного цеха:
Попытаюсь тогда самостоятельно:
Подытоживая, что костылём в этой конструкции является использование блокирующей функции delay(1) обойти её можно используя к примеру флаги, а использование простого чтения состояния пина 13 позволит экономить еще пару байт памяти программ
ЗЫ что удивительно - время исполнения кода в loop более 500 микросекунд и тормозит отнюдь не вывод в сериал )))
Хуже того, то-есть вижу непрофессионализм разработчиков (исходя из ваших слов) так как они применяют
и, я скажу вам довольно успешно, конструкцию вида x%1000 ;-)))
Теперь над другой стороной поглумлюсь:
А где ты в коде увидел %1000 ??????
В #define? Так это компайл-тайм вычисления, к коду не имеют никакого отношения и туда не попадают.
Отсылки к якобы "знанию ассемблера" без знания С вызывают... ну как сказать... снисходительную ухмылку.
Интересно мнение профессионала, Вадим, а как ты бы обыграл эту ситуацию - поймать и обработать импульс по переднему фронту
.....
Так и не удалось заслушать начальника транспортного цеха:
Если это ко мне, то меня зовут не так. В каких областях необъятной России можно превратить имя Владислав в Вадим???? Просто любопытно? Потому, что оба на "В"? ;))))
Если это ко мне, то меня зовут не так. В каких областях необъятной России можно превратить имя Владислав в Вадим???? Просто любопытно? Потому, что оба на "В"? ;))))
Да, и оба вместо "V" используют "W".))))
Владислав! С именами у меня извечная проблема, за то ничего не скажу тем, кто так спрашивает так спрашивает )))
Имею точное представление о жёсткой логике то-есть сделать к примеру микропроцессор на элемантах жёсткой логики смог бы ...
Листинг читаю свободно (для интел) думаю что-то знаю всё жеж )))
Я жеж говорю драйвер дисководов гибких дисков мной был написан задолго до Альберто Паскуале, написан в машинных кодах, объем 3.6 килобайта, читал, писал и форматировал ЛЮБЫЕ дискеты 180/360/720/1.2/1.44 использовал INT13 (а не 21 как у него)
PS ассемблер у меня появился, но потом, версии 1.27
Владислав! С именами у меня извечная проблема, за то ничего не скажу тем, кто так спрашивает так спрашивает )))
Имею точное представление о жёсткой логике то-есть сделать к примеру микропроцессор на элемантах жёсткой логики смог бы ...
Листинг читаю свободно (для интел) думаю что-то знаю всё жеж )))
Я жеж говорю драйвер дисководов гибких дисков мной был написан задолго до Альберто Паскуале, написан в машинных кодах, объем 3.6 килобайта, читал, писал и форматировал ЛЮБЫЕ дискеты 180/360/720/1.2/1.44 использовал INT13 (а не 21 как у него)
PS ассемблер у меня появился, но потом, версии 1.27
Это не ассемблер, а знание архитектуры первых ПК, уровня 8086-8088. Прерывание 21 - системный вызов ДОС, 13 - БИОС в стандартном режиме - дисковый интерфейс. Знание интерфейса БИОС первыз ПиСюков - круто, но какое отношение это имеет к программированию вообще?
Если уж "по Гамбургскому счету", то в Кнуте много машинного кода? А это все-таки "Тора" програмиста. Ну да ладно...
Вот это память! (реально круто)
Знание интерфейса БИОС первыз ПиСюков - круто, но какое отношение это имеет к программированию вообще?
Я не знал интерфейс, я мог написать ПО заменяющее любое прерывание на уровне БИОС )))
С пытаюсь одолеть более 30 лет, не задалось )))
PS вот чесслово интуитивно предполагал что конструкция x%y реализована как команда процессора, логично жеж?
Круто, это когда ты анализируя код Чернобыля, понимаешь, что сотни тысяч программистов зная команду перехода процессора на нулевой уровень не написали эту блудь )))
PS вот чесслово интуитивно предполагал что конструкция x%y реализована как команда процессора, логично жеж?
набор слов. Какой ху? Какого ху? У какого процессора?
Вычисления до компиляции происходят ДО компиляции... неожиданно?
Ты думаешь, что
#define r2 sqrt(2.0)
компилируется в вычисление квадратного корня? Как я всегда предлагаю слушателям: "А ты поставь себя на место автора, зачем бы стал так делать? Сознательно вредить? Таких людей мало.".
Конечно все что можно вычислить на этапе компиляции - тогда и вычисляется. Более того, выражение
"а = 2+3;" на практически любом современном компиляторе компилируется как "a = 5;".
имеем: одна переменная, вторая константа и?, как тут не быть дураком после твоих слов???
Я предполагал, берём переменную по адресу, делим на константу, смотрим флаг
имеем: одна переменная, вторая константа и?, как тут не быть дураком после твоих слов???
Я предполагал, берём переменную по адресу, делим на константу, смотрим флаг
ты не следишь за темой разговора. Я уже давно говорю о куске кода из wiring.c, который представил Андиано, и про который ты заявил о "непрофессионализме" ссылаясь на использование "%". Про миллис мы давно закончили.
Будь внимателен!
имеем: одна переменная, вторая константа и?, как тут не быть дураком после твоих слов???
Я предполагал, берём переменную по адресу, делим на константу, смотрим флаг
ты не следишь за темой разговора. Я уже давно говорю о куске кода из wiring.c, который представил Андиано, и про который ты заявил о "непрофессионализме" ссылаясь на использование "%". Про миллис мы давно закончили.
Будь внимателен!
сей предмет не входит в круг моих понятий ))) а счетчик микро разве не переменная величина, я так понимал, что программа обрабатывая счетчик микро ждёт совпадения кратного 1000 и сдвигает значение вправо на 3, так как в D0-D2 нули, так и пишут - без потери точности
Так всё же 1000 или 1024? Не пойму, где это прописано?
Мой скетч выводит, что микро с миллисом шлёпают синхронно если счетчик микро делим на 1000 и несинхронно, если на 1024
Если Влад на автомате такие конструкции пишет, что же он напишет на пулемёте )))
Вы об этой конструкции?
так она ж вроде .... старая как дерьмо мамонта. Это кусок был на хабре ещё в 2013 году (там под спойлером найдёте).
А вообще, весело у вас тут без меня :))))
А вообще, весело у вас тут без меня :))))
Подключайтесь...а то тут меня уже запинали типа гранаты у меня
if
(!(millis()%1000)){
не той системыPS и никто Дрёмкина за его код не распинал
Да, гранаты, они вечно. А чего там про 1000 и 1024, если коротко. я то я же задолбался страницы темы листать?
Да, гранаты, они вечно. А чего там про 1000 и 1024, если коротко. я то я же задолбался страницы темы листать?
да товарищ утверждает, что миллис образуется делением микро на 1024 так что конструкция
if
(!(millis()%1000)){ будет всегда лажать
да товарищ утверждает, что миллис образуется делением микро на 1024
прочитайте внимательно ссылку, на которую сами ссылаетесь. "Товарищ" нигде не утверждал. что миллис образуется делением на 1024. Он писал, что миллис обновляется раз в 1024 микроса. Это как бы разница, не находите?
да товарищ утверждает, что миллис образуется делением микро на 1024
прочитайте внимательно ссылку, на которую сами ссылаетесь. "Товарищ" нигде не утверждал. что миллис образуется делением на 1024. Он писал, что миллис обновляется раз в 1024 микроса. Это как бы разница, не находите?
не нахожу, я понимаю прямо - счетчик миллис увеличивает свое значение на единицу раз в 1024 микросекунды, не, ну если тут все отчаянные охотники убившие "3 целых 72 сотых зайца и 5 целых 34 сотых лисицы", тогда да
ЗЫ текст не авторский, журнал Крокодил 1966 год
я понимаю прямо - счетчик миллис увеличивает свое значение на единицу раз в 1024 микросекунды
счетчик миллис увеличивает свое значение раз в 1024 микрос - это верно. Но вовсе не обязательно на единицу.
Чтобы проще было въехать в тему - представьте секундный счетчик, который обновляет свое значение раз в 5 секунд - сразу на 5 секунд.
я понимаю прямо - счетчик миллис увеличивает свое значение на единицу раз в 1024 микросекунды
счетчик миллис увеличивает свое значение раз в 1024 микрос - это верно. Но вовсе не обязательно на единицу.
Чтобы проще было въехать в тему - представьте секундный счетчик, который обновляет свое значение раз в 5 секунд - сразу на 5 секунд.
Серьёзно? Так написан миллис? Кошмар! Куда мир катится...всё худшее, что я встречал на PC перетащили на ардуино
Серьёзно? Так написан миллис? Кошмар!
и что же в этом кошмарного? В миллисе ровно 1000 микросов
Серьёзно? Так написан миллис? Кошмар!
и что же в этом кошмарного? В миллисе ровно 1000 микросов
так код не синхронный жеж тогда, его плющит, как минимум раз в 40 миллисекунд
так код не синхронный жеж тогда, его плющит, как минимум раз в 40 миллисекунд
так упомянутый вами "товарищ" именно про это и писал - а вы спорить начали
А где вы в наше время встречали синхронность? Даже плаванье уже не то...
Подключайтесь...а то тут меня уже запинали типа гранаты у меня
if
(!(millis()%1000)){
не той системыВас действительно интересует моё мнение?
Ну, что сказать … «Так-то оно так, потому как не может того быть, кабы не было бы никак. И не потому, что оно вообще, а потому что когда оно что, тогда оно и пожалуйста».
В общем, тут часто народ пускается в теоретизирование. оторванное от конкретной ситуации. Никогда не забуду, как мне начали возражать с вводной фразы: «А вот в некоторых четырёхразрядных процессорах …»
Ну, так и здесь. Ежели про четырёхразрядные процессоры, то оно, конечно, да, а вот если про конкретный код из поста #80, да ещё и на конкретной частоте 16 мегагерц, то «тогда оно и пожалуйста».
счетчик миллисекунд обновляется раз в 1024 мкс, а не раз в 1000 мкс
Таки, да. Согласен.
эта конструкция все равно не будет устойчиво работать,
С какого перепугу? Какая-то абстрактная конско-вакуумная конструкция – возможно, но конкретная конструкция из поста #80 чем виновата? Нормально она будет работать.
1. Периодически (но не строго периодично) пауза будет составлять не 1, а 2 секунды, т.к. приращение мс иногда происходит сразу на 2 единицы.
Приращение действительно иногда происходит на 2 мс и какие-то значения пропускаются. Но среди пропущенных значений нет ни одного кратного 1000! Так что к данной конкретной конструкции сиё замечание не относится. К коню в вакууме – да, а к этой конструкции – нет.
2. Если остальные действия в цикле в сумме занимают менее 24 мкс, время от времени будет наблюдаться два "срабатывания" подряд.
Остальные действия в данной конструкции – это вот это?
Менее 24 мкс? Ну, andriano, наверное, сам долго смеялся, когда это написал. Т.е. как и выше – замечание верно про коня в вакууме, но не про конкретный код из поста #80.
Оно, конечно, код в посте 80 уж больно любительский, но данные конкретные претензии - не про него.
так код не синхронный жеж тогда, его плющит, как минимум раз в 40 миллисекунд
так упомянутый вами "товарищ" именно про это и писал - а вы спорить начали
мы не в церкви, на веру не воспринимаем, показал бы код, чтобы начинающему это понятно было и флуда бы не было )))
Проверил, написал простеший код, смотрю Logic-om, да плющит (сжимает импульс) каждые 40 миллисекунд
Теперь то понятно, нужны точные интервали micros() вам в руки )))
PS и эти люди кидали в меня ссаными тряпками, когда я в своих часиках на миллис вводил трехэтапный режим корректировки )))
А где вы в наше время встречали синхронность? Даже плаванье уже не то...
ой, не говорите. С тех пор как там появились мужики, я и на девочек-то смотреть не могу. Только посмотрю, тут жемужиков представляю :(