C++

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Hi All,

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

VLV


C++
Hello Vladimir.

27 Sep 03 17:43, Vladimir Vassilevsky wrote to all:

 VV> Есть клавиатура, которая состоит из контроллера клавиатуры, который
 VV> опрашивается по таймеру, который отрабатывает авторепит и прочие
 VV> параметры, которые устанавливаются в сетапе, который лежит в EEPROM.
 VV> Таймер, EEPROM и пр. имеют много других применений и взаимосвязей.
 VV> То есть много различных классов устройств, функционально связанных
 VV> между собой. Как наиболее красиво отразить это в структуре программы?

 Hадстроть CAL (common abstraction level) над HAL ? :)
 можно, например, реализовать систему callbacks от таймеров и прочих девайсов,
генерящих события..
 Если хочется совсем хорошо, то реализовать систему обмена сообщениями в CAL,
в-общем, наворачивать можно до бесконечности :)
 Hасчет Ц++ -ных паттернов generic callbacks, state machines, singletons и
прочих вещей выпущено довольно много литературы, кое-что можно посмотреть на
сайте то ли у Herb Sutter то ли у других столпов generic programming. URL точно
не помню, но можно поискать по словам "Guru of the week, GOTW"


Dmitry


Re: C++
27-Sep-03 16:43 Vladimir Vassilevsky wrote to All:

VV> Есть клавиатура, которая состоит из контроллера клавиатуры, который
VV> опрашивается по таймеру, который отрабатывает авторепит и прочие
VV> параметры, которые устанавливаются в сетапе, который лежит в EEPROM.
 А почему это таймер отрабатывает авторепит? Или это я запутался
в цепочке слов "который" :-) ?
 Это я в asm или C-программе могу всё затолкать в один обработчик
прерываний таймера и "по месту" в нём вписать клавиатуру, динамическую
индикацию, etc. Ещё и для экономии тактов частично размазав обработку
таймеров и таймаутов между обращениями к spi (в нескольких местах
динамическая индикация на 75hc595 сидит на spi).

 А тут уж "не таймерово дело" про автоповтор знать.

 IMHO авторепит должна отрабатывать клавиатруа и "клавиатара вообще"
должна иметь методы отсетапливания этого дела.
 И должно быть нечто "ТаймеромДёргальное" с виртуальной функцией
"Дёрг". Тогда наследовать клавиатуру, опрашиваемую по таймеру,
от КлавыВообще и ТаймеромДёргального и зарегистрировать эту новую
клавиатуру как (ТаймеромДёргальное*) у таймера в список дёргаемого
с нужной частотой. В смысле у таймера может быть несколько
списков - для 1,10,100 мс периода. Клавиатуру дёргать с интервалом
10мс и пусть она сама разбирается и с антидребезгом и с автоповтором.

wbr,
--
/* Oleksandr Redchuk, Brovary, Ukraine */
/* real '\x40' real '\x2E' kiev '\x2E' ua     */


Site Timeline