реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Интересная функция задержки, Вопрос по ассемблеру
Reboot_s
сообщение Aug 25 2006, 12:26
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 26
Регистрация: 9-05-05
Пользователь №: 4 855



Есть вот такая интересная функция задержки времени.
Сначала задается:
ldi AL, 125
Потом вызывается сама функция:
dly:
mov _Stm1, AL
tst _Stm1
brne PC-1
ret
При кварце в 10 МГц задержка выходит примерно в 500 мс.
Вопрос - как это работает, а именно, что постепенно обнуляет регистр _Stm1?
Go to the top of the page
 
+Quote Post
vet
сообщение Aug 25 2006, 12:37
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Очевидно, прерывание; предположительно, по таймеру.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 25 2006, 13:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Я бы сказал, что функция не интересная, а наоборот - тупая. Зачем использовать прерывание, если все равно выхода из функции не будет пока переменная _Stm1 не обнулится?


--------------------
Go to the top of the page
 
+Quote Post
Reboot_s
сообщение Aug 25 2006, 13:13
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 26
Регистрация: 9-05-05
Пользователь №: 4 855



Цитата(vet @ Aug 25 2006, 16:37) *
Очевидно, прерывание; предположительно, по таймеру.

Так оно и есть. Просто я разбираю чужой исходник и не люблю, когда не до конца все понимаю.
Решил, может это что-то чисто аппаратное, о чем я еще не знаю.
Спасибо. Тема закрыта.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 26 2006, 19:49
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(prottoss @ Aug 25 2006, 16:09) *
Я бы сказал, что функция не интересная, а наоборот - тупая. Зачем использовать прерывание, если все равно выхода из функции не будет пока переменная _Stm1 не обнулится?


Не следует делать скоропалительных выводов. smile.gif
Я иногда примерно так делал для формирования точных но больших временных интервалов. Скорее всего данное прерывание используется совсем не для этого. А это, так сказать, лишь мелкий довесок, - одна команда. Как правило когда используются в программе различные временные метки, то я их все формирую в одном прерывании по таймеру. Чем меньше в программе прерываний (учитывая отсутствие ранжирования), тем проще работать.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 26 2006, 21:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(SasaVitebsk @ Aug 27 2006, 03:49) *
Цитата(prottoss @ Aug 25 2006, 16:09) *
Я бы сказал, что функция не интересная, а наоборот - тупая. Зачем использовать прерывание, если все равно выхода из функции не будет пока переменная _Stm1 не обнулится?

Не следует делать скоропалительных выводов. smile.gif
Я иногда примерно так делал для формирования точных но больших временных интервалов. Скорее всего данное прерывание используется совсем не для этого. А это, так сказать, лишь мелкий довесок, - одна команда. Как правило когда используются в программе различные временные метки, то я их все формирую в одном прерывании по таймеру. Чем меньше в программе прерываний (учитывая отсутствие ранжирования), тем проще работать.
Я не хочу здесь начинать спорить о стилях программирования, я просто высказал мнение по поводу приведенного выше кода, и мнение мое однозначно.

Цитата(SasaVitebsk @ Aug 27 2006, 03:49) *
Чем меньше в программе прерываний (учитывая отсутствие ранжирования), тем проще работать.
))))))))))))))))))))))))))Нонсенс...


--------------------
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 27 2006, 22:41
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(prottoss @ Aug 27 2006, 00:25) *
Цитата(SasaVitebsk @ Aug 27 2006, 03:49) *
Цитата(prottoss @ Aug 25 2006, 16:09) *
Я бы сказал, что функция не интересная, а наоборот - тупая. Зачем использовать прерывание, если все равно выхода из функции не будет пока переменная _Stm1 не обнулится?

Не следует делать скоропалительных выводов. smile.gif
Я иногда примерно так делал для формирования точных но больших временных интервалов. Скорее всего данное прерывание используется совсем не для этого. А это, так сказать, лишь мелкий довесок, - одна команда. Как правило когда используются в программе различные временные метки, то я их все формирую в одном прерывании по таймеру. Чем меньше в программе прерываний (учитывая отсутствие ранжирования), тем проще работать.
Я не хочу здесь начинать спорить о стилях программирования, я просто высказал мнение по поводу приведенного выше кода, и мнение мое однозначно.

Цитата(SasaVitebsk @ Aug 27 2006, 03:49) *
Чем меньше в программе прерываний (учитывая отсутствие ранжирования), тем проще работать.
))))))))))))))))))))))))))Нонсенс...


В данном случае я имел ввиду "дублирующих или бесполезных прерываний". Зачем плодить 10 прерываний от таймера для формирования различных задержек?

Представьте себе что Вы обрабатываете канал информации. И недопустимы слишком большие задержки на обработку этого канала. У меня не более 250мкс. Вам надо кроме этого канала обработать прерывание от последовательного порта и сформировать следующие задержки: 1cек, 0.1сек, 20мс, 0.25сек, 8мс. При этом по некоторым из задержек приходится одновременно отсчитывать несколько интервалов.
Вы как по каждому интервалу свой таймер заводите?

Извините, но я избегаю ответов типа "однозначно" или "нонсенс". Это сродни "этого не может быть потому что этого я не могу себе представить". Я вовсе не защищаю автора той программы. Я её не видел. Но программирование мне нравится за то, что любую задачу можно решить десятком способов! И я отнюдь не уверен что Ваш, - самый правильный.

Сообщение отредактировал SasaVitebsk - Aug 27 2006, 22:43
Go to the top of the page
 
+Quote Post
CDT
сообщение Aug 28 2006, 05:17
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 303
Регистрация: 3-03-05
Пользователь №: 3 044



Цитата(prottoss @ Aug 25 2006, 16:09) *
Я бы сказал, что функция не интересная, а наоборот - тупая.

Цитата(SasaVitebsk @ Aug 28 2006, 01:41) *
Не следует делать скоропалительных выводов. smile.gif
Я иногда примерно так делал для формирования точных но больших временных интервалов.

Известно, что о вкусах не спорят, но зачем постоянно торчать в этом месте, если можно заходить время от времени (для максимальной точности - с интервалом прерываний или чаще) и делать
Код
tst AL

вместо
Код
mov _Stm1, AL
tst _Stm1

А пока идет выдержка поделать еще что-нибудь полезное.


--------------------
Опыт - чудесная вещь: легко использовать, можно продать, трудно пропить.
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 28 2006, 12:01
Сообщение #9


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(prottoss @ Aug 27 2006, 00:25) *
Цитата(SasaVitebsk @ Aug 27 2006, 03:49) *
Чем меньше в программе прерываний (учитывая отсутствие ранжирования), тем проще работать.
))))))))))))))))))))))))))Нонсенс...

Отнюдь не нонсенс.
Если делается что-то очень реалтаймовое, например звуковой канал или эмуляция синхронного интерфейса, то обилие прерываний может привести к глюкам.

Цитата
Я не хочу здесь начинать спорить о стилях программирования, я просто высказал мнение по поводу приведенного выше кода, и мнение мое однозначно.

ну я тогда тоже выскажу свое мнение:
вполне грамотная организация задержки. которая к тому же будет работать намного точнее чем __delay_cycles в совокупности с кучей прерываний.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 28 2006, 15:45
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(defunct @ Aug 28 2006, 20:01) *
ну я тогда тоже выскажу свое мнение:
вполне грамотная организация задержки. которая к тому же будет работать намного точнее чем __delay_cycles в совокупности с кучей прерываний.
Так, так...И в каком же месте она точнее?

Люблю послушать грамотеев)


--------------------
Go to the top of the page
 
+Quote Post
vet
сообщение Aug 28 2006, 15:57
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



prottoss
к чему ирония? разумеется, измерение отрезка времени таймером точнее, чем с помощью цикла, неизвестно на сколько времени продлённого разнообразными возникающими по ходу работы прерываниями.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
singlskv
сообщение Aug 28 2006, 18:39
Сообщение #12


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(prottoss @ Aug 25 2006, 17:09) *
Я бы сказал, что функция не интересная, а наоборот - тупая. Зачем использовать прерывание, если все равно выхода из функции не будет пока переменная _Stm1 не обнулится?

Интересно, а если у нас вся работа происходит в прерываниях, то что мы будем
делать, в то время пока не произошло интересуещее нас событие (ИМХО, ковырять в носу в
каком-нибудь пустом цикле smile.gif ).
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 28 2006, 18:58
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(vet @ Aug 28 2006, 23:57) *
prottoss
к чему ирония? разумеется, измерение отрезка времени таймером точнее, чем с помощью цикла, неизвестно на сколько времени продлённого разнообразными возникающими по ходу работы прерываниями.
Так и я о том же, а уважаемый defunct пытается доказать обратное

Цитата(singlskv @ Aug 29 2006, 02:39) *
Интересно, а если у нас вся работа происходит в прерываниях, то что мы будем
делать, в то время пока не произошло интересуещее нас событие (ИМХО, ковырять в носу в
каком-нибудь пустом цикле smile.gif ).
Кто то ковыряет в носу, а кто то спокойно спит)))

Сообщение отредактировал prottoss - Aug 28 2006, 19:00


--------------------
Go to the top of the page
 
+Quote Post
singlskv
сообщение Aug 28 2006, 19:14
Сообщение #14


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(prottoss @ Aug 28 2006, 22:58) *
Кто то ковыряет в носу, а кто то спокойно спит)))

Угу, а если после наступления события нам необходимо очень оперативно отреагировать ?
Типа, реалтайм какой-нибудь, а событие такое что выход из sleep не прикрутить ?
Дальше "спокойно спим". smile.gif
Уважаемый prottoss, если Вы умеете делать выводы о коде на основании
5-6 команд на ассемблере, то вероятно вы выбрали не ту профессию, возможно Вас ждет
большой успех в области ясновидения.

P.S. без обид пожалуйста smile.gif
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 28 2006, 19:56
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(singlskv @ Aug 29 2006, 03:14) *
Угу, а если после наступления события нам необходимо очень оперативно отреагировать ?
Типа, реалтайм какой-нибудь, а событие такое что выход из sleep не прикрутить ?
Дальше "спокойно спим". smile.gif
Уважаемый prottoss, если Вы умеете делать выводы о коде на основании
5-6 команд на ассемблере, то вероятно вы выбрали не ту профессию, возможно Вас ждет
большой успех в области ясновидения.
P.S. без обид пожалуйста smile.gif
Что Вы, какие обиды) Я просто стараюсь не обращать внимание на глупые реплики подобные вашим... Я всего лишь сказал, что не вижу смысла делать задержку на прерывании, если выхода из функции все равно нет! Раз уж все накинулись на меня скопом) давайте найдем истину). Вот обсуждаемый код:

Код
Сначала задается:
ldi AL, 125
Потом вызывается сама функция:
dly:
mov _Stm1, AL
tst _Stm1
brne PC-1
ret


Потоки, работающие по прерываниям и так отработают свое.. О какой точности идет речь? Между tst _Stm1 и brne PC-1 может возникнуть прерывание, которое сведет всю вашу точность на нет. И, наконец, можете описать, или придумать, хотя бы одну ситуацию, где нельзя прикрутить sleep хотя бы в режиме idle?

Сообщение отредактировал prottoss - Aug 28 2006, 19:58


--------------------
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01496 секунд с 7
ELECTRONIX ©2004-2016