Перейти к содержанию
    

Указатель на порт

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

 

Есть массив структур:

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...бред, порождённый недостатком алкоголя в организме...

Ну тогда попробуйте похмелиться и разобрать написанное Вами :).

Начните с рассмотрения того, что представляют собой описания POTRx в хидерах.

Формальная причина ругани:

*(ind_hw[0].port)&=~(1<<(ind_hw[0].bit));

Ну потом самое главное - зачем вообще чесать правой ногой левое ухо?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как правильно обращаться с указателем на порт?

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

если интерес ещё не пропал то обсуждение здесь - Разберитесь с макросами ReAl, и убедитесь. Удачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 zltigo:

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

 

2 sKWO:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задача как раз и стояла, чтобы уйти от макросов.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень рекомендую посмотреть на листинг

 

Уже увидел...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...