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

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


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

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



Кто-нибудь использует подобную библиотеку для работы с таймерами? Т.е. в прерывании одна переменная крутится, а работа с библиотекой выглядит, например,
нужен однократный таймер. указываем время, запускаем его, передаем указатель на ф-ю. Через установленное время срабатывает таймер, вызывается коллбэк ф-я, что передавалась при инициализации, и уже выполняется код, что в этой ф-ии.
Кто-нибудь сталкивался с таким подходом? Может есть у кого готовое решение на мегу?
Go to the top of the page
 
+Quote Post
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
st232bd
сообщение Nov 3 2015, 19:19
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 12-02-08
Из: г.Минск (РБ)
Пользователь №: 34 969



Я много лет назад на асме делал на MSP430. Циклограммы бил на цепочки функций. У 430 call с косвенной адресацией работает. Каждая функция грузит время следующего прерывания, указатель на следующую функцию и делает че надо. Типа односвязного списка с указателями. На си - указатель на функцию. Не нужна библиотека, все элементарно. Самый банальный пример - регенерация жки-двухстрочника. Образ памяти, и на каждое прерывание по символу, чтобы не ждать задержку. В образ пишешь быстро.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Nov 3 2015, 21:17
Сообщение #5


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

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



Цитата(demiurg1978 @ Mar 12 2015, 12:25) *
Плохой совет. Такой способ - мина замедленного действия.
Я сделал так: системный тик 1 мс. В прерывании таймера выставляется флаг.

Так ведь и сделано. Что-то вы попутались.

Сообщение отредактировал Herz - Nov 3 2015, 21:32
Причина редактирования: Грамматика.


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 03:22
Рейтинг@Mail.ru


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