Как получить значение из регистра на процессоре - PullRequest
0 голосов
/ 27 июня 2019

Я хочу получить значение регистра в ЦП, я посмотрел на листе спецификаций и нашел адрес (0xE000E018), и я хочу назвать переменную, я сохраняю значение в "subticks_per_tick"

Это на TWR-K65F180M под управлением FreeRTOS.

register uint64_t 0xE000E018 asm ("subticks_per_tick");
register uint64_t subticks_per_tick asm ("0xE000E018");

первая строка получает: ошибка: ожидаемый идентификатор или '(' перед числовой константой

вторая строка получает: неверное имя регистра для 'subticks_per_tick'

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Я ничего не знаю о FreeRTOS или вашем оборудовании, но:

  1. Это похоже на адрес, а не имя регистра (вероятно, регистр там отображается)
  2. Имя переменной не может начинаться с цифры, поэтому 0xE000E014 не может быть именем, следовательно, ошибка

Что вы, вероятно, должны сделать, чтобы получить значения этого регистра:

volatile uint32_t *subticks_per_tick = (volatile uint32_t *) 0xE000E014;

, а затем считайте значение, разыменовав этот указатель.

0 голосов
/ 28 июня 2019

register - это ключевое слово C 1980-х годов, используемое для указания компилятору, что целочисленная переменная, которую вы объявляете, была бы полезна для помещения в регистр.Это никогда не было чем-то вроде подсказки и считается устаревшим (и не имеющим никакого смысла) с 30+ лет.

Если вы хотите контролировать регистры на вашем процессоре, вам нужно вставить код на ассемблере.

...