Реально ли использование объектов в 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