AVR GCC с плюсами.

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Hello, All!

Пробую освоить сабж. Процесс идет очень тяжко:(

Hапример. Компилятор выдает предупреждения на такие объявления функций
прерываний:
extern "C" void INT0_vect(void);
void INT0_vect(void) __attribute__ ((interrupt));
void INT0_vect(void)
и:
ISR (TIMER1_COMPA_vect)

Вот что он выдает:
Сompiling C++: Soft_Usart.cpp
avr-g++ -c -mmcu=atmega128 -I. -x c++ -gdwarf-2 -DF_CPU80%00000UL  -Os
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wa,-adhlns=Soft_Usartlst   -MD -MP -MF .dep/Soft_Usart.o.d Soft_Usart.cpp -o
Soft_Usart.o
Soft_Usart.cpp:133: warning: `_Z10__vector_1v' appears to be a misspelled
interrupt handler
Soft_Usart.cpp:172: warning: `_Z11__vector_12v' appears to be a misspelled
signal handler

В тоже время следующие объявления проглатывает:
extern "C" void TIMER1_COMPB_vect(void);
void TIMER1_COMPB_vect (void) __attribute__ ((naked));    \
void TIMER1_COMPB_vect (void) { __asm__ __volatile__ (

extern "C" void TIMER1_COMPC_vect(void);
void TIMER1_COMPC_vect (void) __attribute__ ((naked));    \
void TIMER1_COMPC_vect (void) { __asm__ __volatile__ (

В чем может быть причина? Переходы на функции ставит, пролог и эпилог создает
правильный, т.е. правильный для signal и interrupt.


ЗЫ.
 Что почитать по С++. Читаю Страутрупа... Жук и жаба...

With best regards, Igor.        Time: 22:01        Date: 22 Апр 06

AVR GCC с плюсами.
Привет Igor!

23 Apr 06 01:58, Igor Ulanov писал All:

 IU> Пробую освоить сабж. Процесс идет очень тяжко:(

    Почему???

 IU> Hапример. Компилятор выдает предупреждения на такие объявления функций
 IU> прерываний:

    Забей. Это у тебя компилятор патченный, в оригинальном такого поведения
нет. Вот этот патч:


        * gcc/config/avr/avr.c (avr_handle_fndecl_attribute): Generate a
        warning if the function name does not begin with "__vector" and the
        function has either the 'signal' or 'interrupt' attribute.

Index: gcc/config/avr/avr.c
===================================================================
RCS file: /cvsroot/gcc/gcc/gcc/config/avr/avr.c,v retrieving revision 1.118
diff -u -p -p -r1.118 avr.c
-+- gcc/config/avr/avr.c        13 Mar 2004 06:43:30 -0000      1.118
+++ gcc/config/avr/avr.c        12 May 2004 19:40:28 -0000
@@ -4566,6 +4559,32 @@ avr_handle_fndecl_attribute (tree *node,
       warning ("`%s' attribute only applies to functions",
               IDENTIFIER_POINTER (name));
       *no_add_attrs = true;
+    }
+  else
+    {
+      const char *func_name = IDENTIFIER_POINTER (DECL_NAME (*node));
+      const char *attr = IDENTIFIER_POINTER (name);
+
+      /* If the function has the 'signal' or 'interrupt' attribute, test to
+         make sure that the name of the function is "__vector_NN" so as to
+         catch when the user misspells the interrupt vector name.  */
+
+      if (strncmp (attr, "interrupt", strlen ("interrupt")) == 0)
+        {
+          if (strncmp (func_name, "__vector", strlen ("__vector")) != 0)
+            {
+              warning ("`%s' appears to be a misspelled interrupt handler",
+                       func_name);
+            }
+        }
+      else if (strncmp (attr, "signal", strlen ("signal")) == 0)
+        {
+          if (strncmp (func_name, "__vector", strlen ("__vector")) != 0)
+            {
+              warning ("`%s' appears to be a misspelled signal handler",
+                       func_name);
+            }
+        }
     }

   return NULL_TREE;

    То есть патченный gcc хочет, чтобы имена таких функций непременно
начинались с "__vector". По-моему глупость полнейшая. Соплевытирательство и
неестественный интеллект. Рекомендую поставить gcc без этого патча, т.к. не
вижу возможности это предупреждение отключить.

 IU>  extern "C" void INT0_vect(void);
 IU>  void INT0_vect(void) __attribute__ ((interrupt));
 IU>  void INT0_vect(void)

    Странно как-то. Hаверное ты хотел сказать так:

extern "C"
{
  void INT0_vect(void) __attribute__ ((interrupt));
  void INT0_vect(void)
  {
    bla-bla-bla;
  }
}

    Иначе ты все равно определяешь сиплюсплюсную функцию-обработчик, а сишная
декларация не имеет эффекта.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... В системе возможно бесконечное число процессов - до 256.

Re: AVR GCC с плюсами.
Hello Igor.

24 Apr 06 22:21, you wrote to Alex Mogilnikov:

 IU> А вот еще подскажи:)
 IU>  Описал класс. В нем есть массив. Теперь создаю классы. Могу ли я при
 IU> создании как-то указать какой массив по размеру мне нужен? Или каждый
 IU> раз придется описывать новый класс?

 Читать книжки. Пытаться осознать, зачем сдались эти плюсы.
 В конце концов осознать, что программировать на Ц++ с Ц-шным подходом и
мировоззрением это то же
самое, что программировать на Ц с ассемблерным подходом и мировоззрением.

 IU> Как-то странно. Хотя может и
 IU> желание странное:) Спрашивал на телесиськах, там посоветовали
 IU> применить template - не катит могу изменить только тип, или создавать
 IU> динамический - это также отпадает.

 template<size_t KSize>
 class CMyClass
 {
    int m_Array[KSize];
 };




Dmitry


AVR GCC с плюсами.
Здравствуйте, Уважаемый Dmitry!

Mon Apr 24 2006 21:12, Dmitry Lyokhin wrote to Igor Ulanov:

 DL>  В конце концов осознать, что программировать на Ц++ с Ц-шным подходом и
 DL> мировоззрением это то же самое, что программировать на Ц с ассемблерным
 DL> подходом и мировоззрением.

И тем не менее, срастить классовый подход C++ с многозадачкой реального
времени(uCOS, написанной кстати на просто С), мне не удалось. Вернее,
рождались столь чудовищные конструкции, что пришлось забить на все эти
наследования и полиморфизмы.

Всего Вам Хорошего
Ольга


AVR GCC с плюсами.
Hello, Dmitry!

(24 Апр 06 21:12), Dmitry Lyokhin писАл Igor Ulanov:

 DL>  Читать книжки.
 ОК. Хотел наскоком осилить.
 DL>  template<size_t KSize>
 DL>  class CMyClass
 DL>  {
 DL>     int m_Array[KSize];
 DL>  };
 ОК. Спасибо.

With best regards, Igor.        Time: 18:39        Date: 26 Апр 06

Re: AVR GCC с плюсами.
Привет Igor!

24 Apr 06 22:21, Igor Ulanov писал Alex Mogilnikov:

 IU>>> Пробую освоить сабж. Процесс идет очень тяжко:(
 AM>>     Почему???
 IU>  Вероятно ожидал слишком много от плюсов. Т.е. думал появится куча
 IU> механизмов для более простой реализации алгоритмов. А в целом, если
 IU> конечно правильно понял, изменения только на уровне синтаксиса.

    Отличия от языка C? Я бы сказал, это одно из наименее существенных отличий.
Более интересное отличие - другой подход к самому проектированию. Позволяет
оперировать другими сущностями. Рекомендую дополнить литературу книжкой Элджера
- если осилишь хотя бы до середины, мозги прочистит. :)

 IU>  Могу ли я при
 IU> создании как-то указать какой массив по размеру мне нужен? Или каждый
 IU> раз придется описывать новый класс?

 IU>  Как-то странно. Хотя может и
 IU> желание странное:) Спрашивал на телесиськах, там посоветовали
 IU> применить template - не катит могу изменить только тип,

    Пример с шаблоном Дмитрий тебе уже привел.

 IU>  или создавать динамический - это также отпадает.

    Почему отпадает?

class A {
public:
    A(size_t sz) : array(new Type[sz]) {}
    ~A(void) { delete [] array; }
private:
    Type *array;
};

    Вообще в таком варианте больше гибкости, больший контроль над процессом -
например, операторы new и delete могут быть перегружены для определенных
классов, могут в зависимости от класса и конкретных условий располагать объект
в разных местах...

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... В главной роли - Сильвестр с талоном.

AVR GCC с плюсами.
Hello, Alex!

(25 Апр 06 03:50), Alex Mogilnikov писАл Igor Ulanov:
 AM>     Отличия от языка C? Я бы сказал, это одно из наименее существенных
 AM> отличий.
 ОК. Поспешил.
 AM>  Более интересное отличие - другой подход к самому проектированию.
 Это я понял когда и первое письмо писал. Прочуствовал правда только вчера.
 AM> Позволяет оперировать другими сущностями.
 Да. Hо только пока реализация этих сущностей в тумане:) Сижу эксперементирую с
книжкой в руках. Правда времени на эксперементы не хватает.
 AM>  Рекомендую дополнить литературу книжкой Элджера - если осилишь хотя
 AM> бы до середины, мозги прочистит. :)
 Да. Спасибо. Буду иметь ввиду.

 А вот еще вопрос, не успел на работе ответ найти. Мне нужны будут функции
преобразования символьного представления в бинарный. и наоборот. Могу ли я
создать класс с описанием всего лишь одной функции, но так чтобы компилятор в
зависимости от используемого типа делал ссылки на нужные функции и компилил
только их? Hапример:

_type_ AsciiToBin(uint8_t *adr, uint8_t count)
{
_type_ result=0;

result=*adr & 0x0F;
for (uint8_t i=1;i<count;i++)
    {
    result*10%;
    result+=*adr & 0x0F;
    ++adr;
    }
return(result);
}

Возможно ли чтобы _type_ определялся компилятором в зависимости от того, какому
типу я присваиваю функцию? Или это и есть ассемблерно-сишный подход к плюсам?

With best regards, Igor.        Time: 17:45        Date: 26 Апр 06

AVR GCC с плюсами.
Hello Igor.


 IU>  А вот еще вопрос, не успел на работе ответ найти. Мне нужны будут
 IU> функции преобразования символьного представления в бинарный. и
 IU> наоборот.

 atoi & itoa уже не устраивают ? :)

 IU> Могу ли я создать класс с описанием всего лишь одной
 IU> функции, но так чтобы компилятор в зависимости от используемого типа
 IU> делал ссылки на нужные функции и компилил только их? Hапример:

 IU> Возможно ли чтобы _type_ определялся компилятором в зависимости от
 IU> того, какому типу я присваиваю функцию? Или это и есть
 IU> ассемблерно-сишный подход к плюсам?

 Зачем тебе классы ?

 template<class T>
 T Min(T arg1, T arg2)
 {return (arg1 < arg2) ? arg1:arg2;}

 Для каждого типа данных будет сгенерена своя функция.

 int N1 = Min(1, 2);
 double D1=Min(1.23, 3.45);

 Можно еще долго играться с операторами преобразования типов и запутаться при
этом окончательно..
 Почитай про "KISS" принцип, и все сразу встанет на свои места :)



Dmitry


AVR GCC с плюсами.
Привет Igor!

26 Apr 06 17:45, Igor Ulanov писал Alex Mogilnikov:

 IU>  А вот еще вопрос, не успел на работе ответ найти. Мне нужны будут
 IU> функции преобразования символьного представления в бинарный. и
 IU> наоборот.
 IU>  Могу ли я создать класс с описанием всего лишь одной
 IU> функции,

    Класс описывает не функции. Он описывает свойства объекта и определяет
способы его взаимодействия с окружающим миром.

 IU>  но так чтобы компилятор в зависимости от используемого типа
 IU> делал ссылки на нужные функции и компилил только их?

    Hичего не понял. :)

 IU> Возможно ли чтобы _type_ определялся компилятором в зависимости от
 IU> того, какому типу я присваиваю функцию? Или это и есть
 IU> ассемблерно-сишный подход к плюсам?

    Hасколько я ничего не понял, :)  тебе надо описать класс, содержащий в себе
символьную строку данных. И в этом классе определить несколько операторов
преобразования данных строки к нужным тебе типам. Hапример что-то типа такого:

class TStringValue {
public:
  TStringValue(const char *v) : value(v) {}
  operator uint8_t () const { преобразуем строку в uint8_t  }
  operator uint16_t() const { преобразуем строку в uint16_t }
  operator uint32_t() const { преобразуем строку в uint32_t }
  operator double  () const { преобразуем строку в double   }
  operator complex () const { преобразуем строку в complex  }
private:
  std::string value;
};

TStringValue s = "1234567890"; // создаем объект TStringValue
uint8_t u8 = s;         // будет выполнен operator uint8_t
double dbl = s;         // будет выполнен operator double
complex cx = s;         // будет выполнен operator complex

    Hа самом деле на месте uint8_t, double и т.п. у тебя будут твои собственные
классы, в каждом из которых есть operator TStringValue ()...

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Дареному письму в клуджи не смотрят.

AVR GCC с плюсами.
Hello, Alex!

(27 Апр 06 01:17), Alex Mogilnikov писАл Igor Ulanov:
 AM>     Hасколько я ничего не понял, :) тебе надо описать класс,
 ОК:) Спасибо. Скачал Элджера. Огромное спасибо за совет. Похоже это то, что
мне надо было. С первого взгляда - четко, кратко и доходчиво.


With best regards, Igor.        Time: 02:15        Date: 27 Апр 06

Re: AVR GCC с плюсами.
Hello Olga.

25 Apr 06 10:06, Olga Nonova wrote to me:

 DL>>  В конце концов осознать, что программировать на Ц++ с Ц-шным
 DL>> подходом и мировоззрением это то же самое, что программировать на
 DL>> Ц с ассемблерным подходом и мировоззрением.

 ON> И тем не менее, срастить классовый подход C++ с многозадачкой
 ON> реального времени(uCOS, написанной кстати на просто С), мне не
 ON> удалось. Вернее, рождались столь чудовищные конструкции, что пришлось
 ON> забить на все эти наследования и полиморфизмы.

 Эээ.. и что ?
 Вообще, народная мудрость гласит, что:

 - Плохому танцору и тестикулы мешают
 - с дуру можно и прилагающееся к тестикулам сломать
 - Самые серьезные ошибки - они в хромосомах :)))



Dmitry


AVR GCC с плюсами.
Здравствуйте, Уважаемый Dmitry!

Tue Apr 25 2006 19:26, Dmitry Lyokhin wrote to Olga Nonova:

 ON>> И тем не менее, срастить классовый подход C++ с многозадачкой
 ON>> реального времени(uCOS, написанной кстати на просто С), мне не
 ON>> удалось. Вернее, рождались столь чудовищные конструкции, что пришлось
 ON>> забить на все эти наследования и полиморфизмы.

 DL>  Эээ.. и что ?

А то, что к умные разговоры о передовых технологиях прграммирования всегда
следует фильтровать на предмет практических органичений в каждом конкретном
случае. В частности, все фичи С++ ИМХО не сращиваются с многозадачными
системами реального времени, поэтому для управления обьектами из языка С++
можно использовать только его С-конструкции. Классы, наследование и
полиморфизм- отдыхают.

Всего Вам Хорошего
Ольга


Site Timeline