Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil TCPNet сваливается в HardFault на LPC4088
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Polaris
Доброго всем дня!

Прикручиваю к проекту в Keil TCPNet, драйвер под LAN8720 работает, соединение ловит, идентификатор вычитывает, но при запуске стека, если использовать DHCP, то происходит падение процессора в HardFault. В режиме отладки получаю следующий лог:
Код
000.0 MEM:Init MemPool 2000 bytes
000.0 ETH:Init interface
000.0 ARP:Init Cache, 10 entries
000.0 IP :Init localhost
000.0 ICMP:Init Engine
000.0 UDP:Init 5 Sockets
000.0 TCP:Init 5 Sockets
000.0 TCP: Local MSS: 1460
000.0 NBNS:Init Name Service
000.0 UDP:Socket 1 allocated
000.0 UDP:Open Socket 1, LocPort 137
000.0 DHCP:Init Client
000.0 UDP:Socket 2 allocated
000.0 UDP:Open Socket 2, LocPort 68
000.1 DHCP:State INIT
000.1 DHCP: Sending BCast DHCP_DISCOVER
000.1 MEM:Alloc 356 bytes


Очень большие подозрения, что падение из-за выделения памяти. Точнее не могу сказать, не знаю, как в этом закрытом стеке что-то еще смотреть.
Если не активировать DHCP, то инициализация проходит нормально с таким логом:
Код
000.0 MEM:Init MemPool 2000 bytes
000.0 ETH:Init interface
000.0 ARP:Init Cache, 10 entries
000.0 IP :Init localhost
000.0 ICMP:Init Engine
000.0 UDP:Init 5 Sockets
000.0 TCP:Init 5 Sockets
000.0 TCP: Local MSS: 1460
000.0 NBNS:Init Name Service
000.0 UDP:Socket 1 allocated
000.0 UDP:Open Socket 1, LocPort 137


Что бы это могло быть, в какую сторону копать?
vlad_new
В кейле при нехватке памяти вылетаеш на ошибку выделения памяти, а не на хардеррор. Где то Вы сами память затираете. Ищите где выходите за пределы каких то ваших массивов. Кол=во сокетов тср, надеюсь, у вас больше на 1, чем кол=во запросов по http. dhcp у кейла нормально работает (если он у вас в конфиге разрешён).
Polaris
Цитата(vlad_new @ Feb 11 2014, 19:02) *
В кейле при нехватке памяти вылетаеш на ошибку выделения памяти, а не на хардеррор. Где то Вы сами память затираете. Ищите где выходите за пределы каких то ваших массивов. Кол=во сокетов тср, надеюсь, у вас больше на 1, чем кол=во запросов по http. dhcp у кейла нормально работает (если он у вас в конфиге разрешён).

Нет, я ничего не затираю, потому что элементарно не успеваю, проблема возникает лишь тогда, когда включен DHCP, вылет происходит где-то в функции main_TcpNet(), к которой доступа у меня нет.
vlad_new
Ну вы же совсем не дали никакой информации. Какая версия, используете ли вы библиотеки именно из этой версии или что то откудото перетаскивали и т.д. В версии 4,7 всё работает, 5 версию я не проверял. К примеру библиотека от предыдущей версии не подходит к следующей. Сколько выделено памяти под кучу и сколько под стек. Ну надо чего то рассказать чтоб народ мог подумать.
Polaris
Цитата(vlad_new @ Feb 12 2014, 11:14) *
Ну вы же совсем не дали никакой информации. Какая версия, используете ли вы библиотеки именно из этой версии или что то откудото перетаскивали и т.д. В версии 4,7 всё работает, 5 версию я не проверял. К примеру библиотека от предыдущей версии не подходит к следующей. Сколько выделено памяти под кучу и сколько под стек. Ну надо чего то рассказать чтоб народ мог подумать.

uVision 4.60, библиотека от него же.
Стек - 2048 байт, куча тоже.
Работа идет с RTX, так что у задачи свой стек.
vlad_new
Старовато. В монопольном режиме с DHCP проблемм не было. Под RTX не пробывал. Хотя точно знаю, что в версии 4.72 много чего исправили. Так что есть смысл проапгрейтится.
Polaris
Цитата(vlad_new @ Feb 12 2014, 16:19) *
Старовато. В монопольном режиме с DHCP проблемм не было. Под RTX не пробывал. Хотя точно знаю, что в версии 4.72 много чего исправили. Так что есть смысл проапгрейтится.

У меня стояла 4.70 - отвратительно работала с отладчиком (uLink2), в сети тоже на это жалуются многие, они там драйвера поменяли и прошивку, так что пришлось вернуться к этой версии, тут стабильно.
Но я вроде бы нашел причину сбоя - unprivileged mode для задач, он там при работе с DHCP зачем-то вызывает int_disable_eth-int_enable_eth уже после инициализации. Теперь поднимается, шлет запросы, пытаюсь запустить дальше. Спасибо!
skripach
Уже много раз писали в каких регистрах смотреть адрес откуда "падает", например тут, попробуйте это проще чем кажется.
Golikov A.
проверьте драйвер EMAC, в LPC1768 в нем была заглушка на выключение - включение прерываний, сначала написали с флагом возвращения в исходный режим, а потом закоментили, и сделали просто выкл - вкл
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.