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

 
 
 
Reply to this topicStart new topic
> Структура программы, помогите выбрать стратегию
Alexey T
сообщение Aug 26 2010, 13:03
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 26-08-10
Пользователь №: 59 122



Народ! помогите пожалуйста, программирую микроконвертор ADUC 812, мне надо чтобы моя программа опрашивала датчики 2 раза в милисекунду (1/2048с) фильтровала и обрабатывала эти данные; и 1 раз в 2 милисекунды (1/512с) отправляла посылку по UART-у, посылка должна состоять из двух байт, между ними должна быть пауза 140 мкс , после двух байт должна быть большая пауза, более 1 мс.
Вопрос такой: как бы вы рекомендовали организовать структуру такой программы. нужны ли, желательны ли здесь прерывания? мне вот думалось что прощще всего сделать программу длительнось цикла которой, будет неизменно 1 мс, и программа будет в каждом цикле дважды опрашивать датчики, и каждый второй цикл ещё и передаавать всё это на УАРТ. Но что то у меня не очень получается... Я подозреваю что такой подход может быть в корне неверным. считать время должны таймеры, чтобы необходимые события (считывание и выдача) происходили вовремя, а во всё остальное время программа должна фильтровать и обрабатывать данные, так, и только так? непонятно как справиться тогда двумя прерываниями по таймерам, с такой задачкой..

Сообщение отредактировал Alexey T - Aug 26 2010, 13:04
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 26 2010, 14:58
Сообщение #2


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

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



Сразу выкиньте из головы подгонку программы под определенное время ее работы.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Aug 26 2010, 16:39
Сообщение #3


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
нужны ли, желательны ли здесь прерывания?
обязательны - заряжайте таймер на переполнение каждые 500мкс, в прерывании делайте измерения, каждые 4 прерывания заполняйте буфер для передачи по UART и начинайте передачу. В прерывании пересылки байта начинайта пересылку следующего и т.д. до завершения передачи всего буфера.
Go to the top of the page
 
+Quote Post
Alexey T
сообщение Aug 27 2010, 05:30
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 26-08-10
Пользователь №: 59 122



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

void timer_0_isr (void) interrupt 1
{

....

}

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

Спасибо спасибо спасибо smile.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Aug 27 2010, 05:52
Сообщение #5


Гуру
******

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



Сначала определитесь на каком компиляторе будете писать программу. Потом курите мануалы от вашего компилятора - обычно прерывания задаются с помощью каких то расширений языка С.
В вашем случае слово interrupt после определения функции говорит компилятору что это обработчик прерывания, а цифра 1 после interrupt видимо обозначает вектор прерывания.
Go to the top of the page
 
+Quote Post

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

 


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


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