我正在研究 Cortex M3 并使用 IAR EWARM。我使用DWT_DYCCNT
时间计算。问题是当我优化代码以提高速度时(使用编译器选项),我DWT_DYCCNT
在调试时失去了价值。代码使用 C 和 C++ 编写。我还尝试使用打印变量的值,printf
但这也会返回错误。
我尝试制作变量volatile
,但这也无济于事。
在调试时,我总是得到unknown value
这个变量。
我想知道如何计算已针对速度进行了优化的代码中的代码时序,并且不会丢失变量的值。如何强制编译器保留这些变量的值?
编辑:
volatile int count = 0;
volatile unsigned int *DWT_CYCCNT = (unsigned int *)0xE0001004; //address of the register
volatile unsigned int *DWT_CONTROL = (unsigned int *)0xE0001000; //address of the register
volatile unsigned int *SCB_DEMCR = (unsigned int *)0xE000EDFC; //address of the register
*SCB_DEMCR = *SCB_DEMCR | 0x01000000;
*DWT_CYCCNT = 0; // reset the counter
*DWT_CONTROL = *DWT_CONTROL | 1 ; // enable the counter
_DO_SOMETHING_HERE_
count = *DWT_CYCCNT;
printf("\n COUNT!!!! = %d",*DWT_CYCCNT);
调试代码时, 的值count
“丢失”。
谢谢