Выполняются лишние такты
Добавлено: Вт дек 08, 2015 17:54:03
Здравствуйте. Начал изучать контроллеры STM32 на отладочной плате STM32F407DISCOVERY в программе keil uVision 4. Настроил PLL(На частоту тактирования контроллера 168 МГц).Как показано на рисунке ниже
Написал вот такой код для проверки количества тактов выполнения цикла
int main(void)
{
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock/1000);
#define DWT_CYCCNT *(volatile unsigned long *)0xE0001004
#define DWT_CONTROL *(volatile unsigned long *)0xE0001000
#define SCB_DEMCR *(volatile unsigned long *)0xE000EDFC
while(1)
{
SCB_DEMCR |= 0x01000000;
DWT_CONTROL|= 1;
DWT_CYCCNT = 0;
for(i=0;i<=100;i++){}
count_tic = DWT_CYCCNT;
}
}
В результате получаю 1630 тактов на вычисление простого цикла, что очень много, SystemCoreClock выдает правильную частоту.Ниже на рисунке приведена проблема. Как уменьшить число тактов вычисления цикла, может кто знает, или я что-то не так понял?
Написал вот такой код для проверки количества тактов выполнения цикла
int main(void)
{
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock/1000);
#define DWT_CYCCNT *(volatile unsigned long *)0xE0001004
#define DWT_CONTROL *(volatile unsigned long *)0xE0001000
#define SCB_DEMCR *(volatile unsigned long *)0xE000EDFC
while(1)
{
SCB_DEMCR |= 0x01000000;
DWT_CONTROL|= 1;
DWT_CYCCNT = 0;
for(i=0;i<=100;i++){}
count_tic = DWT_CYCCNT;
}
}
В результате получаю 1630 тактов на вычисление простого цикла, что очень много, SystemCoreClock выдает правильную частоту.Ниже на рисунке приведена проблема. Как уменьшить число тактов вычисления цикла, может кто знает, или я что-то не так понял?