|
Ykmys Soitum
|
|
Ошибка при сборке проекта при превышении объема .SRAM 204819.06.2012, 14:02. Показов 7406. Ответов 19
Метки нет (Все метки)
Добрый день.
Прошу помочь разобраться с проблемой отказа в сборке проекта . AVRStudyo 4.19 Проект на C. Используется стандартный компилятор и линковщик avr-gcc Все модули нормально компилируются но когда объем переменных превышает 2048 байт, идет ошибка при сборке. причем, если переменных 2022 байта - собирается нормально. Ошибку выкидывает : "avr-gcc -mmcu=atmega64 -Wl,-Map=FOC_ad_v2.map FOC_ad_v2.o ... куча , куча объектников... volt_calc.o -o FOC_ad_v2.elf c:/program files/atmel/avr tools/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr5\libc.a(fp_powsodd.o):/home/tools/hudson/worksposi/avr8-gnu-toolchain/src/avr-libc/libm/fplib/fp_powsodd.S:59: relocation truncated to fit: R_AVR_13_PCREL against symbol `__mulsf3 defined in .text section in c:/program files/atmel/avr tools/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr5\libgcc.a(_mul_sf.o) " Ошибка не зависит от выбора камня в настройках проекта. И атмега32, и с атмега64 ошибку выкидывает одинаковую. |
|
| 19.06.2012, 14:02 | |
|
Ответы с готовыми решениями:
19
Повторная отправка данных при превышении объема текста Ошибка при сборке проекта Ошибка при сборке проекта |
|
SWK
|
||
| 19.06.2012, 14:13 | ||
Укажите Мегу 128 (у нее 4 КБ) - и будет вам щастье... Кстати, не забудьте, что в ОЗУ еще и стек размещается. Это вам не PIC с его выделенным стеком... |
||
|
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
|
|
| 19.06.2012, 14:21 | |
|
Вы сами озвучили проблему, и решение лежит на поверхности - ужимать объем переменных, либо, как подсказывает SWK, менять камень на другой с бо?льшим объемом ОЗУ, не только в настройках проекта, но и в реале. На то он и компилятор, чтобы сразу пресекать такие переборы, и чтобы вы голову потом не ломали - почему не работает. И не забывайте, что компилер резервирует часть ОЗУ под стек.
0
|
|
|
Ykmys Soitum
|
||
| 19.06.2012, 14:27 | ||
Кстати, Вы ошибаетесь. У Атмеги64 и у Атмеги128 ОЗУ одинаковое - 4 кБ |
||
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 275
|
|
| 19.06.2012, 14:46 | |
|
Проект надо бы приложить
0
|
|
|
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
|
|
| 19.06.2012, 14:49 | |
|
Что-то я не вижу в приведенных логах ругательство на объем переменных о_О
Вроде он ругается на повторное объявление «__mulsf3»
0
|
|
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 275
|
|
| 19.06.2012, 14:57 | |
|
Не повторное объявление, а невозможность релокации - типа RJMP со слишком большим смещением
0
|
|
|
Ykmys Soitum
|
||
| 19.06.2012, 15:00 | ||
в отличии от "redefined" Ругается на модули из стандартной библиотеки libgcc.a |
||
|
Ykmys Soitum
|
||
| 19.06.2012, 16:11 | ||
Это оказалось связанно не с объемом переменных. При объеме переменных более 2048 байт компилируется. Проблема возникает в следующем случае. a = (int)((ftoot)0.3333 * (int) b) в проекте с объемом кода 15 кбайт. видать в библиотеке ошибка. не справляется с преобразованием типов. ------------------------------ Всем спасибо за оказанное внимание к вопросу. Это помогло найти ошибку в своих рассуждениях :). |
||
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 275
|
|
| 19.06.2012, 17:12 | |
|
Igmys Caelum, какая версия winavr/gcc? Может выложишь проект? Интересно все же, где косяк. Я конечно допускаю что есть баг в avr-libc, но все же вероятнее всего проблема в вызове компилятора/компоновщика.
0
|
|
|
Ykmys Soitum
|
||
| 19.06.2012, 17:20 | ||
Проект приложил. это первое приближение портированного аппноута TI. Косяк в файле volt_calc.c в строке v->VphaseA = (TWO_THIRD * v->MfuncV1); что эквивалентно приведенной строке : (int)a = (int)((ftoot)0.3333 * (int) b) константа TWO_THIRD объявлена в volt_calc.h. Тип поля записи v->VphaseA объявлен в dmctype.h // проект чуть позже удалю [60.38 Кб] |
||
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 275
|
||||||||||||||||
| 20.06.2012, 06:14 | ||||||||||||||||
|
Проблема решается добавлением одной строки в мэйкфайл:
0
|
||||||||||||||||
|
Ykmys Soitum
|
||
| 20.06.2012, 16:04 | ||
Мэйкфайл правил вручную, как заставить avrsudyo добавлять -lm - не знаю. Важно, чтобы -lm было в конце командной строки, после всех объектных файлов. Согласен. Читая внимательно хелп на avr-gcc lib в разделе FAQ указано, что вычисления с плавающей точкой могут не работать ,работать не правильно , непредсказуемо. При этом нормально компилироваться. И надо использовать libcm.a если использовать avrstudyo 4, то подключение библиотеки указывается в параметрах проекта. + возможно использование единого ключа для компиляции каждого из модулей, также указав в настройках проекта. Это может быть любой набор ключей. В том числе и -lm после подключения библиотеки размер кода уменьшился с 15 кбайт до 12 килобайт, и размер данных уменьшился на 10%. Еще раз - спасибо. |
||
|
dork
|
|
| 05.12.2012, 14:43 | |
|
Столкнулся с той же фигней после конвертации проекта с avrstudyo 4 на AS6
Этот флаг для AS6 в опциях проекта можно указать здесь: Вкладка - Toolchain AVR/GNU Linker->Miscellamious (в поле другие флаги линковки) -lm |
|
|
1 / 1 / 0
Регистрация: 25.01.2012
Сообщений: 492
|
||
| 05.12.2012, 15:15 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 25.01.2012
Сообщений: 492
|
||
| 05.12.2012, 15:18 | ||
Чего-то перемудрили.
0
|
||
|
dork
|
||
| 05.12.2012, 16:37 | ||
сама математическая библиотека подключается естественно явно - <math.h> но.... цитирую: Обратите внимание, что названия всех этих библиотек начинаются с буквосочетания lib-. Для их явного включения в исполняемый файл, нужно добавить к команде gcc опцию -l, к которой слитно прибавить название библиотеки без lib-. Например, чтобы включить библиотеку libvga надо указать опцию -lvga. Если нам нужны математические функции pow, sqrt, sin, cos, tan. Они находятся в математической библиотеке libm. Следовательно, чтобы подключить эту библиотеку, мы должны указать опцию -lm. зы Как подключить через makefile тут уже писали, но у кого то возник вопрос как влепить эту опцию в оболочке (для avrstudyo 4). У меня AS6 и при переносе проекта с мат. функциями автоматически из avrstudyo 4 эта опция выключена, отсюда и вопрос поднятый топикстартером. |
||
|
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
|
||
| 05.12.2012, 17:05 | ||
Чего-то перемудрили. Графоман, однако. Или нет?
0
|
||
|
dork
|
||
| 05.12.2012, 17:26 | ||
Не обязательно... Я сам сталкивался с моментами, когда GCC ведет себя странно при приведении типов (по умолчанию), зачастую проще указать подобную конструкцию и не иметь проблемм, чем долго тестить и обнаружить, что в выражении (0.333 * b) все приведено было к int, а потом выполнено умножение.... Правда я стараюсь (обычно для деления и если не критично во времени) все операнды приводить к ftoot, а результат к чему нужно. Может кто знает более красивые варианты решения таких проблемм? |
||
|
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
|
|||||||
| 05.12.2012, 18:16 | |||||||
0
|
|||||||
| 05.12.2012, 18:16 | |
|
Помогаю со студенческими работами здесь
20
Ошибка при сборке проекта Ошибка при сборке проекта
Ошибка при сборке проекта Ошибка, при сборке проекта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub
Примеры вызова:
# Указанная валюта 'EUR'
floatrates-rub -Code 'EUR'
# Список имеющихся кодов валют
floatrates-rub -Available
function floatrates-rub {
|
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5
Примеры вызова
Get-WeatherRP5rss
с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
|
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr
Примеры вызова:
Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
|
|
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют
function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) {
$url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js'
$data = Invoke-RestMethod -Uri $url
$esc = 27
. . .
|
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений
Всем привет. А вот мой компьютер, переделанный из ноутбука.
Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
|
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
|
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца:
Хочу еще Симбу взять, очень нравится. . .
|
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
|