Куда пропадает точность _delay_ms() ?
- Реклама
[uquote="Карбофос",url="/forum/viewtopic.php?p=4223031#p4223031"]Займитесь собой.[/uquote]
не указывайте мне, что мне делать, и я не скажу, куда вам пойти.
не указывайте мне, что мне делать, и я не скажу, куда вам пойти.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Это не моя проблема.
Последний раз редактировалось Карбофос Ср апр 27, 2022 21:48:19, всего редактировалось 1 раз.
- Сообщения: 449
- Зарегистрирован: Пт окт 28, 2011 16:01:18
[uquote="Карбофос",url="/forum/viewtopic.php?p=4223055#p4223055"]А ты сам на листинг "машинного кода" посмотрел?[/uquote]
Ну и где здесь double?
Если спросите вежливо, могу даже рассказать как это получилось
Код: Выделить всё
#include <util/delay.h>
int main() {
_delay_us(2.34 * 1.67);
}
Код: Выделить всё
38: 80 e2 ldi r24, 0x20 ; 32
3a: 8a 95 dec r24
3c: f1 f7 brne .-4 ; 0x3a <main+0x2>
Если спросите вежливо, могу даже рассказать как это получилось
~Dimon~, скажите пожалуйста, как это получилось?
Я очень заранее благодарен Вам.
Я пошутил. Извините.
Я очень заранее благодарен Вам.
Я пошутил. Извините.
- Реклама
- Сообщения: 449
- Зарегистрирован: Пт окт 28, 2011 16:01:18
Компиляторы, это такие хитрые звери, которые очень любят константные выражения, то есть такие выражения, результат которых можно вычислить на этапе компиляции.
В данном случае, так как на входе _delay_us() оказалась константа, все внутренности функции так же превратились в константные выражения и были вычислены на этапе компиляции, что свело все к банальному for(ct = 32; ct; ct--);
Но это в общем не гарантия!
Смотрите листинг, что там нагенерил именно ваш компилятор, именно в вашем проекте, именно в сегодняшней фазе луны.
В данном случае, так как на входе _delay_us() оказалась константа, все внутренности функции так же превратились в константные выражения и были вычислены на этапе компиляции, что свело все к банальному for(ct = 32; ct; ct--);
Но это в общем не гарантия!
Смотрите листинг, что там нагенерил именно ваш компилятор, именно в вашем проекте, именно в сегодняшней фазе луны.
А Вы тему точно с 1-го поста читали?
чел решил скрестить ArduinoIDE с avr-gcc, у него не получилось.
Более того, он вручную управляет таймером 0, которым arduino считает свои микросекунды.
Эта тема чисто поржать.
чел решил скрестить ArduinoIDE с avr-gcc, у него не получилось.
Более того, он вручную управляет таймером 0, которым arduino считает свои микросекунды.
Эта тема чисто поржать.
- Сообщения: 278
- Зарегистрирован: Сб янв 03, 2015 21:03:24
[uquote="Карбофос",url="/forum/viewtopic.php?p=4222999#p4222999"]wiring.c не пробовали посмотреть?[/uquote]
пробовали. еще в первом посте об этом написано. но мне не нужны микросы и прерывание у меня ровно 1мс а не с погрешностью как там.
плюс зачем мне цикл в цикле и куча операций сложения вычетания ? чем мой более лаконичный вариант плох ?
PS: а вы точно читали ? кто где что пытался скрестить ? чё то вас занесло не в ту степь. извини дядя иди своей дорогой коль не разобрался. "нам такой хокей не нужен"
Добавлено after 4 minutes 52 seconds:
~Dimon~, спасибо за листинг.
PS: тут возник вопрос по самому прерыванию но уже задам в соответсвующей теме чтобы чтобы не делать кашы из темы
Добавлено after 2 minutes 55 seconds:
админы плиз закройте тему.
кто конструктивно участвовал - спасибо.
пробовали. еще в первом посте об этом написано. но мне не нужны микросы и прерывание у меня ровно 1мс а не с погрешностью как там.
плюс зачем мне цикл в цикле и куча операций сложения вычетания ? чем мой более лаконичный вариант плох ?
PS: а вы точно читали ? кто где что пытался скрестить ? чё то вас занесло не в ту степь. извини дядя иди своей дорогой коль не разобрался. "нам такой хокей не нужен"
Добавлено after 4 minutes 52 seconds:
~Dimon~, спасибо за листинг.
PS: тут возник вопрос по самому прерыванию но уже задам в соответсвующей теме чтобы чтобы не делать кашы из темы
Добавлено after 2 minutes 55 seconds:
админы плиз закройте тему.
кто конструктивно участвовал - спасибо.
- Сообщения: 449
- Зарегистрирован: Пт окт 28, 2011 16:01:18
Я в общем то насчет тех постов, в которых людей пугали double на входе _delay.
Оно там далеко не всегда страшное.
Оно там далеко не всегда страшное.
Я более всех конструктивно участвовал.
Добавлено after 3 minutes 45 seconds:
[uquote="~Dimon~",url="/forum/viewtopic.php?p=4223093#p4223093"]Я в общем то насчет тех постов, в которых людей пугали double на входе _delay.
Оно там далеко не всегда страшное.[/uquote]
Совершенно верно.
Просто, большинство людей - долбоёбы.
Добавлено after 3 minutes 45 seconds:
[uquote="~Dimon~",url="/forum/viewtopic.php?p=4223093#p4223093"]Я в общем то насчет тех постов, в которых людей пугали double на входе _delay.
Оно там далеко не всегда страшное.[/uquote]
Совершенно верно.
Просто, большинство людей - долбоёбы.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
[uquote="~Dimon~",url="/forum/viewtopic.php?p=4223093#p4223093"]Я в общем то насчет тех постов, в которых людей пугали double на входе _delay.[/uquote]
Если аврщик пишет float или double, то это - долбоеб откровеннейший!
Если аврщик пишет float или double, то это - долбоеб откровеннейший!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 362
- Зарегистрирован: Вс апр 03, 2022 07:01:29
Дааа, лет 8 назад на радиокоте обсуждали более сложные и более интересные вопросы, чем проблема счётчика миллисекунд... 
Хотя Эдя на всех форумах во все времена одинаков.
Хотя Эдя на всех форумах во все времена одинаков.
- Сообщения: 541
- Зарегистрирован: Вт фев 09, 2010 17:52:26
[uquote="alex68md",url="/forum/viewtopic.php?p=4222427#p4222427"]да прерывание срабатывает только на следующий процессорный тик. т.е. получится 256-1 = 255 реальных[/uquote]
Разве следующий это не плюс один?
Тогда нормально получается 255 + 1 = 256
Разве следующий это не плюс один?
Тогда нормально получается 255 + 1 = 256


