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

|
Цитата(jorikdima @ Dec 13 2006, 16:39)  Цитата(chernenko @ Dec 13 2006, 14:19)  Цитата(jorikdima @ Dec 13 2006, 14:11)  Во-первых локального объявления функции быть не может. (это я к фразе "Так же как и глобальное объявление функции? ")
Я не програмист, а радиотехник и вынужден изучать язык не имея никакой академической начальной платформы. И я Так в итоге вышло?? В результате получилась последовательность элементарных КИХ - фильтров. Одна проблема: В тестовой программке объекты создаются вот так: Код int main(void); void SerialSetDelay(void); void StartADC(void); void StopADC(void); TAverage filtr(8); TAverage filtr0(16); Затем в прерывании используются вот так: Код InputData.Y.word = filtr.average(filtr0.average(InputData.Y.word)); Но это не гибко совсем. То есть эти объекты в процессе программы я не могу удалить и не могу создать другие фильтры с новыми параметрами.
|
|
|
|
|
Dec 15 2006, 23:12
|

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

|
Цитата(chernenko @ Dec 16 2006, 03:00)  Но это не гибко совсем. То есть эти объекты в процессе программы я не могу удалить и не могу создать другие фильтры с новыми параметрами. ну а почему бы не воспользоваться new и delete? Схема такая: Объявляете в глобальном пространстве не статические классы, а указатели: Код TAverage *filtr; В функции main создаете объекты с помощью new Код filtr = new TAverage(32); Когда надо, удаляете объект Код delete filtr; Правда сдесь уже надо будет следить за тем, создался ли объект или нет, кроме того распределять, кто может создавать объекты, а кто может их убивать. Конечно, как говорили выше, стоит почитать соотв. литературу, прежде чем сурьезно браться за C++
--------------------
|
|
|
|
|
Dec 15 2006, 23:40
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116

|
Цитата(prottoss @ Dec 15 2006, 23:12)  Правда сдесь уже надо будет следить за тем, создался ли объект или нет, кроме того распределять, кто может создавать объекты, а кто может их убивать. Конечно, как говорили выше, стоит почитать соотв. литературу, прежде чем сурьезно браться за C++ А разве я серьезно взялся... Увы книжка не дает реального опыта А изучение происходит на текущем опыте решения конкретных небольших задачек, так как практически нет времени глубоко погрузиться. А дальше, если я правильные книги читаю  , к методам этих объектов я должен уже обращаться вот так: Код InputData.Y.word = filtr->average(filtr0->average(InputData.Y.word));
Сообщение отредактировал chernenko - Dec 16 2006, 00:00
|
|
|
|
Сообщений в этой теме
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 15 2006, 23:40) А ... Dec 16 2006, 12:16    prottoss Цитата(chernenko @ Dec 16 2006, 03:40) А ... Dec 16 2006, 12:34 chernenko Только часто бывает, что в борланде идея работает ... Dec 16 2006, 16:13 prottoss Цитата(chernenko @ Dec 16 2006, 20:13) А ... Dec 17 2006, 01:16  chernenko Цитата(prottoss @ Dec 17 2006, 01:16) Во ... Dec 17 2006, 01:32   SasaVitebsk Цитата(chernenko @ Dec 17 2006, 01:32) Пр... Dec 17 2006, 03:02    chernenko Цитата(SasaVitebsk @ Dec 17 2006, 03:02) ... Dec 17 2006, 04:42     SasaVitebsk Цитата(chernenko @ Dec 17 2006, 04:42) Ци... Dec 17 2006, 16:31      prottoss Цитата(SasaVitebsk @ Dec 17 2006, 20:31) ... Dec 17 2006, 17:09       SasaVitebsk Цитата(prottoss @ Dec 17 2006, 17:09) Сор... Dec 18 2006, 23:58 forever failure Во первых, во всех файлах, где используется переме... Dec 16 2006, 17:07 jorikdima а warning никакких нет? Dec 17 2006, 01:06
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|