реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Отладка в Keil
muravei
сообщение Sep 17 2013, 09:44
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Можно ли сделать так, чтобы:
1. При останове , останавливались таймеры.
2. Останавливать по значению в переменной.
3. Останавливать после некоторого кол-ва тактов.

STM32F100

Спасибо
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 17 2013, 10:58
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

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

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


Go to the top of the page
 
+Quote Post
muravei
сообщение Sep 17 2013, 14:24
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



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

Спасибо, прлучилось.
Впрочем, я эти "кнопки" и нажимал, но видно, не достаточно уверенно.
Вы мне добавили уверенности. sm.gif
Go to the top of the page
 
+Quote Post
igorle
сообщение Sep 28 2013, 05:29
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Кейл. STM32F1.

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

- Если для автоматической переменной в функции используется регистр, то в "call stack + locals" я эту переменную не вижу. Могу ли я узнать - какой регистр соответствует этой переменной, без того, чтобы дизассемблировать код?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 28 2013, 06:52
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
igorle
сообщение Sep 28 2013, 07:06
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Сергей Борщ @ Sep 28 2013, 09:52) *
Нет, нельзя. Потому что по мере выполнения функции эта переменная может "блуждать" из регистра в регистр.

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

А как насчет первого вопроса? Как посмотреть - где я был, когда пришел интеррапт?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 28 2013, 08:47
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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) лежит указатель на стековый кадр и по этому указателю найти на стеке адрес возврата. Возможно, ваш отладчик умеет это делать сам. Кейлом не пользуюсь.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
igorle
сообщение Sep 28 2013, 15:47
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Спасибо. Но поскольку топик называется "Отладка в Кейл" - спрошу еще совета бывалых.
Я написал некий код, который имплементирует USB. Железо не поддерживает сигнала подключения USB (не дергает программно резистор на DP). Возможно, поэтому у меня под отладчиком USB код не работает корректно. Винда не видит, когда я забегаю отлаживаемое устройство заново. Есть какие-то специальные приемы у Кейла, для отладки USB?

Я, бродя по старым темам форума, натыкался на упоминания методов отладки. Но тогда не понял, а сейчас не нашел sad.gif
Go to the top of the page
 
+Quote Post
SII
сообщение Sep 29 2013, 05:45
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Цитата(Сергей Борщ @ 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) лежит указатель на стековый кадр и по этому указателю найти на стеке адрес возврата. Возможно, ваш отладчик умеет это делать сам. Кейлом не пользуюсь.


Ещё можно посмотреть здесь, особенно если с английским плоховато.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 07:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.0141 секунд с 7
ELECTRONIX ©2004-2016