Алексей ВМ1 1 5 апреля, 2023 Опубликовано 5 апреля, 2023 (изменено) · Жалоба Интересный момент: при первом срабатывании ТО окошко дизассемблера пустое: если нажать ран, то появляется код. Может, косяк куба 20 минут назад, jcxz сказал: Судя по адресам - код выполняется из ОЗУ? Посмотрите какого типа бряки у вас ставит IDE: аппаратные или программные? Да, код выполняется из ОЗУ, у М4 в 157 нет своего флеша. Были программные. Поставил аппаратные. Не помогло. info b Num Type Disp Enb Address What 1 hw breakpoint keep y 0x10000170 in main at ../Core/Src/main.c:125 breakpoint already hit 1 time 2 hw breakpoint keep y 0x10000126 in main at ../Core/Src/main.c:87 info b Num Type Disp Enb Address What 1 hw breakpoint keep y 0x10000170 in main at ../Core/Src/main.c:125 breakpoint already hit 1 time 2 breakpoint keep y 0x10000170 in main at ../Core/Src/main.c:125 breakpoint already hit 1 time 3 breakpoint keep y 0x10000122 in main at ../Core/Src/main.c:81 Изменено 5 апреля, 2023 пользователем Алексей ВМ1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 4 hours ago, Алексей ВМ1 said: Пытаюсь отладить прогу для сопроцессора М4 с помощью stm32CubeIde в режиме Debug, В порядке бреда - а как грузится код для сопроцессора? Может он успевает загрузится и стартовать раньше, чем к нему gdb подключается? Тогда понятно почему только loop прерывается - остальной код успевает исполнится раньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 39 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 22 minutes ago, xvr said: Тогда понятно почему только loop прерывается Это можно проверить, сделав счётчик вне whil(), но инкрементирующийся внутри цикла. Помниться мне, что у СТМ было какое-то руководство по отладке мнопроцессорных МК. Что в нём сказано о процедуре отладки и все ли требования выполнены? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 5 апреля, 2023 Опубликовано 5 апреля, 2023 (изменено) · Жалоба 3 часа назад, xvr сказал: В порядке бреда - а как грузится код для сопроцессора? Может он успевает загрузится и стартовать раньше, чем к нему gdb подключается? Тогда понятно почему только loop прерывается - остальной код успевает исполнится раньше. 2 часа назад, tonyk_av сказал: Это можно проверить, сделав счётчик вне whil(), но инкрементирующийся внутри цикла. Помниться мне, что у СТМ было какое-то руководство по отладке мнопроцессорных МК. Что в нём сказано о процедуре отладки и все ли требования выполнены? Точняк. https://wiki.st.com/stm32mpu/wiki/Getting_started/STM32MP1_boards/STM32MP157x-DK2/Develop_on_Arm®_Cortex®-M4/Modify,_rebuild_and_reload_a_firmware In "production mode", the firmware is not break at main. GDB is simply attached to the running target. You can then use all features of the debugger. GDB подключается к уже запущенному процессу. В каком месте - очевидно, зависит от кода, который выполняется до вечного цикла. Всем спасибо, сам бы не догадался. Поставил задержку в начале main() - нужно не менее 5 сек, после неё можно идти по main. Изменено 5 апреля, 2023 пользователем Алексей ВМ1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 5 апреля, 2023 Опубликовано 5 апреля, 2023 · Жалоба 2 hours ago, Алексей ВМ1 said: Поставил задержку в начале main() - нужно не менее 5 сек, после неё можно идти по main. Можно сделать ловушку из цикла в начале main. volatile int trap = 0; for(;;) { if (trap) break; } Ставите точку останова на if (trap), запускаете. Как gdb остановится сбрасываете trap (p trap=0). Всё, можно отлаживать. Всю эту машинерию можно макросом в gdb оформить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 7 апреля, 2023 Опубликовано 7 апреля, 2023 · Жалоба В 05.04.2023 в 23:01, xvr сказал: Можно сделать ловушку из цикла в начале main. volatile int trap = 0; for(;;) { if (trap) break; } Ставите точку останова на if (trap), запускаете. Как gdb остановится сбрасываете trap (p trap=0). Всё, можно отлаживать. Благодарю, надежнее, чем просто пауза. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться