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

 
 
> arm-eabi-gcc, непонятные зависания микроконтроллера
Drozd2
сообщение Mar 14 2013, 07:37
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743



Здравствуйте!
Загвоздка с самосборным компилятором arm-eabi-gcc. Собирал этим скриптом. Простейшая скомпилированная программа работает корректно. После добавления ряда математических вычислений и соответствующих sprintf программа начала зависать, причем в разных местах, в зависимости от того, какую строку закомментировать. Иногда вываливается в data и prefetch abort. В итоге дошло до того, что если удачно раскидать по тексту программы разный хлам типа uart_write("###########") и while(1>5), то можно добиться, чтобы она отрабатывала успешно. Причем если скомпилировать ту же программу в IAR, то работает корректно без дополнительных вставок. Но IAR ломаный, для этого проекта не годится. В чем может быть причина? В скрипте или в исходниках?

P.S. build.sh загрузить не дали, даже после убирания расширения. Пришлось сделать rar.

Сообщение отредактировал Drozd2 - Mar 14 2013, 07:39
Прикрепленные файлы
Прикрепленный файл  build.rar ( 917 байт ) Кол-во скачиваний: 180
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Drozd2
сообщение Mar 21 2013, 09:38
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743



Готовый компилятор от Codesourcery работает только с порядком liitle-endian. Отпадает. Нужен big-endian.
Перепробовал довольно много сочетаний разных версий пакетов для сборки. Скомпилированные бинарники работают по разному, но правильно не заработал ни один. На всякий случай прикрепляю скрипт линкера. Может в нем погрешность?
И насчет кучи. Задавался таким вопросом, бродил по форуму, по интернету, пробовал объявлять секцию, но куча так и осталась незадействованной. Malloc нормально работает без кучи, а больше ничего и не надо было. Если есть, дайте, пожалуйста, ссылки на толковые источники информации по кучам.

Сообщение отредактировал Drozd2 - Mar 21 2013, 09:39
Прикрепленные файлы
Прикрепленный файл  ram.ld.zip ( 868 байт ) Кол-во скачиваний: 18
 
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 21 2013, 19:50
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Drozd2 @ Mar 21 2013, 15:38) *
На всякий случай прикрепляю скрипт линкера. Может в нем погрешность?

Какая-то странная секция - "CONSTRUCTORS". Современные компиляторы помещают конструкторы в секцию ".init_array". Хотя у вас всё равно конструкторы не вызываются из стартапа.
Посмотрите ещё вот этот скрипт для примера, может быть что-то там найдёте полезного.
Цитата(Drozd2 @ Mar 21 2013, 15:38) *
Malloc нормально работает без кучи, а больше ничего и не надо было.

Так не бывает. Malloc как раз выдаёт память из кучи. Куча обычно начинается с позиции _end, определённой в скрипте линкера.
Чтобы контролировать это, попробуйте собрать свой проект с ключом линкера -nostartfiles. Линкер должен будет заругаться на неопределённые имена типа _sbrk() и проч. Тут вы ему подсунете свои заглушки для системных функций, примерно как здесь.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 11:43
Рейтинг@Mail.ru


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