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

 
 
> непонятные ошибки вычислений, помогите советом
Zelepuk
сообщение Sep 24 2011, 13:00
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Суть проблемы:
Есть необходимость вычисления FFT на микроконтроллере.
Есть вполне рабочая реализация (проверено в CBuilder).

Проверил работу реализации в тестовой программе (написаной под IAR для MSP430) - возвращаемые значения верные.
Попробовал добавить эту же реализацию в рабочий проект(так же под IAR для MSP430) - функция расчёта FFT возвращает полную чушь.

Грешил на оптимизацию - оба проекта (тестовый и рабочий) имеют одинаковые настройки. Никак не пойму в чём дело.
Возможно у кого-то были такие проблемы. Прошу поделиться соображениями.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dog Pawlowa
сообщение Sep 24 2011, 15:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



А банально - стек какой-нить?
Типа в рабочем коде прерывания (или функции вывода) затирают данные расчетов.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Sep 25 2011, 05:58
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Dog Pawlowa @ Sep 24 2011, 19:22) *
А банально - стек какой-нить?
Типа в рабочем коде прерывания (или функции вывода) затирают данные расчетов.


А как данные могут затираться, если нигде в прерываниях и в функциях вывода переменные учатвующие расчётах не фигурируют?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 25 2011, 18:09
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Zelepuk @ Sep 25 2011, 08:58) *
А как данные могут затираться, если нигде в прерываниях и в функциях вывода переменные учатвующие расчётах не фигурируют?
Потелепатируем: Ваши данные хранятся в глобальной переменной (массиве). Массив большой. В функции расчета FFT вы заводите локальные массив или какие-то переменные. Они размещаются на стеке. Поскольку стек и область глобальных переменных растут навстречу друг другу - при нехватке памяти стек налезает на глобальные переменные и локальные данные оказываются поверх вашего массива входных данных. Со всеми вытекающими. Проверить оченть просто - разместите после массива глобальную переменную (обязательно volatile), при старте программы занесите в нее любое значение и в ходе выполнения программы проверяйте, что значение не изменилось. Если изменилось - проблема вероятнее всего в нехватке стека.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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