Вопрос по получению значения указателя

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

Поскольку мелкомягкие категорически запрещают пользоваться указателями - я, как законопослушный программист никогда ими не пользуюсь в своих шарп проектах - нет нужды, а вот с ардуино, совсем другое дело. Понадобилось мне у тиньки-85 4 шим канала, пришлось это дело немного изучить, но вот какой вопрос:

// Для экспериментов мучаем регистр сравнения (старшую половину) OCR1BH
// Объявляем указатель
byte *ptrToReg;

// Собственно значение этого регистра счетчика МК
byte reg_value;

// Адрес выходного регистра счетчика МК, т.е. адрес такогово в регистровой области памяти
// Поскольку регистровая память занимает не более 0xFF, для хранения адреса в этом диапазоне, нам хватит одного байта
byte reg_address;

void setup()
{
  Serial.begin(9600);

  // Указателю ptrToReg присваиваем адрес выходного регистра сравнения OCR1BH
  ptrToReg = &OCR1BH;

  // Начальное значение регистра присваиваем переменной reg_value, по идее, он после сброса равно 0
  reg_value = *ptrToReg;  
  
    // Выводим начальное значение регистра OCR1BH
     Serial.print("start value OCR1BH = ");
     Serial.println(reg_value, HEX);

     // Используя указатель присваиваем регистру OCR1BH новое значение и выводим это значение
     // Для этого обращаемся к значению OCR1BH через указатель, используя оператор разыменования
     *ptrToReg = 12;
     reg_value = *ptrToReg; 

     // Выводим новое значение регистра OCR1BH
     Serial.print("new value OCR1BH = ");
     Serial.println(reg_value, HEX);

     // Выводим адрес, который хранит указатель ptrToReg
     Serial.print("address of OCR1BH = ");
     //Serial.println(ptrToReg, HEX);
     reg_address = ptrToReg;
     Serial.println(reg_address, HEX);     
}

void loop() 
{   
 
}

Почему, если раскомментировать строку №37 чтобы посмотреть значение указателя (т.е. адрес регистра), получаем ошибку о неоднозначности метода println, хотя строки 38 и 39 выдают правильный адрес?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

У стрима, беда с методом print для указателей.

Преобразуйте указатель к int или unsigned и будет нормально печататься.

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

ЕвгенийП пишет:

У стрима, беда с методом print для указателей.

Преобразуйте указатель к int или unsigned и будет нормально печататься.

Ясно, спасибо ...