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

 
 
 
Reply to this topicStart new topic
> Указатель на порт, Не работает как надо
Decan
сообщение Jul 27 2008, 21:07
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 26-10-05
Из: Киев
Пользователь №: 10 128



Доброго времени суток!

Есть массив структур:
Код
typedef struct
{
uchar volatile *port;
uchar bit;
} IND_HARDWARE;

__flash IND_HARDWARE ind_hw[] =
{ //{порт,бит}
  {&PORTC,0},
  {&PORTC,1},
  {&PORTC,2},
  {&PORTC,3},
  {&PORTB,4},
  {&PORTB,5}
};

На описанных лапах портов висят разные индикационные девайсы(светодиоды,пищалки).
Трабла в следующем. При попытке обратиться к порту таким образом:
Код
&(ind_hw[0].port)&=~(1<<(ind_hw[0].bit));

Компайлер ругается:
Error[Pe137]: expression must be a modifiable lvalue
Проблема именно с портом, поскольку матерится и в том случае, если вместо правой части стоит число.
Пробовал обратиться таким способом(уже методом тыка):
Код
ind_hw[0].port|=0x80;

Получил в ответ:
Error[Pe031]: expression must have integral type
Как правильно обращаться с указателем на порт?
Камень - атмега168.


--------------------
Объективная реальность - есть бред, порождённый недостатком алкоголя в организме...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 27 2008, 23:52
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Decan @ Jul 27 2008, 23:07) *
...бред, порождённый недостатком алкоголя в организме...

Ну тогда попробуйте похмелиться и разобрать написанное Вами smile.gif.
Начните с рассмотрения того, что представляют собой описания POTRx в хидерах.
Формальная причина ругани:
*(ind_hw[0].port)&=~(1<<(ind_hw[0].bit));
Ну потом самое главное - зачем вообще чесать правой ногой левое ухо?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jul 28 2008, 10:49
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(Decan @ Jul 28 2008, 00:07) *
Как правильно обращаться с указателем на порт?

Впринцыпе ув. zltigo Вам уже ответил, но зачем изобретать велосипед если макросы, уж поверьте, убедился намного удобнее и эффективнее в Вашем случае будут.
если интерес ещё не пропал то обсуждение здесь - Разберитесь с макросами ReAl, и убедитесь. Удачи.


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
Decan
сообщение Jul 28 2008, 12:09
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 26-10-05
Из: Киев
Пользователь №: 10 128



2 zltigo:
Спасибо, помогло.

2 sKWO:
Задача как раз и стояла, чтобы уйти от макросов. Но ссылка интересная, спасибо.


--------------------
Объективная реальность - есть бред, порождённый недостатком алкоголя в организме...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 28 2008, 13:40
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Decan @ Jul 28 2008, 14:09) *
Задача как раз и стояла, чтобы уйти от макросов.

Очень рекомендую посмотреть на листинг и увидеть какой мрак получили вместо трех команд при таком "уходе" sad.gif Если Вы кого и обхитрили,то только себя sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Decan
сообщение Jul 28 2008, 14:13
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 26-10-05
Из: Киев
Пользователь №: 10 128



Цитата(zltigo @ Jul 28 2008, 16:40) *
Очень рекомендую посмотреть на листинг


Уже увидел...
Решено заменить макросы процедурами и создать массив указателей на них.


--------------------
Объективная реальность - есть бред, порождённый недостатком алкоголя в организме...
Go to the top of the page
 
+Quote Post

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

 


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


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