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

 
 
> Выносить ли работу с аппаратурой из кода?, Хорошая практика программирования
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 3 2008, 07:06
Сообщение #2


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

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



нет, я не делаю ОС - просто программа, где будет много тайм-аутов, для них хочется иметь хороший (удобный) таймер. При этом программа будет работать на msp430, LPC2000 и PC.

Это просто пример. Про (_*_) не обижаюсь, я намного младше по возрасту (скорее всего) и по навыками, чем вы, поэтому надеюсь на наставление на путь истинный )

Про заголовки я так и делаю. Таймеру не нужно много констант, и поэтому там один хедер. Там где нужно их много - типа стеков протоколов связи - так и делаю. Дугое дело вот в чем - где та граница, когда функционал нужно выносить в HAL?

Сейчас я решил, что вообще весь модуль таймера нужно вынести в HAL. Те переписать его для всех платформ так, чтоб HAL экспортировал одинаковые функции для таймеров.

Может есть какие-нибуть рекомендации по этому поводу?


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


Гуру
******

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



Цитата(BSVi @ Sep 3 2008, 13:06) *
нет, я не делаю ОС - просто программа, где будет много тайм-аутов, для них хочется иметь хороший (удобный) таймер. При этом программа будет работать на msp430, LPC2000 и PC.
Раз это не ОС, то для организации таймаутов ИМХО вовсе не нужно 255 таймеров. Вполне достаточно одного, "тикающего" с разумно-минимально-требуемым интервалом времени. Каждый процесс в котором требуется таймаут запрашивает у общего таймера его текущее значение и сам сравнивает с величиной требуемого ему таймаута простым беззнаковым вычитанием двух переменных. Если разность внутри диапазона таймаута, то в зависимости от поведенческой модели процесс может передать управление следующему (в суперцикле), либо ожидать окончания таймаута. Если вы используете 1мс "тики" таймера, то 16-и разрядная переменная, инкрементируемая в прерывании от таймера на величину соответствующую 1мс времени, даст максимальный интервал времени в 65,5 с, 32-х разрядная переменная "тиков" дает уже период более, чем в полтора месяца. Только естественно нужно на платформах меньшей разрядности обеспечить атомарность доступа к такой переменной.
Цитата(BSVi @ Sep 3 2008, 13:06) *
Сейчас я решил, что вообще весь модуль таймера нужно вынести в HAL. Те переписать его для всех платформ так, чтоб HAL экспортировал одинаковые функции для таймеров.
Оформите его как функцию-драйвер. С командами инициализации, чтения, записи и т.п. Для разных платформ вам нужно будет лишь поправить аппаратно-зависимую часть инициализации таймера. А обращения/вызовы этой функции-драйвера останутся одинаковыми.
Go to the top of the page
 
+Quote Post



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

 


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


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