b-volkov 0 Posted September 22, 2020 · Report post IAR 8.4 + STLink+STM32F7xx. Если остановить программу на брекпоинте, то она потом не может с него уйти, выполняешь "Go" или "Step" - остается в той же точке. Приходится снимать брекпоинт,делать шаг и потом брекпоинт восстанавливать . Если отлаживаешь циклический процесс с несколькими брекпоинтами, да еще в разных модулях, то полная вешалка. В чем может быть дело? Quote Ответить с цитированием Share this post Link to post Share on other sites
jcxz 0 Posted September 22, 2020 · Report post 9 минут назад, b-volkov сказал: IAR 8.4 + STLink+STM32F7xx. Если остановить программу на брекпоинте, то она потом не может с него уйти, выполняешь "Go" или "Step" - остается в той же точке. Приходится снимать брекпоинт,делать шаг и потом брекпоинт восстанавливать . "Делать шаг" где? В окне ассемблера? И какой бряк имеется в виду: программный? аппаратный? И где установлен: во флешь? в ОЗУ? Quote Ответить с цитированием Share this post Link to post Share on other sites
Baser 0 Posted September 22, 2020 · Report post 2 часа назад, b-volkov сказал: IAR 8.4 + STLink+STM32F7xx. Если остановить программу на брекпоинте, то она потом не может с него уйти ... В чем может быть дело? Это известная проблема, причем проблема ядра АРМа. Вечером попробую поискать ссылки, может найду. На сайте АРМа есть документ, который подтверждает ошибку в модуле отладки, в конференции STM были топики, где служба поддержки это признавала. У Сеггера есть какой-то обходной путь, при помощи которого они это обходят. Говорят, есть прошивка Сеггера для STLink, которую можно бесплатно скачать и прошить. И якобы можно в случае чего откатится назад. Но я не пробовал. Quote Ответить с цитированием Share this post Link to post Share on other sites
AleksBak 0 Posted September 22, 2020 · Report post 5 минут назад, Baser сказал: Это известная проблема, причем проблема ядра АРМа. Скорее всего ТС во FreeRTOS отлаживает поэтому и такое поведение. Quote Ответить с цитированием Share this post Link to post Share on other sites
haker_fox 0 Posted September 22, 2020 · Report post 1 hour ago, AleksBak said: Скорее всего ТС во FreeRTOS отлаживает поэтому и такое поведение. Ну-ка, ну-ка, подробнее, плиз))) Несколько лет плотно работаю с FreeRTOS. Чем это она мешает отладке, а? Quote Ответить с цитированием Share this post Link to post Share on other sites
b-volkov 0 Posted September 22, 2020 · Report post Причина вроде бы понятна: эффект наблюдается только если во время остановки приходили какаи-либо прерывания (в моем случае работали таймера). Похоже, что после возврата из обработчика прерываний программа снова попадает на брекпоинт и останавливается. Вот только как с этим бороться - все равно не понятно. Quote Ответить с цитированием Share this post Link to post Share on other sites
Baser 0 Posted September 22, 2020 · Report post Проблема в Cortex-M7 devices with core revisions r0p0 or r0p1 Вот ссылки:Problem with Single Step STMF7ARM: 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 Quote Ответить с цитированием Share this post Link to post Share on other sites
jcxz 0 Posted September 23, 2020 · Report post 19 часов назад, b-volkov сказал: Причина вроде бы понятна: эффект наблюдается только если во время остановки приходили какаи-либо прерывания (в моем случае работали таймера). Похоже, что после возврата из обработчика прерываний программа снова попадает на брекпоинт и останавливается. Вот только как с этим бороться - все равно не понятно. А что - в вашем IAR-е нет меню с пунктом "STLink\Disable Interrupts When Stepping"? А если попробовать его включить? Кроме того: В 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 STMF7ARM: single stepping Cortex-M7 enters pending exception handler Так как ТС так и не ответил на вопрос: "В каком именно окне отладчика он делает шаг", то не факт, что это та самая проблема. Вангую, что скорее всего он его делает в окне исходника, а это уже быстрее всего не "single stepping". Я именно поэтому задавал свой первый вопрос. Quote Ответить с цитированием Share this post Link to post Share on other sites
b-volkov 0 Posted September 23, 2020 · Report post 50 minutes ago, jcxz said: А что - в вашем IAR-е нет меню с пунктом "STLink\Disable Interrupts When Stepping"? А если попробовать его включить? Пробовал, не работает. Помогает, если до и после предполагаемой точки останова вписать соответственно __disable_irq() и __enable_irq(), но это каждый раз надо править код, если хочешь новый брекпоинт... Попробую поиграть с регистрами. Quote Ответить с цитированием Share this post Link to post Share on other sites
AleksBak 0 Posted September 23, 2020 · Report post 21 час назад, haker_fox сказал: Ну-ка, ну-ка, подробнее, плиз))) Несколько лет плотно работаю с FreeRTOS. Чем это она мешает отладке, а? Поведение точно такое же при отладке поведение как ТС и описал. 1 час назад, b-volkov сказал: Пробовал, не работает. Помогает, если до и после предполагаемой точки останова вписать соответственно __disable_irq() и __enable_irq(), но это каждый раз надо править код, если хочешь новый брекпоинт... Вы во FreeRTOS отлаживаете? Quote Ответить с цитированием Share this post Link to post Share on other sites
x893 0 Posted September 23, 2020 · Report post так остановите таймер перед остановкой и проверьте. Что тут сложного ? Quote Ответить с цитированием Share this post Link to post Share on other sites
AleksBak 0 Posted September 23, 2020 · Report post 4 минуты назад, x893 сказал: так остановите таймер перед остановкой и проверьте. Остановить наверно не получится т.к. он скорее всего во FreeRTOS отлаживает (так и не понятен этот момент). А вот настроить отладку на останов (FREEZE) этой периферии можно попробовать. Quote Ответить с цитированием Share this post Link to post Share on other sites
x893 0 Posted September 23, 2020 · Report post 1 hour ago, AleksBak said: А вот настроить отладку на останов (FREEZE) этой периферии можно попробовать. Так это сразу делается. Что бы грабли не стукали по лбу. Quote Ответить с цитированием Share this post Link to post Share on other sites
haker_fox 0 Posted September 23, 2020 · Report post 1 hour ago, AleksBak said: Остановить наверно не получится т.к. он скорее всего во FreeRTOS отлаживает Да что вы за эту FreeRTOS так ухватились? Обычная программа. И что значит "во FreeRTOS"? Звучит так, как-будто вы эту систему "ставите". 1 hour ago, AleksBak said: Поведение точно такое же при отладке поведение как ТС и описал. Больше похоже на некую таинственную область знаний о ОСРВ. Тут не за неё надо хвататься, а за особенности периферии микроконтроллера. Т.к. я отлаживал различные микроконтроллеры с FreeRTOS, и проблем не было. Сходное поведение будет наблюдаться и с другими ОСРВ, или "одиночной" программой, если они используются с той же самой периферией. Quote Ответить с цитированием Share this post Link to post Share on other sites
AleksBak 0 Posted September 23, 2020 · Report post 5 минут назад, haker_fox сказал: Да что вы за эту FreeRTOS так ухватились? Обычная программа. И что значит "во FreeRTOS"? Звучит так, как-будто вы эту систему "ставите". Я не ухватился - просто предположил, что может быть вероятнее всего тут судя по симптомам и исходя из доступности/популярности этого. В прерывании "Главного Таймера" (или как он там называется) происходит переключение задач и опять "возвращаемся"/зацикливаемся в точке останова. 14 минут назад, haker_fox сказал: Т.к. я отлаживал различные микроконтроллеры с FreeRTOS А у Вас такого поведения, как у ТС, не было при этом? Quote Ответить с цитированием Share this post Link to post Share on other sites