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

 
 
 
Reply to this topicStart new topic
> Кто вызвал функцию.
Jenya7
сообщение Sep 29 2015, 10:36
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Работаю с Cortex-M3. Запускаю программу в отладчике (J-Link+AttolicTrueStudio).
Программа улетает куда то. Ставлю паузу, нахожу себя в функции задержки.
Код
void Delay_us(uint32_t us)
{
    uint32_t ticks = 20 * us;
    DWT->CYCCNT = 0;
    DWT->CTRL = 1;
    while (DWT->CYCCNT < ticks);
    DWT->CTRL = 0;
}

Что странно остаюсь в этой функции. Условие while (DWT->CYCCNT < ticks); никогда не выполняется.
Вопрос такой - можно узнать кто вызвал эту функцию?
Go to the top of the page
 
+Quote Post
megajohn
сообщение Sep 29 2015, 10:45
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



смотреть Call Stack
а что это, читать ДШ на среду разработки

пример


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 29 2015, 10:58
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(megajohn @ Sep 29 2015, 13:45) *
смотреть Call Stack

Даже проще: руками поставить PC после while().
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 29 2015, 11:06
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(megajohn @ Sep 29 2015, 15:45) *
смотреть Call Stack
а что это, читать ДШ на среду разработки

пример

не нашел в Attolic Call Stack.

Цитата(aaarrr @ Sep 29 2015, 15:58) *
Даже проще: руками поставить PC после while().

это как?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 29 2015, 11:14
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Sep 29 2015, 14:06) *
это как?

Что-нибудь вроде: "правая кнопка"->Set PC to cursor
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 29 2015, 11:21
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(aaarrr @ Sep 29 2015, 16:14) *
Что-нибудь вроде: "правая кнопка"->Set PC to cursor


не нашел, там есть Open Call Hierarchy но не работает.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 29 2015, 11:23
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Jenya7 @ Sep 29 2015, 16:36) *
Вопрос такой - можно узнать кто вызвал эту функцию?

Так как в Delay_us() нет вызовов других функций, то скорей всего stack не нужен, достаточно посмотреть LR. Но точно можно сказать только по дизасму.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 29 2015, 11:29
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(jcxz @ Sep 29 2015, 16:23) *
Так как в Delay_us() нет вызовов других функций, то скорей всего stack не нужен, достаточно посмотреть LR. Но точно можно сказать только по дизасму.

а что такое LR?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 29 2015, 11:33
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Sep 29 2015, 14:29) *
а что такое LR?

Link Register (R14), в него заносится адрес возврата при выполнении вызова командой BL (Branch and Link).
Go to the top of the page
 
+Quote Post
megajohn
сообщение Sep 29 2015, 11:37
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Jenya7 @ Sep 29 2015, 14:06) *
не нашел в Attolic Call Stack.


ну это не удивительно

http://www.atollic.com/index.php/truestudio/debugging
третья картинка

или тут
http://m.eet.com/media/1169580/atollic%20d...ower%20qual.jpg
окно "Debug" слева-вверху. Функция pvCopyData вызвала memcpy


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 29 2015, 11:53
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(megajohn @ Sep 29 2015, 16:37) *
ну это не удивительно

http://www.atollic.com/index.php/truestudio/debugging
третья картинка

или тут
http://m.eet.com/media/1169580/atollic%20d...ower%20qual.jpg
окно "Debug" слева-вверху. Функция pvCopyData вызвала memcpy


эээ...что то я туплю.
но я нашел регистры
LR = 12087
PC = 0xfae <Delay_us+14>


ааа...понял. там в thread есть иерархия. видно кто кого позвал. спасибо.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Sep 29 2015, 13:35
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Jenya7 @ Sep 29 2015, 13:36) *
Что странно остаюсь в этой функции. Условие while (DWT->CYCCNT < ticks); никогда не выполняется.


не хватает
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;



--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
johnshadow
сообщение Sep 29 2015, 14:07
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 25-09-08
Пользователь №: 40 477



Цитата(megajohn @ Sep 29 2015, 16:35) *
не хватает
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;


+1

Также иногда ST-Link2 что-то конкретно портит в lpc17xx, что DWT таймер не запускается вообще.
Не помогает ни soft-reset, ни hardware-reset. Только отключение питания с проца. J-Link и CoLink в подобном не замечены.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Sep 29 2015, 14:15
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(johnshadow @ Sep 29 2015, 17:07) *
+1

Также иногда ST-Link2 что-то конкретно портит в lpc17xx, что DWT таймер не запускается вообще.
Не помогает ни soft-reset, ни hardware-reset. Только отключение питания с проца. J-Link и CoLink в подобном не замечены.


The DWT is an optional debug unit that provides watchpoints, data tracing, and system profiling for the processor.

A full DWT contains four comparators that you can configure as
a hardware watchpoint
an ETM trigger
a PC sampler event trigger
a data address sampler event trigger.

The DWT provides periodic requests for protocol synchronization to the ITM and the TPIU, if the your implementation includes the Cortex-M3 TPIU.


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 30 2015, 07:01
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(megajohn @ Sep 29 2015, 19:35) *
не хватает
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;

у меня эта строчка вызывается один раз при конфигурации периферии.
Go to the top of the page
 
+Quote Post

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

 


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


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