Цитата(Lem @ Nov 28 2006, 01:06)

сделайте структуру
[code]
typedef struct
{
unsigned char *pinr;
unsigned char *port;
unsigned char *ddr;
unsigned char pinNumb : 3;
} PIN;
PIN pins[2] = {{&PINA, &PORTA, &DDRA, 2}, {&PINB, &PORTB, &DDRB, 7}};
НЕВЕРНО. pinr, port и ddr - ДОЛЖНЫ обязательно быть volatile!!!
В противном случае на высоких уровнях оптимизации компиллятор оптимизирует следующий код:
*pins[index].port = 0xAA;
*pins[index].port = 0x55;
Он выкинит первую запись в порт. Оставит только вторую. Для обычных переменых это правильная оптимизация, но доступ к портам оптимизироваться не должен.
Для 16-битных портов все намного страшнее - бутет неправильнай порядок обращения байтам.
Анатолий.