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

 
 
> Объекты в IAR
chernenko
сообщение Dec 6 2006, 16:47
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Реально ли использование объектов в IAR AVR (версия 3.20).
Написал простую тестовую программу и столкнулся с несколькими трудностями.

Во-первых создаваемый в main объект ни в какую не видится в обработчике прерывания таймера. Undefined говорит и все тут. Ничего не получалось и ушел от этого переносом кода в main, выставляя в прерывании флаг разрешения обработки.

Тестирую на двух фильтрах - объектах КИХ (обычное усреднение) и на БИХ (полосовом).

В debugere объекты создаются и все вроде правильно а в реальности на железе ерунда полная. Иногда бывает что при создании объекта некоторые переменные объекта начинаю неадекватно изменяться....


Вот так выглядит объект:
Код
class TAverage
  {
  private:
  #define average_array_size 32
  signed int average_array[average_array_size];
  signed long int average_out;
  unsigned int curr_average_array;
  
  public:
  unsigned char average_array_max;
  
  TAverage(unsigned char average_array_max_setup)
    {
    if(average_array_max_setup <= average_array_size)
      {
      average_array_max = average_array_max_setup;
      }
    }
    
  signed int average(signed int average_in)
    {
    average_out -= average_array[curr_average_array];
    average_array[curr_average_array] = average_in;  
    average_out += average_array[curr_average_array];
    curr_average_array++;
    if (curr_average_array >= average_array_max) curr_average_array = 0;
    return ((signed int)(average_out / average_array_max + 0.5));
    }
  };


Вот так создается объект с помощью конструктора:
Код
TAverage filtr(32);



Вот так использую метод объекта:
Код
InputData.Y.word = filtr.average(InputData.X.word);


Может я из-за малого опыта и знания допустил концептуальную ошибку.

Или есть объективные причины в невозможности использования объектов в IAR
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 23)
forever failure
сообщение Dec 16 2006, 17:07
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Во первых, во всех файлах, где используется переменная типа TAverage должно быть включено
определние класса TAverage.
Во вторых, во всех файлах, где происходит обращение к полям и методам конкеретной переменной
TAverage filtr, должно быть объявление этой переменной:
extern TAverage filtr;
При этом сама переменная (объект) должна быть объявлена один и только один раз.

Всё получится. Успехов !
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Dec 17 2006, 01:06
Сообщение #17


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



а warning никакких нет?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 17 2006, 01:16
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(chernenko @ Dec 16 2006, 20:13) *
А если через указатели:
Код
TAverage *filtr;
int main(void);


Код
int main
  {
  filtr = new TAverage(32);
  }

И к объекту уже обращаться вот так:
Код
InputData.Y.word = filtr->average(InputData.Y.word);


То компилятор ошибок не находит, но контроллер после прошивки стоит как "камень" smile.gif

В смысле не реагирует вовсе.


Во первых, хотя бы в отладочной версии проверяйте,, создался ли объект, типа так:

Код
TAverage *filtr;
...



filtr = NULL;

filtr = new TAverage(32);

if(NULL == filtr)

{      /* что то с памятью моей стало!!! */

}



/* хромаем дальше */




Во вторых - с помощью new память под объект выделяется в куче (есть такой термин) - это "свободная" память. Ее размер можно указать в опциях проекта


--------------------
Go to the top of the page
 
+Quote Post
chernenko
сообщение Dec 17 2006, 01:32
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Цитата(prottoss @ Dec 17 2006, 01:16) *
Во вторых - с помощью new память под объект выделяется в куче (есть такой термин) - это "свободная" память. Ее размер можно указать в опциях проекта


Проверку я прописал, но до неё выполнение програмы просто не доходило. Увеличил CSTACK и Dynamic memory allocation в Debuger объект стал создаваться, до этого выполнение кода бесконечно в одном месте (пока не понял каком) циклилось при создании объекта. Сейчас объект создается. В железе проверить пока не могу, так как сейчас далеко, но думаю все наладилось в этой части. Большое спасибо!

Сообщение отредактировал chernenko - Dec 17 2006, 01:34
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 17 2006, 03:02
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(chernenko @ Dec 17 2006, 01:32) *
Проверку я прописал, но до неё выполнение програмы просто не доходило. Увеличил CSTACK и Dynamic memory allocation в Debuger объект стал создаваться, до этого выполнение кода бесконечно в одном месте (пока не понял каком) циклилось при создании объекта. Сейчас объект создается. В железе проверить пока не могу, так как сейчас далеко, но думаю все наладилось в этой части. Большое спасибо!


И ещё один совет от новичка. smile.gif Используйте сразу ".xcl" файл для настройки опций проекта, а то стандартное размещение как то хромает... С файлом разобраться не сложно даже без букваря.
Go to the top of the page
 
+Quote Post
chernenko
сообщение Dec 17 2006, 04:42
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Цитата(SasaVitebsk @ Dec 17 2006, 03:02) *
И ещё один совет от новичка. smile.gif

А почему новичка? Судя по конференции fulcrum Вы далеко не новичок. smile.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 17 2006, 16:31
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(chernenko @ Dec 17 2006, 04:42) *
Цитата(SasaVitebsk @ Dec 17 2006, 03:02) *

И ещё один совет от новичка. smile.gif

А почему новичка? Судя по конференции fulcrum Вы далеко не новичок. smile.gif


В области СИ/СИ++ мои знания - зачаточные. Но я сражаюсь! biggrin.gif И очень уверен в себе. smile.gif Мне кажется без этой уверенности ничего сделать нельзя. Когда что-то не получается нельзя чтобы охватывала паника. Я или стискиваю зубы или оставляю тему на неделю. biggrin.gif Кстати результат почти всегда один и тот же.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 17 2006, 17:09
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(SasaVitebsk @ Dec 17 2006, 20:31) *
В области СИ/СИ++ мои знания - зачаточные. Но я сражаюсь! biggrin.gif И очень уверен в себе. smile.gif Мне кажется без этой уверенности ничего сделать нельзя. Когда что-то не получается нельзя чтобы охватывала паника. Я или стискиваю зубы или оставляю тему на неделю. biggrin.gif Кстати результат почти всегда один и тот же.
Сорри, конечно, если обижу)))

Без учебников по Си/Си++ Вы можете сражаться очень долго и без толку, и прыгать, как баран на новые ворота сколь угодно долго. Результат очевиден, ворота будут - Вас возле ворот нет...

Могу порекомендовать две книги - это мои настольные "дао" по Си/Си++:

1.Б.И.Березин, С.Б.Березин. "Начальный курс С и С++". Москва.ДИАЛОГ- МИФИ.1999г

2.Джефф Элджер. "С++: Библиотека программиста ".- СПб: Издательство "Питер". 2000. Перевод с английского Е. Матвеев. :Jeff Alger. "C++ for real PROGRAMMERS"

Из первой можно узнать практически все, если что-то подзабыл по синтаксису и все начальные сведения об объектно-ориентированном программировании (ООП), вторая позволяет получить более углубленные знания по ООП и научиться обходить ошибки в ООП, а так же различным "выкрутасам" с объектами...


--------------------
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 18 2006, 23:58
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(prottoss @ Dec 17 2006, 17:09) *
Сорри, конечно, если обижу)))

Без учебников по Си/Си++ Вы можете сражаться очень долго и без толку, и прыгать, как баран на новые ворота сколь угодно долго. Результат очевиден, ворота будут - Вас возле ворот нет...

Могу порекомендовать две книги - это мои настольные "дао" по Си/Си++:

1.Б.И.Березин, С.Б.Березин. "Начальный курс С и С++". Москва.ДИАЛОГ- МИФИ.1999г

2.Джефф Элджер. "С++: Библиотека программиста ".- СПб: Издательство "Питер". 2000. Перевод с английского Е. Матвеев. :Jeff Alger. "C++ for real PROGRAMMERS"

Из первой можно узнать практически все, если что-то подзабыл по синтаксису и все начальные сведения об объектно-ориентированном программировании (ООП), вторая позволяет получить более углубленные знания по ООП и научиться обходить ошибки в ООП, а так же различным "выкрутасам" с объектами...


Спасибо, но я конечно пользуюсь книгами. smile.gif Я не до такой степени в себе уверен, чтобы отбросить чужой опыт и знания. biggrin.gif

В то же время не могу не отметить, что живое общение (я имею ввиду не SMS и телефон, а ELECTRONIX smile.gif ), не променяю ни на какие коврижки. Большое человеческое спасибо организаторам, ну и авторам конечно же!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 07:49
Рейтинг@Mail.ru


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