Понадобилось перенести проект с IAR (EWAVR 530) на WinAVR (20090313) для юридической чистоты...
Вылезла такая бяка: Иар успешно работает с такой конструкцией:
Код
template <unsigned char volatile * port, const char bit>
class mypin
{
public:
inline mypin() {*(port-1)|=(1<<bit);} // смещение -1 - регистр DDR - настраиваем на выход.
static inline void set() {*port|=(1<<bit);}
};
int main()
{
mypin<&PORTA,4> mypinname; // тут мы обьявляем место подключения и инициализируем одновременно
//...
mypinname.set();
//...
}
class mypin
{
public:
inline mypin() {*(port-1)|=(1<<bit);} // смещение -1 - регистр DDR - настраиваем на выход.
static inline void set() {*port|=(1<<bit);}
};
int main()
{
mypin<&PORTA,4> mypinname; // тут мы обьявляем место подключения и инициализируем одновременно
//...
mypinname.set();
//...
}
А WinAVR глючит на конструкции &PORTA в объявлении класса и заявляет что не хватает параметров:
Код
- wrong number of template arguments (1, should be 2) provided for 'template<volatile uint8_t* port, char bit> class mypin'
хотя в другом месте адрес порта успешно изымается:
Код
volatile uint8_t* portC = &PORTC;
*portC &= ~(1<<7);
Это глюк компилятора? Как это можно обойти? Подскажите пожалуйста!
*portC &= ~(1<<7);