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

 
 
 
Reply to this topicStart new topic
> проблема с IAR, линкер ругается
Zelepuk
сообщение Aug 16 2011, 12:18
Сообщение #1


Знающий
****

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



кто знает что за ругалка в IAR?



Сообщение отредактировал Zelepuk - Aug 16 2011, 12:32
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 16 2011, 12:23
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Zelepuk @ Aug 16 2011, 16:18) *
Error[e27]: Entry "x" in module *.c (путь\*.r43) redefined in module main.c (путь\main.r43)

Это значит, что массив объявлен в обоих файлах.
Объяснить просто. В одном месте объявление оставить, в другом - убрать.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Aug 16 2011, 12:33
Сообщение #3


Знающий
****

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



Спасибо. Полностью заменил первый пост (так как сам разобрался сразу же, но тут другой подвох)
Прошу помоч кто знает.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 16 2011, 12:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Zelepuk @ Aug 16 2011, 14:18) *
кто знает что за ругалка в IAR?

А взять словарь и перевести? Совсем лениво?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Aug 16 2011, 12:46
Сообщение #5


Знающий
****

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



Ну пишет что места ехватает в кристалле для кода. Как обычно по размеру оптимизируется код? Дайте совет

Сообщение отредактировал Zelepuk - Aug 16 2011, 12:46
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 16 2011, 12:52
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Zelepuk @ Aug 16 2011, 14:46) *
Ну пишет что места ехватает в кристалле для кода. Как обычно по размеру оптимизируется код? Дайте совет

Отлично! Там ведь и цифры есть. Так сколько там Вам не хватает sm.gif? Думаете столько соптимизировать удастся sm.gif? Да у Вас скорее всего в исходниках и проекте полная муть.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 16 2011, 12:54
Сообщение #7


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Zelepuk @ Aug 16 2011, 16:46) *
Ну пишет что места ехватает в кристалле для кода. Как обычно по размеру оптимизируется код? Дайте совет

Тут похоже дело не в коде, а в каких-то массивных константах.
Таблицы, может быть. И нехило так не хватает. Оптимизация кода не поможет. В смысле, тупая установка галочки. Нужно оптимизировать алгоритм либо одно из двух.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Aug 16 2011, 13:13
Сообщение #8


Знающий
****

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



Судя по всему, не хватает около 9.5 байт.
У меня просто таблица Фурье-коэффицентов и окно блэкмена на 1024 отсчёта объявлено как константы.

Сообщение отредактировал Zelepuk - Aug 16 2011, 13:38
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 16 2011, 14:04
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Zelepuk @ Aug 16 2011, 15:13) *
Судя по всему, не хватает около 9.5 байт.

9,5 байт sm.gif. Вообще-то это килобайты.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 16 2011, 14:35
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(Zelepuk @ Aug 16 2011, 20:13) *
Судя по всему, не хватает около 9.5 байт.
У меня просто таблица Фурье-коэффицентов и окно блэкмена на 1024 отсчёта объявлено как константы.

Во-первых места не хватает не для кода, а для данных.
Сегмент DATA16_Z у IAR это сегмент для неинициализированных переменных, они при старте программы прописываются нулями.
Что ещё более удивительно. Это Вы так оригинально свои таблицы коэффициентов объявляете?


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Aug 16 2011, 14:58
Сообщение #11


Знающий
****

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



Цитата(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
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 16 2011, 15:35
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



А ОЗУ у этого контроллера всего 4К, как раз на два массива int-ов по 1024 элемента в каждом хватит.
И всё, память кончилась, даже на счётчик цикла не остаётся. sm.gif

В этом семействе есть ещё модели с 8 килобайтами, может быть в них и можно будет упихать.
Или придумывать алгоритмы менее требовательные к памяти.



--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Aug 16 2011, 16:06
Сообщение #13


Знающий
****

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



позарез надо FFT сделать на MSP430F47197.
если не FFT то как расчитать THD на 11 гармоник для отсчётов с каждого АЦП.
Всегда "At least 0x46d more bytes needed." выводится. Меньше сделать не получается((

Сообщение отредактировал Zelepuk - Aug 16 2011, 16:06
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Aug 16 2011, 18:53
Сообщение #14


Знающий
****

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



Как думаете, если алгоритм Герцеля применить - это спасёт ситуацию?
Go to the top of the page
 
+Quote Post

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

 


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


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