私はCortexM3に取り組んでおり、IAREWARMを使用しています。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
は「失われます」。
ありがとう