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