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

 
 
> Структура программы, Вырабатываю хороший стиль программирования
UniBomb
сообщение Mar 18 2009, 11:33
Сообщение #1


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

Группа: Свой
Сообщений: 148
Регистрация: 26-05-05
Пользователь №: 5 416



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

Допустим есть ТЗ: сделать прибор, который должен:

- считывать температуру с датчика по шине TWI
- считывать значение напряжения с АЦП с датчика влажности
- расчитывать значение влажности в общепринятых единицах
- выдать предупреждающие сигналы в случае превышения норм
- показать значения на дисплее

Зада просто и понятна (хоть и высосана из пальца). Реализовал бы всё это дело я так:

Код
#include <io.h>
volatile int counter;
int main()
{
//инициализирую всё и вся

for(;;) //пустой бесконечный цикл
;
}

ISR(SIG_OUTPUT_COMPARE1A)
{
switch(counter)
  {
   case 100: BeginTempConvers(); break; //посылаю запрос для начала считывания температуры
   case 200: GetADCValue(); break; //считываю значение с АЦП
   case 300: ProcessADCValue(); break; //раситываю необходимые значения
   case 400: GetTempValue(); break; //считываю температуру
   case 500: SetAlarm(); break; //проверяю значения и вывожу аварийные сигналы если надо
   case 600: DisplayValues(); break; //вывожу все данные на экран
  };

counter++;
if(counter == 601)
  counter = 0;
}


Так вот вопрос - хорошо ли я делаю? Какие есть ещё способы реализации поставленной задачи. Просто мне почему то кажется, что всю логику работы прибора нехорошо запихивать в таймер...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
UniBomb
сообщение Mar 18 2009, 13:50
Сообщение #2


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

Группа: Свой
Сообщений: 148
Регистрация: 26-05-05
Пользователь №: 5 416



Цитата(Палыч @ Mar 18 2009, 14:40) *
Очень правильно кажется!

Кстате, а почему плохо? Спрашиваю для общего развития, а не для спора)))


Цитата(Палыч @ Mar 18 2009, 14:40) *
Желательно как-то так: в таймере выставлять флаги операций, а в бесконечном цикле (тот, что в main)


Код
#include <io.h>
volatile int counter;
int main()
{
//инициализирую всё и вся

for(;;) //уже не пустой бесконечный цикл
  {
   switch(counter)
   {
    case 100: BeginTempConvers(); counter++; break; //посылаю запрос для начала считывания температуры
    case 200: GetADCValue(); counter++; break; //считываю значение с АЦП
    case 300: ProcessADCValue(); counter++; break; //раситываю необходимые значения
    case 400: GetTempValue(); counter++; break; //считываю температуру
    case 500: SetAlarm(); counter++; break; //проверяю значения и вывожу аварийные сигналы если надо
    case 600: DisplayValues(); counter++; break; //вывожу все данные на экран
   } //counter инкрементируется для того, что бы функция невызывалась повторно в случае когда время итерации цикла меньше перода таймера
  }
}

ISR(SIG_OUTPUT_COMPARE1A)
{
counter++;
if(counter == 601)
  counter = 0;
}


ммм.... так?


Цитата(XVR @ Mar 18 2009, 14:42) *
Все в таймер явно нехорошо smile.gif Можно сделать так - в прерываниях обрабатывается взаимодействие с датчиками (самое простое, без дальнейшей обработки). Вся основная логика реализуется в процедуре, которая циклически вызывается из процедуры UI (какой бы он не был - кнопки и индикатор или RS232 к PC).
Если логика не тривиальная - делается один или более взаимодействующих конечных автомата.

Да логика то в моих реальных заданиях такая же простая как в примере))) А начсёт процедур - что за процедура UI?
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 19 2009, 08:24
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(UniBomb @ Mar 18 2009, 16:50) *
А начсёт процедур - что за процедура UI?
User Interface - взаимодействие с пользователем
Go to the top of the page
 
+Quote Post



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

 


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


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