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

 
 
> Выносить ли работу с аппаратурой из кода?, Хорошая практика программирования
BSVi
сообщение Sep 2 2008, 07:57
Сообщение #1


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

Группа: Свой
Сообщений: 76
Регистрация: 18-12-07
Из: Киев
Пользователь №: 33 391



Народ - вот интересно - кто выносит код для работы с аппаратурой в другие файлы? Вот к примеру есть модуль для работы с таймером.

Можно прямо в модуле таймера написать

#pragma vector = TIMERA1_VECTOR
__interrupt void TimerA_CMP1_Interrupt()
{
TACCR1+=TIMER_1MS_CONST;
...


А можно сделать так

void timer_interrupt()
{
halSetTimerCCR1 ( halGetTimerCCR1() + 1 );

Где timer_interrupt() будет вызываться их interrupts.h в который собрать все прерывания, halSetTimerCCR1 и halGetTimerCCR1() соответственно гдето в модуле для работы с таймером A.

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

Как бы сделали вы?


--------------------
http://bsvi.ru/ - блог эмбеддера
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BSVi
сообщение Sep 2 2008, 09:19
Сообщение #2


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

Группа: Свой
Сообщений: 76
Регистрация: 18-12-07
Из: Киев
Пользователь №: 33 391



Я немного другой "таймер" имел ввиду - у меня модуль, который из одного аппаратного таймера делает до 255 виртуальных, которые могут быть использованны таким образом

myTimer timer1, timer2

timer1.start( 100, &my_func1 ); // 100 - задержка в миллисекундах
timer2.start( 200, &my_func2 );

когда истекает время, вызывается нужная функция.

Да, действительно тут тонкая граница которую чувствовать нужно ) Скорее всего, это приходит с опытом которого у меня маловато.


Да, может подскажете (или покажите) образцово - показательные исходники на тему - резделение HAL и не HAL )

Сообщение отредактировал BSVi - Sep 2 2008, 09:34


--------------------
http://bsvi.ru/ - блог эмбеддера
Go to the top of the page
 
+Quote Post
rezident
сообщение Sep 3 2008, 00:35
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(BSVi @ Sep 2 2008, 15:19) *
Я немного другой "таймер" имел ввиду - у меня модуль, который из одного аппаратного таймера делает до 255 виртуальных, которые могут быть использованны таким образом
По-моему вы пытаетесь изобрести какую-то ОС, но делаете это как-то через (_*_). Извините за сравнение. rolleyes.gif Разделение программы на функциональные модули и применение КА дает вполне нормальные результаты. Раз у вас таймер выполняет системную функцию разделения вычислительных ресурсов по времени (планировщик?), то и делайте этот функционал в одном модуле. А вот вызывать его можно будет из нескольких других. Для этого можно разделить хедер на "внутренний" (для данного модуля) и "внешний" (подключаемый к другим модулям). Во "внутреннем" хедере какие-то константы характерные только для это таймера разместите, например, ту же самую TIMER_1MS_CONST, которая у вас в примере используется. А во "внешнем" типы структур и прототипы вызовов функций, используемых другими модулями из данного.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 14:27
Рейтинг@Mail.ru


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