|
Как правильно организовать архитектуру программы?, Архитектура для часов |
|
|
|
Aug 3 2015, 17:50
|
Группа: Участник
Сообщений: 9
Регистрация: 28-07-15
Пользователь №: 87 751

|
Как правильно организовать архитектуру программы для часов? Часы должны показывать время дату и температуру, по очереди с определённой задержкой. Как организовать настройку времени? Контроллер: Mega8; IDE: Atmel Studio.
|
|
|
|
|
 |
Ответов
|
Aug 21 2015, 07:30
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Конкретика? Пожалуйста: очередь таймеров, которая к тому же работает в прерывании. Такой способ вполне работоспособен, если устройство заточено на то, что задачи в очереди задач всегда одни и те же. И все действия которые будут происходить всегда предсказуемы. Но если у нас к примеру управляющее устройство. С разными режимами и так далее. Тем более, если еще есть аварийный режим. Представим, что мы положили в очередь задачу на исполнение через некоторое время. И тут аварийная ситуация, или просто режим сменился. Устройство работает себе, а тут срабатывает задача из очереди, которая в этом режиме никак не предусмотрена. Приплыли. Вы скажете, будем придумывать убийц задач. А откуда нам известно, какая задача должна работать в какой-то момент времени? Тем более, если задачи зависят от режима работы и так далее. Так что, то что слямзено у моторолы - это никак не показатель. Меня привлек в свое время этот "диспетчер". Но я столкнулся с его этой замедленной миной. В итоге от этого диспетчера у меня осталась таймерная служба, которая работает в ОСНОВНОМ цикле. Идем дальше. Переключение задач происходит гораздо дольше, чем простой список функций. Также примерно в то время мне указали на конечные автоматы. Итог, я составил себе определенные правила ниписания проектов. И до нынешнего момента мне не потребовались ни подобные недодиспетчеры ни РТОС. Пример основного цикла из действующего проекта: CODE //======================================================================== __C_task main () { wdt_enable (WDTO_15_MS);
/* dsp_buf [0] = 1; dsp_buf [1] = 2; dsp_buf [2] = 3; dsp_buf [3] = 4; dsp_buf [4] = 5; dsp_buf [5] = 6; */
init_sys_timer ();
__enable_interrupt ();
Init_Events ();
while (1) { __watchdog_reset ();
service_timers ();
proc_amplifier ();
proc_7_segm_ind ();
Process_Events (); } } //========================================================================
Запуск процесса каждое определенное время, на этом примере можно посмотреть, как запускать процессы периодически или через определенное время: CODE //======================================================================== void proc_7_segm_ind (void) { static u08 _proc_7_segm_ind;
static u08 cnt_7_segm_ind;
switch (_proc_7_segm_ind) { case 0: ANODS_DDR = 0xFF; cnt_7_segm_ind = 0; set_timer (ST_PROC_7_SEGM_IND, NO_RERUN_TIMER, 1); _proc_7_segm_ind = 1; break;
case 1: if (wait (ST_PROC_7_SEGM_IND)) { u08 cnt = cnt_7_segm_ind;
volatile u08 anods; volatile u08 katods;
ANODS_PORT = 0; KATODS_DDR = 0;
cnt_7_segm_ind = tab_index_anods [cnt].i; anods = tab_index_anods [cnt].anod;
katods = table_7_segm_char [dsp_buf [cnt_7_segm_ind]];
ANODS_PORT = anods; KATODS_DDR = katods;
set_timer (ST_PROC_7_SEGM_IND, NO_RERUN_TIMER, 1); } break;
default: _proc_7_segm_ind = 0; break; } } //========================================================================
Сообщение отредактировал demiurg1978 - Aug 21 2015, 07:37
|
|
|
|
|
Aug 21 2015, 08:14
|
Знающий
   
Группа: Свой
Сообщений: 708
Регистрация: 8-05-11
Из: Чг
Пользователь №: 64 861

|
Цитата(demiurg1978 @ Aug 21 2015, 11:06)  Представьте, что функции накидали задач в очередь. Светодиодами поморгать. Включить-выключить исп. устройство. И этих задач теперь в очереди болтается хренова куча. Да вы заколебетесь потом разгребать, что удалять из очереди, которая к тому же работает в прерываниях. Это такой винегрет получится из условий, что проект станет просто не читабелен. И вносить изменения, что-то добавить становится сложно. Да еще забудете второпях или не продумавши выкинуть задачи из очереди. Поэтому такой диспетчер нежизнеспособен в большинстве случаев. Также большое время переключения задач. Поэтому автоматное программирование выигрывает по всем пунктам такому недодиспетчеру. Есть состояния, в которых выполняются необходимые действия. И никаких коллизий быть не может в принципе. Только если не учел взаимосвязи и нюансы. ***Только если не учел взаимосвязи и нюансы.*** - это относится к любому применению любого алгоритма. Я нелюбимый вами диспетчер юзаю и проблем не имею, в том числе и на задачах уровня автоматизации цеха или контроллера умного дома. Засим предлагаю пофиксить дискуссию в связи с наметившимся переходом во флейм / халивар.
Сообщение отредактировал Onkel - Aug 21 2015, 08:15
|
|
|
|
Сообщений в этой теме
Maxi_Man Как правильно организовать архитектуру программы? Aug 3 2015, 17:50 RabidRabbit Архитектура программная, по-моему, сильно зависит ... Aug 4 2015, 06:22 kolobok0 Цитата(Maxi_Man @ Aug 3 2015, 20:50) Как ... Aug 4 2015, 11:00 CrimsonPig Цитата(Maxi_Man @ Aug 3 2015, 18:50) Как ... Aug 4 2015, 11:37 mempfis_ Цитата(Maxi_Man @ Aug 3 2015, 20:50) Как ... Aug 4 2015, 12:44 Maxi_Man Цитата(mempfis_ @ Aug 4 2015, 15:44) Дела... Aug 4 2015, 14:56  Jury093 Цитата(Maxi_Man @ Aug 4 2015, 17:56) Не м... Aug 4 2015, 19:07   demiurg1978 1 - Модульность программ.
Опрос кнопок.
Вывод инфо... Aug 5 2015, 07:25  mempfis_ Цитата(Maxi_Man @ Aug 4 2015, 17:56) Не м... Aug 6 2015, 08:09   Maxi_Man Цитата(mempfis_ @ Aug 6 2015, 11:09) Я ду... Aug 6 2015, 10:18    mempfis_ Цитата(Maxi_Man @ Aug 6 2015, 13:18) Спас... Aug 6 2015, 11:06        Onkel Цитата(demiurg1978 @ Aug 21 2015, 11:27) ... Aug 21 2015, 09:03         demiurg1978 Цитата(Onkel @ Aug 21 2015, 16:03) ...
В ... Aug 21 2015, 09:31          Onkel Цитата(demiurg1978 @ Aug 21 2015, 12:31) ... Aug 21 2015, 10:01 Onkel пы сы что- то не могу из ящика, дублирую тут
не, с... Aug 21 2015, 13:16 demiurg1978 Мои правила написания программ:
Весь набор правил... Aug 21 2015, 14:35 sigmaN Конечно от конкретной задачи таймера это делеко, н... Aug 30 2015, 05:50 Onkel Цитата(sigmaN @ Aug 30 2015, 08:50) Конеч... Sep 4 2015, 09:00  NicholasR Цитата(Onkel @ Sep 4 2015, 13:00) вряд ли... Sep 28 2015, 05:43   Onkel Цитата(NicholasR @ Sep 28 2015, 08:43) По... Sep 29 2015, 22:52    demiurg1978 Цитата(Onkel @ Sep 30 2015, 05:52) (на ос... Sep 30 2015, 04:02     Onkel Цитата(demiurg1978 @ Sep 30 2015, 07:02) ... Oct 1 2015, 20:56    NicholasR Цитата(Onkel @ Sep 30 2015, 02:52) сейчас... Sep 30 2015, 05:55
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|