Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отладка в Keil
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
muravei
Можно ли сделать так, чтобы:
1. При останове , останавливались таймеры.
2. Останавливать по значению в переменной.
3. Останавливать после некоторого кол-ва тактов.

STM32F100

Спасибо
toweroff
Цитата(muravei @ Sep 17 2013, 13:44) *
2. Останавливать по значению в переменной.

можно, но переменная должна быть глобальной

http://www.keil.com/support/man/docs/uv4/u...g_breakpnts.htm


muravei
Цитата(toweroff @ Sep 17 2013, 14:58) *
можно,

Спасибо, прлучилось.
Впрочем, я эти "кнопки" и нажимал, но видно, не достаточно уверенно.
Вы мне добавили уверенности. sm.gif
igorle
Кейл. STM32F1.

- Если я нахожусь в обработчике прерывания - могу ли я узнать, где мы находились в момент прерывания (куда вернемся из прерывания)

- Если для автоматической переменной в функции используется регистр, то в "call stack + locals" я эту переменную не вижу. Могу ли я узнать - какой регистр соответствует этой переменной, без того, чтобы дизассемблировать код?
Сергей Борщ
QUOTE (igorle @ Sep 28 2013, 07:29) *
- Если для автоматической переменной в функции используется регистр, то в "call stack + locals" я эту переменную не вижу. Могу ли я узнать - какой регистр соответствует этой переменной, без того, чтобы дизассемблировать код?
Нет, нельзя. Потому что по мере выполнения функции эта переменная может "блуждать" из регистра в регистр.
igorle
Цитата(Сергей Борщ @ Sep 28 2013, 09:52) *
Нет, нельзя. Потому что по мере выполнения функции эта переменная может "блуждать" из регистра в регистр.

Хм. Логично. Во время выполнения регистр будет использоваться для разных нужд. Так что лучше "не искушать". Читать ассемблер даже полезно.

А как насчет первого вопроса? Как посмотреть - где я был, когда пришел интеррапт?
Сергей Борщ
QUOTE (igorle @ Sep 28 2013, 09:06) *
А как насчет первого вопроса?
Открываем документ PM0056 "STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual", читаем раздел "2.3.7 Exception entry and return", узнаем, что в момент возникновения исключения на текущий стек (MSP или PSP) складывается содержимое регистров R0-R3, R12, адрес возврата, содержимое PSR и LR. После этого в LR заносится одна из констант, описанных в таблице 17.
Значит, надо по содержимому LR и таблице 17 определить, в каком из регистров (MSPили PSP) лежит указатель на стековый кадр и по этому указателю найти на стеке адрес возврата. Возможно, ваш отладчик умеет это делать сам. Кейлом не пользуюсь.
igorle
Спасибо. Но поскольку топик называется "Отладка в Кейл" - спрошу еще совета бывалых.
Я написал некий код, который имплементирует USB. Железо не поддерживает сигнала подключения USB (не дергает программно резистор на DP). Возможно, поэтому у меня под отладчиком USB код не работает корректно. Винда не видит, когда я забегаю отлаживаемое устройство заново. Есть какие-то специальные приемы у Кейла, для отладки USB?

Я, бродя по старым темам форума, натыкался на упоминания методов отладки. Но тогда не понял, а сейчас не нашел sad.gif
SII
Цитата(Сергей Борщ @ Sep 28 2013, 12:47) *
Открываем документ PM0056 "STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual", читаем раздел "2.3.7 Exception entry and return", узнаем, что в момент возникновения исключения на текущий стек (MSP или PSP) складывается содержимое регистров R0-R3, R12, адрес возврата, содержимое PSR и LR. После этого в LR заносится одна из констант, описанных в таблице 17.
Значит, надо по содержимому LR и таблице 17 определить, в каком из регистров (MSPили PSP) лежит указатель на стековый кадр и по этому указателю найти на стеке адрес возврата. Возможно, ваш отладчик умеет это делать сам. Кейлом не пользуюсь.


Ещё можно посмотреть здесь, особенно если с английским плоховато.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.