|
Передача в качестве параметра порта ввода-вывода, как? |
|
|
|
Oct 7 2007, 17:23
|
Местный
  
Группа: Свой
Сообщений: 262
Регистрация: 18-02-05
Из: SPb
Пользователь №: 2 743

|
Есть набор функций работы с однопроводными устройствами,вроде Код #define ONEPIN PINC // PIN register #define ONEDDR DDRC // Data Direction Register #define ONEPORT PORTC// PORT
unsigned char OneWireReset(unsigned char mask) { ONEPORT &= ~(mask); // Normal input no pull up if (ONEPIN == 0) return 0; // detect 0V on buss error ONEDDR |= mask; // out at 0 delay_us(500); ONEDDR &= ~(mask); // Set to input delay_us(70); if ((ONEPIN & mask) == 0) { delay_us(500); return mask; } mask&=~ONEPIN; delay_us(500); return mask; } Работают замечательно, НО в железе есть восемь датчиков DS18b20, подключенных к одному порту (PORTC) и еще один датчик, подключенный к другому порту. Пробовал переделать функции так, чтобы рабочий порт можно было передавать, как параметр в функцию, но либо я чего-то не допер, либо это невозможно. На текущий момент предыдущим разработчиком просто сделан второй набор функций, где они работают с другим портом. На мой взгляд это не совсем правильно.
|
|
|
|
|
 |
Ответов
|
Oct 7 2007, 18:18
|
Местный
  
Группа: Свой
Сообщений: 262
Регистрация: 18-02-05
Из: SPb
Пользователь №: 2 743

|
Цитата(rezident @ Oct 7 2007, 21:55)  Почему это по-вашему неправильно? У вас нехватка памяти или какая-то другая причина извращаться с оптимизацией кода? Неправильно - потому, что сделано несколько подобных устройств и хочется не то, чтобы оптимизировать, а скорее унифицировать код - то есть, сделать одинаковые функции для разных проектов. Потому что потом приходится путаться, какая функция из какого именно порта читает.
|
|
|
|
|
Oct 7 2007, 18:40
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(AlexMad @ Oct 8 2007, 00:18)  Неправильно - потому, что сделано несколько подобных устройств и хочется не то, чтобы оптимизировать, а скорее унифицировать код - то есть, сделать одинаковые функции для разных проектов. Потому что потом приходится путаться, какая функция из какого именно порта читает. Дык если функция работает одинаково с портами, то чтобы не переписывать обе функции можно писать одну, но при включении ее в текст исходника манипулировать адресами портов с помощью макросов. В противном случае в функцию придется передавать все три адреса. Либо передавать номер "набора" из адресов портов, но при этом добавить кучу ветвлений для проверки и вызова той или иной операции внутри вашей функции. Или вы считаете что куча ветвлений, лучше линейного кода?
|
|
|
|
Сообщений в этой теме
AlexMad Передача в качестве параметра порта ввода-вывода Oct 7 2007, 17:23   AlexMad Цитата(rezident @ Oct 7 2007, 22:40) Дык ... Oct 7 2007, 18:54 ReAl В avr-gcc нормально передаются указатели на порты,... Oct 7 2007, 19:58 AlexMad Цитата(ReAl @ Oct 7 2007, 23:58) Учитывая... Oct 8 2007, 04:48  ReAl Цитата(AlexMad @ Oct 8 2007, 06:48) Я с х... Oct 8 2007, 08:36  prottoss Цитата(AlexMad @ Oct 8 2007, 12:48) А вот... Oct 8 2007, 09:12 prottoss Всем известно (надеюсь), что адреса портов находят... Oct 8 2007, 02:20 defunct В общем случае я бы вероятно сделал так:
создал бы... Oct 8 2007, 10:54 rezident 2 ReAl, в сообщении #6 вызывает сомнение, должен л... Oct 8 2007, 13:20 ReAl Цитата(rezident @ Oct 8 2007, 15:20) долж... Oct 8 2007, 13:38  singlskv Цитата(ReAl @ Oct 8 2007, 17:38) Собствен... Oct 8 2007, 16:19   rezident Цитата(singlskv @ Oct 8 2007, 22:19) Объя... Oct 8 2007, 16:42    singlskv Цитата(rezident @ Oct 8 2007, 20:42) Пото... Oct 8 2007, 16:51   ReAl Цитата(singlskv @ Oct 8 2007, 18:19) Объя... Oct 8 2007, 16:54    singlskv Цитата(ReAl @ Oct 8 2007, 20:54) Да не ад... Oct 8 2007, 17:14     ReAl Цитата(singlskv @ Oct 8 2007, 19:14) В та... Oct 8 2007, 20:01      AlexMad Цитата(ReAl @ Oct 9 2007, 00:01) Ну это у... Oct 13 2007, 19:37
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|