Jump to content

    
b-volkov

IAR залипает на брекпоинте.

Recommended Posts

IAR 8.4 + STLink+STM32F7xx. Если остановить программу на брекпоинте, то она потом не может с него уйти, выполняешь "Go" или "Step"  - остается в той же точке. Приходится снимать брекпоинт,делать шаг и потом брекпоинт восстанавливать .  Если отлаживаешь циклический процесс с несколькими брекпоинтами, да еще в разных модулях, то полная вешалка.  В чем может быть дело?

Share this post


Link to post
Share on other sites
9 минут назад, b-volkov сказал:

IAR 8.4 + STLink+STM32F7xx. Если остановить программу на брекпоинте, то она потом не может с него уйти, выполняешь "Go" или "Step"  - остается в той же точке. Приходится снимать брекпоинт,делать шаг и потом брекпоинт восстанавливать .

"Делать шаг" где? В окне ассемблера?

И какой бряк имеется в виду: программный? аппаратный?

И где установлен: во флешь? в ОЗУ?

Share this post


Link to post
Share on other sites
2 часа назад, b-volkov сказал:

IAR 8.4 + STLink+STM32F7xx. Если остановить программу на брекпоинте, то она потом не может с него уйти
...
В чем может быть дело?

Это известная проблема, причем проблема ядра АРМа. Вечером попробую поискать ссылки, может найду. На сайте АРМа есть документ, который подтверждает ошибку в модуле отладки, в конференции STM были топики, где служба поддержки это признавала.

У Сеггера есть какой-то обходной путь, при помощи которого они это обходят. Говорят, есть прошивка Сеггера для STLink, которую можно бесплатно скачать и прошить. И якобы можно в случае чего откатится назад. Но я не пробовал.

Share this post


Link to post
Share on other sites
5 минут назад, Baser сказал:

Это известная проблема, причем проблема ядра АРМа.

Скорее всего ТС во FreeRTOS отлаживает поэтому и такое поведение.

Share this post


Link to post
Share on other sites
1 hour ago, AleksBak said:

Скорее всего ТС во FreeRTOS отлаживает поэтому и такое поведение.

Ну-ка, ну-ка, подробнее, плиз))) Несколько лет плотно работаю с FreeRTOS. Чем это она мешает отладке, а?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Проблема в Cortex-M7 devices with core revisions r0p0 or r0p1

Вот ссылки:
Problem with Single Step STMF7
ARM: single stepping Cortex-M7 enters pending exception handler

На сайте АРМа нашел только оглавление, сам документ чего-то не открывается.
ARM Embedded Trace Macrocell CoreSightTM ETMTM M7(TM975) Product Revision r0 - Software Developers Errata Notice Documentation

Решение, как я уже писал, или перепрошивать STLink, или применять J-Link

Share this post


Link to post
Share on other sites
19 часов назад, b-volkov сказал:

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

А что - в вашем IAR-е нет меню с пунктом "STLink\Disable Interrupts When Stepping"? А если попробовать его включить?  :wink:

 

Кроме того: В STM32F4 есть регистры DBGMCU_APB1_FZ/DBGMCU_APB2_FZ, в которых можно выставлять биты остановки используемых таймеров на время HALT-сотояния процессора (на бряке). Чтобы не генерились ненужные IRQ. Думаю - что и в STM32F7 имеется подобный регистр. Читайте мануал!

 

18 часов назад, Baser сказал:

Проблема в Cortex-M7 devices with core revisions r0p0 or r0p1

Вот ссылки:
Problem with Single Step STMF7
ARM: single stepping Cortex-M7 enters pending exception handler

Так как ТС так и не ответил на вопрос: "В каком именно окне отладчика он делает шаг", то не факт, что это та самая проблема. Вангую, что скорее всего он его делает в окне исходника, а это уже быстрее всего не "single stepping".

Я именно поэтому задавал свой первый вопрос.  :unknw:

Share this post


Link to post
Share on other sites
50 minutes ago, jcxz said:

А что - в вашем IAR-е нет меню с пунктом "STLink\Disable Interrupts When Stepping"? А если попробовать его включить?  :wink:

 

Пробовал, не работает. Помогает, если до и после предполагаемой точки останова вписать соответственно __disable_irq() и __enable_irq(), но это каждый раз надо править код, если хочешь новый брекпоинт...

Попробую поиграть с регистрами.

Share this post


Link to post
Share on other sites
21 час назад, haker_fox сказал:

Ну-ка, ну-ка, подробнее, плиз))) Несколько лет плотно работаю с FreeRTOS. Чем это она мешает отладке, а?

Поведение точно такое же при отладке поведение как ТС и описал.

1 час назад, b-volkov сказал:

Пробовал, не работает. Помогает, если до и после предполагаемой точки останова вписать соответственно __disable_irq() и __enable_irq(), но это каждый раз надо править код, если хочешь новый брекпоинт...

Вы во FreeRTOS отлаживаете?

Share this post


Link to post
Share on other sites
4 минуты назад, x893 сказал:

так остановите таймер перед остановкой и проверьте.

Остановить наверно не получится т.к. он скорее всего во FreeRTOS отлаживает (так и не понятен этот момент). А вот настроить отладку на останов (FREEZE) этой периферии можно попробовать.

Share this post


Link to post
Share on other sites
1 hour ago, AleksBak said:

А вот настроить отладку на останов (FREEZE) этой периферии можно попробовать.

Так это сразу делается. Что бы грабли не стукали по лбу.

Share this post


Link to post
Share on other sites
1 hour ago, AleksBak said:

Остановить наверно не получится т.к. он скорее всего во FreeRTOS отлаживает

Да что вы за эту FreeRTOS так ухватились? Обычная программа. И что значит "во FreeRTOS"? Звучит так, как-будто вы эту систему "ставите".

1 hour ago, AleksBak said:

Поведение точно такое же при отладке поведение как ТС и описал.

Больше похоже на некую таинственную область знаний о ОСРВ. Тут не за неё надо хвататься, а за особенности периферии микроконтроллера. Т.к. я отлаживал различные микроконтроллеры с FreeRTOS, и проблем не было. Сходное поведение будет наблюдаться и с другими ОСРВ, или "одиночной" программой, если они используются с той же самой периферией.

Share this post


Link to post
Share on other sites
5 минут назад, haker_fox сказал:

Да что вы за эту FreeRTOS так ухватились? Обычная программа. И что значит "во FreeRTOS"? Звучит так, как-будто вы эту систему "ставите".

Я не ухватился - просто предположил, что может быть вероятнее всего тут судя по симптомам и исходя из доступности/популярности этого.

В прерывании "Главного Таймера" (или как он там называется) происходит переключение задач и опять "возвращаемся"/зацикливаемся в точке останова.

14 минут назад, haker_fox сказал:

Т.к. я отлаживал различные микроконтроллеры с FreeRTOS

А у Вас такого поведения, как у ТС, не было при этом?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.