Цитата(SSerge @ Aug 16 2011, 18:35)

Во-первых места не хватает не для кода, а для данных.
Сегмент DATA16_Z у IAR это сегмент для неинициализированных переменных, они при старте программы прописываются нулями.
Что ещё более удивительно. Это Вы так оригинально свои таблицы коэффициентов объявляете?
на самом деле я делю FFT на 1024 точки (так уж сложилось из требований оконного взвешивания и точности).
У меня АЦП 6 каналов (MSP430F47197).
1) Для каждого АЦП я создаю кольцевой буфер, в котором хряню выборки умноженные на окно;
2) Как только каждый буфер накопился (выставляю флаг готовности данных) - копирую каждый буфер в буфер для фурье (а это отдельные масивы 1024 отсчёта всего 6 массивов);
3) Делаю фурье по два реальных массива за одно комплексное
4) Разделяю действительные и мнимые части двух последовательностей после фурье (это по два массива на один выходной массив FFT - 4 массива по 1024 отсчёта);
5) нахожу амплитудный спектр для каждого канала (2 массива новых)
6) нахожу THD для каждого канала
Итак, после того как количесвто промежуточных массивов было уменьшено в несколько (!!) раз я получил сообщение от линкера:
Error[e16]: Segment DATA16_Z (size: 0x146d align: 0x1) is too long for segment definition. At least 0x46d more bytes needed. The problem occurred...
Чтож уже лучше))
И теперь алгоритм выглядит так:
1) Для каждого АЦП я создаю кольцевой буфер, в котором хряню выборки умноженные на окно;
2) Как только каждый буфер накопился (выставляю флаг готовности данных) - копирую каждый буфер в буфер для фурье, но уже использую два буфера для фурье
3) делаю фурье по два массива (два реальных одним комплексным БПФ)
4) затем извлекаю реальные и мнимые части (это уже 2 массива)
5) нахожу амплитуду (это 1 массив)
6) нахожу THD одного канала;
Причём все вспомогательные массивы (массив фурье, массив реальной и мнимой частей, массив амплитуд) объявлены как extern и находятся в отдельном *.h файле. И естественно при старте инициализируются нулями.
Таким образом количесто циклов в программе увеличилось, но места программа стала занимать меньше. Как ещё можно "поджать" код?
Сообщение отредактировал Zelepuk - Aug 16 2011, 15:14