2010-12-07 4 views
0

私が使用しているプロセッサアーキテクチャには、パフォーマンス測定を行うために読みたいタイムタグカウンタがあります。時間タグカウンタは、 アドレス0x90000008にマップされたメモリです。私は時刻 からの値を読むために次のルーチンを使いましたが、プリントアウトの差は常にゼロです。誰でもアイデア 私は行方不明ですか?メモリマップドレジスタからの読み出し

char* const ADDR = (char *) 0x90000008; 

unsigned long cycle_count_val() { 

    unsigned long res; 

    asm volatile (

    "set ADDR, %%l0   \n\t" 
    "ld [%%l0], %0   \n\t" 

    : "=r" (res) 
    : 
    : "%l0" 
); 

    return res; 
} 

.... 
unsigned long start = cycle_count_val(); 
execute_benchmark(); 
unsigned long end = cycle_count_val(); 

printf("Benchmark performance(in clock cycles) = %ld \r\n", end-start); 

あなたの助け、 フィル

+0

はそのよろしいですあなたのタイムスタンプは 'char'ですか? – ruslik

+0

いいえ、それは32ビットのメモリ位置(MSBは0)の30ビットの値です。 –

答えて

6

のための多くのおかげで、私はあなたがassemberに頼る必要はないと思う - なぜあなただ​​けから読み取ることができません。

uint32_t tbr = (*((uint32_t volatile *) 0x90000008)) 
+0

'#define'の式全体が' now'とだけ定義されています。 – ruslik

関連する問題