Перейти к содержанию
    

Keil 5.25. 1986ВЕ1Т. Ethernet - произвольные остановки.

Добрый день, прошу помощи в пояснении проблемы.

Есть код, написанный в Keil 5.25, на микроконтроллер 1986ВЕ1Т.

В нем используются интерфейсы UART и Ethernet.

При работе с функциями относящимися к Ethernet, при Debuge по нажатию Run(F5) случаются остановки в случайных строках в коде(без точек останова),затем, если несколько раз так запускать в конечном итоге окажемся в HartFault_Hendlere.

Но если плату запускать без Debuga, а просто подачей питания, код выполняется корректно. Есть связь с ПК, могу пинговать, подключаться через терминал по Telnet, TCP. Отправлять и принимать данные.

А вот из под Debuga так не получается, выполнение все время останавается, от этого и не устанавливается соединение по Ethernet. Невозможно отлаживаться.

При работе только с UART ( при закоментированных вызовах функций относящихся к Ethernet) программа выполняется без ошибок из под Debuga(CMSIS-DAP Debugger) и без него.(Т.е. при подаче питания и загрузке МК). По F5 переходит к точкам останова, а при их отсутствии "крутится в while".

Прошу помощи разобраться, в чем может быть проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 минуты назад, BadNonse сказал:

Прошу помощи разобраться, в чем может быть проблема?

Поменять эмулятор. Или кабель от платы до него. Или свойства подключения отладчика (частота и пр.). Или разводку дорожек к эмулятору на плате.

Проверить работу проекта на заведомо правильно изготовленной отладочной плате.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, jcxz сказал:

Поменять эмулятор. Или кабель от платы до него. Или свойства подключения отладчика (частота и пр.). Или разводку дорожек к эмулятору на плате.

Кабель меняли, платы менял ( есть своя, а есть борд от LDM_SYSTEMS с таким же МК), эмуляторов тоже 2, но правда одной и той же модели. Сейчас попробую изменить скорость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, BadNonse сказал:

Сейчас попробую изменить скорость.

Скорость - на минимум. 2МГц или 4. Автоскорость - отключить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, jcxz сказал:

Скорость - на минимум. 2МГц или 4. Автоскорость - отключить.

Пробовал скорость от 500khz до 10mhz, ничего не меняется, все также, остановки с странных местах. Возможно это из-за таймера? И меня ещё смущает, что в обработку HardFault_Hendler нельзя поставить точку останова, исходя из этого , предполагаю, что процесс труда никогда не попадет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, BadNonse сказал:

в обработку HardFault_Hendler нельзя поставить точку останова

Поставьте оптимизацию на минимум или вообще её отключите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

27 минут назад, jcxz сказал:

Поставьте оптимизацию на минимум или вообще её отключитеп

При оптимизации default  или -O0 и скорости 20-50khz, через раз начал пинговаться, но все также хаотично останавливается.

И ещё вопрос, а какие правильные настройки должны быть у программатора? У меня работает только при Erase full chip + Program+Verify+Reset and Run.

Изменено пользователем BadNonse

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, BadNonse сказал:

При работе с функциями относящимися к Ethernet, при Debuge по нажатию Run(F5) случаются остановки в случайных строках в коде(без точек останова),затем, если несколько раз так запускать в конечном итоге окажемся в HartFault_Hendlere.

Я бы грешил на переполнение стека. Запустите проверку заполняемости стека, например изначально заполнить 0xaa.

У меня работал 1986ВЕ1 нормально, одна проблема - памяти очень мало.

Cтек LwIP? Многозадачка или по тикам едет прием-передача?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, BadNonse сказал:

При оптимизации default  или -O0 и скорости 20-50khz, через раз начал пинговаться, но все также хаотично останавливается.

Ищите баги в своём коде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26.03.2022 в 14:12, BadNonse сказал:

в чем может быть проблема?

Читайте в errata про ошибку с ID = 0014.

26.03.2022 в 15:23, BadNonse сказал:

У меня работает только при Erase full chip + Program+Verify+Reset and Run.

Это особенность FLM из штатного пака. Есть другие, альтернативные, которые не требуют обязательного стирания всего чипа и умеют стирать внутреннюю флеш-память страницами по 4 кбайта, а не только всю полностью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Darth Vader сказал:

Читайте в errata про ошибку с ID = 0014.

Это особенность FLM из штатного пака. Есть другие, альтернативные, которые не требуют обязательного стирания всего чипа и умеют стирать внутреннюю флеш-память страницами по 4 кбайта, а не только всю полностью.

Спасибо большое, прочту по ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...