Чтение из памяти отображенного регистра - PullRequest
0 голосов
/ 07 декабря 2010

В архитектуре процессора, с которой я работаю, есть счетчик меток времени, который я хочу считывать для измерения производительности.Счетчик метки времени является памятью, сопоставленной с адресом 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);

Большое спасибо за вашу помощь, Фил

1 Ответ

6 голосов
/ 07 декабря 2010

Я не думаю, что вам нужно прибегать к ассемблеру - почему вы не можете просто прочитать с:

uint32_t tbr = (*((uint32_t volatile *) 0x90000008))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...