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

 
 
> Структура программы, Вырабатываю хороший стиль программирования
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 19 2009, 10:26
Сообщение #2


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

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



Спасибо всем за ответы, я подчерпнул для себя много нового smile.gif

Палыч, если бы все эти функции могли бы выполняться одна за одной, то я бы таймер вообще не использовал. Так например между вызовами функциями BeginTempConvers(); и GetTempValue(); должно пройти по крайней мере полсекунды. Это особенность микросхемы-термометра. Плюс я ещё оставляю между вызовами функций много времени для того, чтобы свободного процессорного времени было много. Это делается для того, чтобы при использовании USART было бы побольше времени для выполнения функций, реализующих какой-либо протокол. Плюс ко всему в последнем проекте используеться микросхема памяти, запись данных в которую происходит очень много времени.

_Pasha, ммм... а что такое "атомарный"? smile.gif

DpInRock, насчёт алгоритма понятно. Просто задачи я решаю в основном однотипные, которые сводятся к элементарной линейноти и очерёдности...

haker_fox, ваши слова заставили меня задуматься... Чуствую в моих программах грядут большие изменения

XVR ясно)))
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:20
Рейтинг@Mail.ru


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