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

 
 
> Работа с ногами AVR на С++, Проблема переноса с IAR на WinAVR
Waso
сообщение Nov 4 2009, 17:42
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



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

Понадобилось перенести проект с 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();
//...
}

А 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);
Это глюк компилятора? Как это можно обойти? Подскажите пожалуйста!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Waso
сообщение Nov 24 2009, 18:19
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



Продолжу задавать вопросы по плюсам в этой теме. Предыстория та-же.
Написал класс клавиатуры MtxKeyboard со статическими переменными и функциями. Не забыл добавить в него виртуальные функции, которые будут и у наследников. Наследники такие:
Код
template<int row, int col>
class MtxButton : public MtxKeyboard
{
public:
    /*virtual /*inline*/  uint8_t Get()        { return State[(col-1)]&(1<<(row-1));}
    /*virtual /*inline */ uint8_t Pressed()    { return (Get()&&(Ticks>=KEYPRES_TRESHOLD))? 1 : 0;}
    /*virtual /*inline */ uint8_t Locked()    { return (Get()&&(Ticks>=KEYLOCK_TRESHOLD))? 1 : 0;}
};
Простенькая тестовая прога:
Код
MtxButton<1,1> Key_Num1;
MtxButton<1,2> Key_Num2;
MtxButton<1,3> Key_Num3;
MtxButton<1,4> Key_Num4;
//========== еще 16 кнопок

class Client_c
{public:
    Client_c(MtxKeyboard *  pB):pButton(pB){};
    MtxKeyboard * pButton;};

Client_c Client_1(&Key_Num1);
Client_c Client_2(&Key_Num2);
Client_c * pClient[]={&Client_1,&Client_2};

int main(void){
  for(;;)  {
      Keys.Scan();
      if (Key_Num1.Pressed())pin1.Toggle();
              if (Client_1.pButton->Pressed())pin2.Toggle();  }
return 0;}
на максимальной оптимизации в WinAVR130309 компилится в 500+ байт кода и около 10байт ОЗУ. Но вот как только я делаю функции наследников виртуальными - таже прога компилится в 3000+ байт кода и 230байт ОЗУ. Я в курсе про таблицу вызова виртуальных процедур, но 2 тыщи слов она не сожрет. В чем проблема? По сгенеренному асму не могу понять.. Какбудто оптимизация отключается. На всякий случай приложил исходники.
Прикрепленные файлы
Прикрепленный файл  virtual.zip ( 23.94 килобайт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Waso   Работа с ногами AVR на С++   Nov 4 2009, 17:42
- - Genadi Zawidowski   Попробуйте в шаблоне не делать предположения о том...   Nov 4 2009, 19:23
- - Waso   Кодtemplate <uint8_t volatile & port, cons...   Nov 4 2009, 20:19
- - Genadi Zawidowski   А не надо делать предположения об адресе регистра ...   Nov 4 2009, 21:01
|- - ReAl   Цитата(Genadi Zawidowski @ Nov 4 2009, 23...   Nov 4 2009, 21:20
- - Genadi Zawidowski   Что не так в версии: Кодtemplate <uint8_t vola...   Nov 4 2009, 21:26
|- - ReAl   Цитата(Genadi Zawidowski @ Nov 4 2009, 23...   Nov 4 2009, 22:37
- - Genadi Zawidowski   Посмотрел на результат препроцессирования (-E)... ...   Nov 5 2009, 01:32
- - Waso   Genadi, даже если уйти от смещений и явно указыват...   Nov 5 2009, 05:45
|- - AHTOXA   Цитата(Waso @ Nov 5 2009, 10:45) .. Глян...   Nov 5 2009, 07:23
- - XVR   А не получится описать порты как переменные и зада...   Nov 5 2009, 07:48
- - Waso   AHTOXA, посмотрел я на ваши труды и попробовал нап...   Nov 6 2009, 18:07
|- - AHTOXA   Цитата(Waso @ Nov 6 2009, 23:07) Сначала ...   Nov 6 2009, 20:02
|- - ReAl   Цитата(AHTOXA @ Nov 6 2009, 22:02) Потому...   Nov 6 2009, 20:43
|- - AHTOXA   Цитата(ReAl @ Nov 7 2009, 01:43) Зато, по...   Nov 6 2009, 20:47
|- - ReAl   Цитата(AHTOXA @ Nov 6 2009, 22:47) А что ...   Nov 7 2009, 09:37
- - Waso   ЦитатаНу и нормально Только #if defined (PORTA) - ...   Nov 7 2009, 19:19
|- - AHTOXA   Цитата(Waso @ Nov 8 2009, 00:19) У меня W...   Nov 7 2009, 22:17
- - XVR   Как только функции стали виртуальными у класса Mtx...   Nov 24 2009, 18:44
- - Waso   ЦитатаМожно спросить - нафига наследовать MtxButto...   Nov 25 2009, 06:16
- - Waso   Ладно, чтобы не смотрели на меня косо, открою карт...   Nov 26 2009, 07:19
- - XVR   Цитата(Waso @ Nov 26 2009, 10:19) Одна ви...   Nov 26 2009, 08:09


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:56
Рейтинг@Mail.ru


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