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

 
 
> библиотека таймеров на мегу8
Метценгерштейн
сообщение Feb 26 2015, 19:54
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Кто-нибудь использует подобную библиотеку для работы с таймерами? Т.е. в прерывании одна переменная крутится, а работа с библиотекой выглядит, например,
нужен однократный таймер. указываем время, запускаем его, передаем указатель на ф-ю. Через установленное время срабатывает таймер, вызывается коллбэк ф-я, что передавалась при инициализации, и уже выполняется код, что в этой ф-ии.
Кто-нибудь сталкивался с таким подходом? Может есть у кого готовое решение на мегу?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
megajohn
сообщение Feb 27 2015, 04:03
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Метценгерштейн @ Feb 26 2015, 22:54) *
Может есть у кого готовое решение на мегу?


есть такой опенсорсный проект для детской машинки под IAR и mega48

там в algo.c написано

Код
    buzz_handler.init( buzz_func, period_10ms, 2 );
    systimer_add( &buzz_handler );

    algo_handler.init( algo_func, period_100ms, 3 );
    systimer_add( &algo_handler );


что означает, что в buzz_func будешь попадать каждые 20 мс, а в algo_func каждые 300 мс

чтобы однократно, то в конце каждой функции поставить buzz_handler.pause() и algo_handler.pause()

для твоей задачи, можно всё упростить, но не забывать что в прерывании нежелательно долго сидеть, а ты собираешся еще кучу функций вызывать


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Mar 12 2015, 08:25
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Цитата(megajohn @ Feb 27 2015, 10:03) *
...

Плохой совет. Такой способ - мина замедленного действия.

Я сделал так: системный тик 1 мс. В прерывании таймера выставляется флаг. В основном цикле типа служба программных таймеров. Если флаг сброшен, то выход. Если флаг установлен, то перебор очереди таймеров. Структура программного таймера - статус, 2 байтный счетчик. Если таймер включен, декремент счетчика. Если не ноль, следующий таймер. Если ноль, установка флага статуса, следующий таймер.

Но, чтобы пользоваться такой службой таймеров, нужно следовать следующим правилам. Модульность программы. Никаких долгих циклов. Задачи дробятся условиями, флагами, использованием конечных автоматов. Выполнение основного цикла должно уложиться в системный тик с запасом.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 8th August 2025 - 23:07
Рейтинг@Mail.ru


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