Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-апр-20 18:12

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: 1986ВЕ1Т + GCC (+LwIP)
СообщениеДобавлено: 2018-ноя-07 14:12 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 25
Доброго времени суток.

Возникла необходимость в использовании библиотеки LwIP.
Как пример был использован проект от R Max.

Если собрать пример в keil, то прошивка работает. Контроллер получает ip адрес с помощью dhcp и отвечает на icmp запрос. Собирается без CMSIS Driver.

Если же собрать аналогичный проект с помощью GCC(используется ubuntu и eclipse), то этого не происходит. Во время отладки при вызове функции net_init() происходит hard fault. Функция net_init в свою очередь вызывает функцию lwip_init(), в которой происходит вызов библиотечных функций инициализации памяти (похожая проблема также была при попытке использовать FreeRTOS).

Оба проекта во вложении. Файлы с исходным кодом должны быть одинаковы в обоих проектах, за исключением startup-файлов и атрибута aligned в файле ethernetif.c.
Используется плата от LDM.

Хотел бы попросить помощи чтобы разобраться в чем может быть причина.

Кстати, при работе на частоте 144 МГц корпус контроллера ощутимо нагревается. Так и должно быть?


Вложения:
MDR1986BE1T.7z [1.55 МБ]
Скачиваний: 39
LwIP_rmax.7z [1.26 МБ]
Скачиваний: 36
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1986ВЕ1Т + GCC (+LwIP)
СообщениеДобавлено: 2018-ноя-08 09:42 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 313
Откуда: ПКК "Миландр"
Попробуйте по стеку посмотреть откуда был выход в HardFault и в этом месте сравните ассемблерный код сгенерированный компиляторами.
Возможно происходит какой-нибудь невыровненный доступ по адресу, например вследствие оптимизации или разных ключей компиляции.

немного, про раскручивание стека - https://startmilandr.ru/doku.php/prog:debug:stack

Можно попробовать собрать рабочий проект под компилятор ARM v6 (выбирается в настройках проекта Keil, Target). В нем заявлена совместимость с GCC и если выход в HardFault произойдет, то проще будет отследить разницу в ассемблерных инструкциях из одной среды.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1986ВЕ1Т + GCC (+LwIP)
СообщениеДобавлено: 2018-ноя-08 11:21 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 25
Vasiliy писал(а):
Попробуйте по стеку посмотреть откуда был выход в HardFault и в этом месте сравните ассемблерный код сгенерированный компиляторами.
Возможно происходит какой-нибудь невыровненный доступ по адресу, например вследствие оптимизации или разных ключей компиляции.

немного, про раскручивание стека - https://startmilandr.ru/doku.php/prog:debug:stack

Можно попробовать собрать рабочий проект под компилятор ARM v6 (выбирается в настройках проекта Keil, Target). В нем заявлена совместимость с GCC и если выход в HardFault произойдет, то проще будет отследить разницу в ассемблерных инструкциях из одной среды.


Проблема оказалась в том, что при обработке прерываний от таймера использовался обработчик по умолчанию. При отладке он отображался как HardFault_Handler.

В стартап - файле для keil обработчик назван TIMER4_IRQHandler(как и в проекте), для gcc - Timer4_IRQHandler.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1986ВЕ1Т + GCC (+LwIP)
СообщениеДобавлено: 2018-ноя-23 10:34 
Не в сети

Зарегистрирован: 2018-сен-14 15:48
Сообщения: 25
Дабы не плодить темы спрошу здесь:
Как можно разместить кучу в области 0x20100000...0x20103FFF с использованием gcc?
При попытке поправить ld-скрипт для линкера (заменить RAM на IRAM) выдается ошибка "region RAM overflowed with stack".


Последний раз редактировалось Dmitry_S 2018-дек-12 17:07, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1986ВЕ1Т + GCC (+LwIP)
СообщениеДобавлено: 2018-ноя-26 13:39 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 313
Откуда: ПКК "Миландр"
Я не работал с GCC, но в самом файле описана причина

https://github.com/eldarkg/emdr1986x-st ... 986VE1T.ld

Код:
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB