ARM プロセッサでアプリケーションのプロファイリングを行いたいと考えています。oprofile が機能しないことがわかりました。数年前、誰かが次のコードを使用してテストしました。巡回カウンターは機能しますが、パフォーマンス モニター カウンターはまだ機能しません。もう一度テストしましたが、同じです。次のコードでは、サイクル カウント: 2109、パフォーマンス モニター カウント: 0 を取得しました。Google で検索しましたが、これまでのところ、解決策が見つかりませんでした。誰かがこの問題を修正しましたか?
uint32_t value = 0
uint32_t count = 0;
struct timeval tv;
struct timezone tz;
// enable all counters
__asm__ __volatile__ ("mcr p15, 0, %0, c9, c12, 1" ::"r" (0x8000000f));
// select counter 0,
__asm__ __volatile__("mcr p15, 0, %0, c9, c12, 5" ::"r" (0x0));
// select event
__asm__ __volatile__ ("mcr p15, 0, %0, c9, c13, 1" ::"r"(0x57));
// reset all counters to ero and enable all counters
__asm__ __volatile__ ("mrc p15, 0, %0, c9, c12, 0" : "=r" (value));
value |= 0xF;
__asm__ __volatile__ ("mcr p15, 0, %0, c9, c12, 0" :: "r" (value));
gettimeofday(&tv, &tz);
__asm__ __volatile__("mrc p15, 0, %0, c9, c13, 0" : "=r" (count));
printf("cycle count: %d", count);
__asm__ __volatile__ ("mrc P15, 0, %0, c9, c13, 2": "=r" (count));
printf("performance monitor count: %d", count);