|
Объекты в IAR |
|
|
|
Dec 6 2006, 16:47
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Dec 16 2006, 16:13
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116

|
Только часто бывает, что в борланде идея работает а в железе нет. Вот сейчас, если объект создать так: Код int main(void); TAverage filtr(8); И использовать его вот так: Код InputData.Y.word = filtr.average(InputData.Y.word); Все прекрасно работает! А если через указатели: Код TAverage *filtr; int main(void); Код int main { filtr = new TAverage(32); } И к объекту уже обращаться вот так: Код InputData.Y.word = filtr->average(InputData.Y.word); То компилятор ошибок не находит, но контроллер после прошивки стоит как "камень" В смысле не реагирует вовсе.
|
|
|
|
|
Dec 17 2006, 01:16
|

Гуру
     
Группа: Свой
Сообщений: 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); То компилятор ошибок не находит, но контроллер после прошивки стоит как "камень" В смысле не реагирует вовсе. Во первых, хотя бы в отладочной версии проверяйте,, создался ли объект, типа так: Код TAverage *filtr; ...
filtr = NULL;
filtr = new TAverage(32);
if(NULL == filtr)
{ /* что то с памятью моей стало!!! */
}
/* хромаем дальше */ Во вторых - с помощью new память под объект выделяется в куче (есть такой термин) - это "свободная" память. Ее размер можно указать в опциях проекта
--------------------
|
|
|
|
|
Dec 17 2006, 01:32
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116

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

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

|
Цитата(SasaVitebsk @ Dec 17 2006, 20:31)  В области СИ/СИ++ мои знания - зачаточные. Но я сражаюсь!  И очень уверен в себе.  Мне кажется без этой уверенности ничего сделать нельзя. Когда что-то не получается нельзя чтобы охватывала паника. Я или стискиваю зубы или оставляю тему на неделю.  Кстати результат почти всегда один и тот же. Сорри, конечно, если обижу))) Без учебников по Си/Си++ Вы можете сражаться очень долго и без толку, и прыгать, как баран на новые ворота сколь угодно долго. Результат очевиден, ворота будут - Вас возле ворот нет... Могу порекомендовать две книги - это мои настольные "дао" по Си/Си++: 1.Б.И.Березин, С.Б.Березин. "Начальный курс С и С++". Москва.ДИАЛОГ- МИФИ.1999г 2.Джефф Элджер. "С++: Библиотека программиста ".- СПб: Издательство "Питер". 2000. Перевод с английского Е. Матвеев. :Jeff Alger. "C++ for real PROGRAMMERS" Из первой можно узнать практически все, если что-то подзабыл по синтаксису и все начальные сведения об объектно-ориентированном программировании (ООП), вторая позволяет получить более углубленные знания по ООП и научиться обходить ошибки в ООП, а так же различным "выкрутасам" с объектами...
--------------------
|
|
|
|
|
Dec 18 2006, 23:58
|
Гуру
     
Группа: Свой
Сообщений: 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"
Из первой можно узнать практически все, если что-то подзабыл по синтаксису и все начальные сведения об объектно-ориентированном программировании (ООП), вторая позволяет получить более углубленные знания по ООП и научиться обходить ошибки в ООП, а так же различным "выкрутасам" с объектами... Спасибо, но я конечно пользуюсь книгами.  Я не до такой степени в себе уверен, чтобы отбросить чужой опыт и знания. В то же время не могу не отметить, что живое общение (я имею ввиду не SMS и телефон, а ELECTRONIX  ), не променяю ни на какие коврижки. Большое человеческое спасибо организаторам, ну и авторам конечно же!
|
|
|
|
Сообщений в этой теме
chernenko Объекты в IAR Dec 6 2006, 16:47 dxp Цитата(chernenko @ Dec 6 2006, 19:47) Реа... Dec 11 2006, 10:35 chernenko Цитата(dxp @ Dec 11 2006, 10:35) Насчет т... Dec 13 2006, 13:41  dxp Цитата(chernenko @ Dec 13 2006, 16:41) Ци... Dec 13 2006, 13:51 jorikdima Объект то где согдается? Глобально? Dec 13 2006, 13:54 chernenko Цитата(jorikdima @ Dec 13 2006, 13:54) Об... Dec 13 2006, 14:00 jorikdima Во-первых локального объявления функции быть не мо... Dec 13 2006, 14:11 chernenko Цитата(jorikdima @ Dec 13 2006, 14:11) Во... Dec 13 2006, 14:19 jorikdima Цитата(chernenko @ Dec 13 2006, 14:19) Ци... Dec 13 2006, 16:39 chernenko Цитата(jorikdima @ Dec 13 2006, 16:39) Ци... Dec 15 2006, 23:00  prottoss Цитата(chernenko @ Dec 16 2006, 03:00) Но... Dec 15 2006, 23:12   chernenko Цитата(prottoss @ Dec 15 2006, 23:12) Пра... Dec 15 2006, 23:40    jorikdima Цитата(chernenko @ Dec 15 2006, 23:40) А ... Dec 16 2006, 12:16    prottoss Цитата(chernenko @ Dec 16 2006, 03:40) А ... Dec 16 2006, 12:34 forever failure Во первых, во всех файлах, где используется переме... Dec 16 2006, 17:07 jorikdima а warning никакких нет? Dec 17 2006, 01:06
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|