Decan 0 27 июля, 2008 Опубликовано 27 июля, 2008 · Жалоба Доброго времени суток! Есть массив структур: 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 27 июля, 2008 Опубликовано 27 июля, 2008 · Жалоба ...бред, порождённый недостатком алкоголя в организме... Ну тогда попробуйте похмелиться и разобрать написанное Вами :). Начните с рассмотрения того, что представляют собой описания POTRx в хидерах. Формальная причина ругани: *(ind_hw[0].port)&=~(1<<(ind_hw[0].bit)); Ну потом самое главное - зачем вообще чесать правой ногой левое ухо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sKWO 0 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба Как правильно обращаться с указателем на порт? Впринцыпе ув. zltigo Вам уже ответил, но зачем изобретать велосипед если макросы, уж поверьте, убедился намного удобнее и эффективнее в Вашем случае будут. если интерес ещё не пропал то обсуждение здесь - Разберитесь с макросами ReAl, и убедитесь. Удачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Decan 0 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба 2 zltigo: Спасибо, помогло. 2 sKWO: Задача как раз и стояла, чтобы уйти от макросов. Но ссылка интересная, спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба Задача как раз и стояла, чтобы уйти от макросов. Очень рекомендую посмотреть на листинг и увидеть какой мрак получили вместо трех команд при таком "уходе" :( Если Вы кого и обхитрили,то только себя :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Decan 0 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба Очень рекомендую посмотреть на листинг Уже увидел... Решено заменить макросы процедурами и создать массив указателей на них. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться