Вопрос по получению значения указателя
- Войдите на сайт для отправки комментариев
Пнд, 08/01/2018 - 19:56
Поскольку мелкомягкие категорически запрещают пользоваться указателями - я, как законопослушный программист никогда ими не пользуюсь в своих шарп проектах - нет нужды, а вот с ардуино, совсем другое дело. Понадобилось мне у тиньки-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 выдают правильный адрес?
У стрима, беда с методом print для указателей.
Преобразуйте указатель к int или unsigned и будет нормально печататься.
У стрима, беда с методом print для указателей.
Преобразуйте указатель к int или unsigned и будет нормально печататься.
Ясно, спасибо ...