jenya7 0 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба Работаю с 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); никогда не выполняется. Вопрос такой - можно узнать кто вызвал эту функцию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба смотреть Call Stack а что это, читать ДШ на среду разработки пример Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба смотреть Call Stack Даже проще: руками поставить PC после while(). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба смотреть Call Stack а что это, читать ДШ на среду разработки пример не нашел в Attolic Call Stack. Даже проще: руками поставить PC после while(). это как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба это как? Что-нибудь вроде: "правая кнопка"->Set PC to cursor Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба Что-нибудь вроде: "правая кнопка"->Set PC to cursor не нашел, там есть Open Call Hierarchy но не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба Вопрос такой - можно узнать кто вызвал эту функцию? Так как в Delay_us() нет вызовов других функций, то скорей всего stack не нужен, достаточно посмотреть LR. Но точно можно сказать только по дизасму. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба Так как в Delay_us() нет вызовов других функций, то скорей всего stack не нужен, достаточно посмотреть LR. Но точно можно сказать только по дизасму. а что такое LR? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба а что такое LR? Link Register (R14), в него заносится адрес возврата при выполнении вызова командой BL (Branch and Link). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба не нашел в 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба ну это не удивительно 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 есть иерархия. видно кто кого позвал. спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба Что странно остаюсь в этой функции. Условие while (DWT->CYCCNT < ticks); никогда не выполняется. не хватает CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
johnshadow 1 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба не хватает CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; +1 Также иногда ST-Link2 что-то конкретно портит в lpc17xx, что DWT таймер не запускается вообще. Не помогает ни soft-reset, ни hardware-reset. Только отключение питания с проца. J-Link и CoLink в подобном не замечены. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 29 сентября, 2015 Опубликовано 29 сентября, 2015 · Жалоба +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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 30 сентября, 2015 Опубликовано 30 сентября, 2015 · Жалоба не хватает CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; у меня эта строчка вызывается один раз при конфигурации периферии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться