Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отладка KEIL 4.6 (STM32)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Falkon_99
Недавно начал программировать в среде Keil uVision, очень удобная,все нравится. В режиме отладки внизу пишется время хода программы. Но это время далеко отличается от реального.
Стало интересно, а можно ли смотреть количество тактов процессора, как например в AVR Studio? Думаю эта информация будет более правдивая =)

ps использую плату STM32-VLDiscovery
_Артём_
Цитата(Falkon_99 @ Nov 13 2012, 21:23) *
Стало интересно, а можно ли смотреть количество тактов процессора, как например в AVR Studio? Думаю эта информация будет более правдивая =)

Если у вас Cortex-m3, то добавьте такой код в свою программу
Код
#define    DWT_CYCCNT    *(volatile uint32_t *)0xE0001004
#define    DWT_CONTROL   *(volatile uint32_t *)0xE0001000
#define    SCB_DEMCR     *(volatile uint32_t *)0xE000EDFC


static inline void DWT_Init()
{
   SCB_DEMCR  |= 0x01000000;
   DWT_CYCCNT  = 0;
   DWT_CONTROL|= 1; // enable the counter
}

int main ()
{
     DWT_Init();
}


Значение счётчика можно посмотреть в окне Expression (должно быть такое)
Код
*(uint32_t *)0xE0001004


В случае, если вариант с Expression почему-либо не подходит значение счётчика можно читать-задавать в нужных мастах программы:

Код
uint32_t FuncWorkTime;

DWT_CYCCNT=0;

Func1();

FuncWorkTime=DWT_CYCCNT;
011119xx
Как впечатление от Keil 4.6, стОит ли устанавливать вместо 4.23, или тоже есть проблемы, как с 4.5?
Falkon_99
Цитата(_Артём_ @ Nov 13 2012, 21:41) *
Если у вас Cortex-m3, то добавьте такой код в свою программу
Код
#define    DWT_CYCCNT    *(volatile uint32_t *)0xE0001004
#define    DWT_CONTROL   *(volatile uint32_t *)0xE0001000
#define    SCB_DEMCR     *(volatile uint32_t *)0xE000EDFC

}


Спасибо за ответ, да действительно работаю с Cortex-M3. только не понятно что это за макросы, и куда указывают((
Я так понимаю, что мой Cortex-M3 сам считает пройденные такты???

С предыдущими версиями KEIL не работал. До этого юзал IAR с AVR контроллерами. Keil 4.6 показал себя только с хорошей стороны, недавно разобрался как писать коменты на русском языке, ато без них было не удобно))
Собрал в нём уже несколько проэктов на STM32, постоянно пользуюсь отладкой через SWD интерфейс, пока все замечательно. А какие проблемы были в 4.5?
scifi
Цитата(Falkon_99 @ Nov 14 2012, 11:40) *
Спасибо за ответ, да действительно работаю с Cortex-M3. только не понятно что это за макросы, и куда указывают((

Вот тут написано.
На самом деле при конфигурировании ядра разработчики МК могут убрать эти регистры. Но в STM32 они точно есть.
Falkon_99
Интересная информация) вечером попробую!!! Всё таки тяжело производить отладку вслепую без информации о пройденый тактах.
ViKo
Цитата(Falkon_99 @ Nov 14 2012, 11:03) *
Интересная информация) вечером попробую!!! Всё таки тяжело производить отладку вслепую без информации о пройденый тактах.

Такты показаны в том же окне, где и регистры.
011119xx
Цитата(Falkon_99 @ Nov 14 2012, 12:40) *
А какие проблемы были в 4.5?

Проблемы с русским языком.
Falkon_99
Да! в версии 4.6 остались проблемы с языком. Проблему решили здесь здесь.
После копирования файла UvEdit.dll все заработало.

Цитата(ViKo @ Nov 14 2012, 10:44) *
Такты показаны в том же окне, где и регистры.


))))) Да реально, спасибо что ткнули носом!!! называется States

Цитата(_Артём_ @ Nov 13 2012, 21:41) *
Если у вас Cortex-m3, то добавьте такой код в свою программу
Код
#define    DWT_CYCCNT    *(volatile uint32_t *)0xE0001004
#define    DWT_CONTROL   *(volatile uint32_t *)0xE0001000
#define    SCB_DEMCR     *(volatile uint32_t *)0xE000EDFC


static inline void DWT_Init()
{
   SCB_DEMCR  |= 0x01000000;
   DWT_CYCCNT  = 0;
   DWT_CONTROL|= 1; // enable the counter
}

int main ()
{
     DWT_Init();
}


Тоже работает. Спасибо! Очень полезная функция, можно задержки организовывать с этим счетчиком))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.