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

 
 
> Общая структура программы?
shkal
сообщение May 30 2011, 12:58
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 281
Регистрация: 29-04-08
Из: Москва
Пользователь №: 37 149



Это мой первый опыт общёния с контроллерами на старости лет, так что прошу сильно не пинать.
Итак, делается управляющая часть для НЧ-генератора 5Гц-1МГц. Она должна выполнять следующие функции:
1) Опрос состояния органов управления - кнопки, энкодер, переключатели.
2) Выдачу команд по SPI на ЦАП, управляющий частотой и релюшки переключения диапазонов.
3) Измерение частоты генератора , алгоритм приведён здесь: алгоритм
4) Отображение частоты и другой информации на LCD 16x2

Вполне возможно, потребуется дописывать функционал в дальнейшем, например, измерение напряжения с помощью встроенного АЦП и статистическую обработку частотомера.

Сейчас написаны пункты №1, №2, №4, и приступаю к №3. Вот тут-то и встал вопрос об общей структуре программы.
Фактически параллельно должны выполняться несколько задачь
№1 требует периодического выполнения по таймеру с точностью ,скажем, +-20% от номинала. Сейчас написана по прерыванию одного из таймеров.
№2 требует значительного времени на исполнение команды (рэле-медленное устройство)
№3 требует максимально быстрой и всегда одинаковой по кол-ву циклов реакции на прерывание ICx, в противном случае возникают ошибки счёта.

Где можно посмотреть - почитать общие подходы к построению таких программ? Единственная книга по теме, котораю попалась в руки - embedded multitasking
Но методика, изложенная там, показалась мне малореальной в практическом смысле в условиях постоянного дописывания функционала.

Да, пишется всё под pic24h

Сообщение отредактировал shkal - May 30 2011, 13:03
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ukpyr
сообщение May 30 2011, 16:56
Сообщение #2


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

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



медленные и некритичные по времени задачи (кнопки,индикация,работа с ЦАПом/реле) можно выполнять в основном цикле (на каждую задачу - state machine с программным счетчиком/флагом состояния), задачи требующие точного отсчета - в прерываниях таймеров с высоким приоритетом, энкодеры - на внешние прерывания с меньшим приоритетом
Цитата
№3 требует максимально быстрой и всегда одинаковой по кол-ву циклов реакции на прерывание ICx, в противном случае возникают ошибки счёта.
регистры ICx буферизированы или нет ?
Цитата
Поставьте еще один маленький контроллер только для измерения частоты
не нужно, один pic24h потянет с десяток таких приборов

Сообщение отредактировал ukpyr - May 30 2011, 16:57
Go to the top of the page
 
+Quote Post
scifi
сообщение May 31 2011, 12:23
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ukpyr @ May 30 2011, 20:56) *
медленные и некритичные по времени задачи (кнопки,индикация,работа с ЦАПом/реле) можно выполнять в основном цикле (на каждую задачу - state machine с программным счетчиком/флагом состояния), задачи требующие точного отсчета - в прерываниях таймеров с высоким приоритетом, энкодеры - на внешние прерывания с меньшим приоритетом

+1. Сам так делаю. Это и есть ответ на вопрос о подходе к построению системы.
При таком подходе ф-ция main() в общих чертах выглядит так:
Код
int main(void)
{
    module_a_init();
    module_b_init();
    ...
    for (;;)
    {
        module_a_poll();
        module_b_poll();
        ...
    }
}

Соответственно, ф-ции module_x_poll() возвращаются быстро, чтобы обеспечить гарантированное максимальное время выполнения одного цикла.
В такую конструкцию у меня помещаются кнопки, энкодер, GUI (480x272 LCD), HTTP, SNMP, SNTP, управление собственно устройством и т.д.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- shkal   Общая структура программы?   May 30 2011, 12:58
- - Danis   Цитата(shkal @ May 30 2011, 15:58) Это мо...   May 30 2011, 13:27
- - shkal   Да вроде пока хватает с большим запасом. Всё, что ...   May 30 2011, 14:19
|- - Tanya   Цитата(shkal @ May 30 2011, 18:19) Всё, ч...   May 30 2011, 15:14
- - shkal   Частотомер процессорного времени практически не за...   May 30 2011, 15:27
- - shkal   ICх буферизированы, но там надо читать одновременн...   May 30 2011, 17:25
- - vat   Цитата(shkal @ May 30 2011, 16:58) №3 тре...   May 31 2011, 08:54
|- - ut1wpr   Цитата(vat @ May 31 2011, 12:54) Помнится...   Jun 6 2011, 04:54
|- - shkal   Цитата(ut1wpr @ Jun 6 2011, 07:54) На чем...   Jun 6 2011, 11:48
- - shkal   ICx - это и есть input capture. Если использовать ...   May 31 2011, 09:46
- - ukpyr   еще можно добавить синхронизацию по интервалу 1мс/...   May 31 2011, 16:07
|- - scifi   Цитата(ukpyr @ May 31 2011, 20:07) еще мо...   Jun 1 2011, 14:14
- - shkal   ukpyr, спасибо, ответ максимально по делу. Пойду ч...   Jun 1 2011, 09:24
- - ukpyr   ЦитатаЕсли, допустим, использовать один из таймеро...   Jun 1 2011, 12:36
- - shkal   ОК, как я понял, таким образом можно реализовать з...   Jun 1 2011, 14:12
- - ukpyr   ЦитатаОК, как я понял, таким образом можно реализо...   Jun 1 2011, 15:14


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

 


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


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