Помогите вывести значение регистра в монитор порта.

Discover0708
Offline
Зарегистрирован: 20.09.2020

Добрый день!

Появилась идея, выводить значение регистров в  монитор порта. Т.е в консоли отправляем наименование регистра по мануалу, а в ответ получаем  его имя и значение.
не могу понять, как выразить значение String, чтобы оно работало в выражении Serial.print(String, BIN),например.
 



String inString = "";    // string to hold input

void setup() {
  
  Serial.begin(9600);
  while (!Serial) {}; 
 
 Serial.println(DDRB,BIN); // вывод в порт регистра до
  delay(5000);
  DDRB|=(1<<DDB0);
   Serial.print(DDRB,BIN); //вывод в порт после
   }

void loop() {
  
  while (Serial.available() > 0) {
    int inChar = Serial.read();
    if (isprint(inChar)) {
      inString += (char)inChar; //наполняем строку символами
      
    }
    
    if (inChar == '\n') {     //если символ новой строки выводим в порт строку
      
      Serial.print(inString );Serial.print("=");
      Serial.println((int)inString, BIN); // Вот здесь я не понимаю.Если я передал имя регистра, как строки, 
     inString = "";                        //как привести его uint16_t или к long, чтобы получить значение этого регистра
    }
  }
}

 

b707
Онлайн
Зарегистрирован: 26.05.2017

если я вас правильно понял, вы пытаетесь превратить строку символов в имя переменной, в вашем случае регистра. Ничего не выйдет.

Имена регистров и переменных существуют только в исходнике, при компиляции они заменяются машинными адресами и контроллер ничего не знает о строке "DDRB"

 

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

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

если я вас правильно понял, вы пытаетесь превратить строку символов в имя переменной, в вашем случае регистра. Ничего не выйдет.

Имена регистров и переменных существуют только в исходнике, при компиляции они заменяются машинными адресами и контроллер ничего не знает о строке "DDRB"

 

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


Мысль уловил. Спасибо, b707!
А если, например, отправлять адрес регистра, вместо имени? Как Вы думаете? Получиться?

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

А если, например, отправлять адрес регистра, вместо имени? Как Вы думаете? Получиться?

этого не знаю.

Discover0708
Offline
Зарегистрирован: 20.09.2020

А если об.явить переменную, в которую заносить адрес регистра. потом на ассемблере читать по этому адресу значение и заносить его в другую переменную, откуда потом методом Serial.print отправлять в монитор порта?
Знающие люди, подскажите, нужно ли сюда приплетать ассемблер? или С++ есть такие функции, чтобы читать значение по прямому адресу?

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

А если об.явить переменную, в которую заносить адрес регистра. потом на ассемблере читать по этому адресу значение и заносить его в другую переменную, откуда потом методом Serial.print отправлять в монитор порта?

зачем это все? чем вас

Serial.print(DDRB) не устраивает?

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

А если об.явить переменную, в которую заносить адрес регистра. потом на ассемблере читать по этому адресу значение и заносить его в другую переменную, откуда потом методом Serial.print отправлять в монитор порта?

зачем это все? чем вас

Serial.print(DDRB) не устраивает?


Ну просто хотел пощупать регистры через монитор, для общего развития.
хочется например что то сделать, и потом сразу запросить состояние регистра.... а так придется все время компилировать код....

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

так придется все время компилировать код....

зачем все время компилировать? - я ж вам написал, как решить вашу задачку, компилировать придется один раз

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

так придется все время компилировать код....

зачем все время компилировать? - я ж вам написал, как решить вашу задачку, компилировать придется один раз


искренне Вам благодарен.  ( если я правильно понял нужно составить несколько case(), для тех регистров, которые интересуют.)
А второй способ, который я тут предположил, думаете это не возможно?
 

Upper
Offline
Зарегистрирован: 23.06.2020
// Все volatile добавлены для отладки, в рабочем варианте не нужны
volatile uint8_t*	regAddress;
volatile uint8_t		myDATA;
volatile uint16_t  	sendedAddress;	// Полученный снаружи адрес регистра

void setup() {
  sendedAddress = 32;	// Полученный снаружи адрес регистра
  regAddress = (uint8_t*)sendedAddress;
  myDATA = *regAddress;
  Serial.println(myDATA);
}

void loop() {
}

Я не сильно разбираюсь в C++, может кто предложит лучше.

 

nik182
Offline
Зарегистрирован: 04.05.2015

Возьмите нормальную среду с отладчиком и будете видеть все регистры, их содержимое и как меняются значения на каждом шаге программы. А по другому не получится. Что бы вывести значение регистра МК, МК нужно останавливать  на каждом шаге программы. Если получать значения портов ввода- вывода, то совет b707 #1 выполнит работу, но тогда к программе придётся пристыковать блок обработки запроса.

Discover0708
Offline
Зарегистрирован: 20.09.2020

Вот посмотрите, этот колхоз работает... немного подправить нужно, как мне кажется.

void loop() {
  
  while (Serial.available() > 0) {
    long b = Serial.read();
    Serial.println(_SFR_IO8(b), HEX);  
                           
    }
  }

По библиотекам переменная b должна быть HEX. Как бы сделать так чтобы в консоли я вводил адрес шеснадцатиричн. без префикса т.е только 04 например для DDRB. и такой же была присвоена переменной b?
Ведь компилятор наверняка выражение HEX приведет к BIN.

rkit
Offline
Зарегистрирован: 23.11.2016

Может тебе просто учебник по программированию прочитать, для начала?

Discover0708
Offline
Зарегистрирован: 20.09.2020

rkit пишет:

Может тебе просто учебник по программированию прочитать, для начала?

Ну Вы же сами прекрасно знаете, что там такого нет и что одним чтением не выучишь язык...
те учебники которые я читал, там общий подход и не как не связан с железом.

rkit
Offline
Зарегистрирован: 23.11.2016

Ты ни один учебник не изучил до конца, не надо врать. У действий есть порядок. Сначала язык, потом низкоуровневая отладка. Ты все делаешь наоборот, оттого и проблемы.

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Discover0708 пишет:

те учебники которые я читал, там общий подход и не как не связан с железом.

BIN и HEX тем более никак не связаны с железом.

И ркит прав - чтобы понять, как HEX связан с BIN, нужно знать теорию (и ничего кроме теории).

Discover0708
Offline
Зарегистрирован: 20.09.2020

rkit пишет:
Ты ни один учебник не изучил до конца, не надо врать. У действий есть порядок. Сначала язык, потом низкоуровневая отладка. Ты все делаешь наоборот, оттого и проблемы.

У меня нет ни одного учебника, только скаченные с интернета. и там все на скорую руку сверстано.   На уроках ALEX GYVER, воспитан я или недовоспитан... там , к сожалению про это ничего нет.
Если все-таки Вы готовы что то подсказать, по теме. Я хочу задать Вам вопрос: Как в языке С, обратиться к ячейке памяти,зная ее HEX адрес?

Discover0708
Offline
Зарегистрирован: 20.09.2020

andriano пишет:

Discover0708 пишет:

те учебники которые я читал, там общий подход и не как не связан с железом.

BIN и HEX тем более никак не связаны с железом.

И ркит прав - чтобы понять, как HEX связан с BIN, нужно знать теорию (и ничего кроме теории).


Я согласен полностью. Однако я хотел увидеть подсказку читай вот тот учебник или используй вот ту функцию.
Неужели ход моих мыслей не достоин подсказки?

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:
Как в языке С, обратиться к ячейке памяти,зная ее HEX адрес?


точно так же, как и по адресу в BIN

Если честно, то трудно придумать более ламерский вопрос, чем вопросы про hex и bin, такое обычно задают люди, ровно ничего не плнимающие в программировании и в регистрах

Добавлю - в программах Си вообще не используется обращение к памяти непосредственно по числовому адресу, вместо этого адрес обычно разрешается через переменную, ссылку или указатель.
Я так и не понял, зачем вам это, но все больше склоняюсь к тому, что вы и сами этого не знаете

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:
Discover0708 пишет:
Как в языке С, обратиться к ячейке памяти,зная ее HEX адрес?

 

точно так же, как и по адресу в BIN Если честно, то трудно придумать более ламерский вопрос, чем вопросы про hex и bin, такое обычно задают люди, ровно ничего не плнимающие в программировании и в регистрах Добавлю - в программах Си вообще не используется обращение к памяти непосредственно по числовому адресу, вместо этого адрес обычно разрешается через переменную, ссылку или указатель. Я так и не понял, зачем вам это, но все больше склоняюсь к тому, что вы и сами этого не знаете

Послушайте, вопрос про hex и bin  вообще не стоит. Все кто внимал к моему вопросу на лету поняли и ответили, что не знают решения. либо предложили свое.
Мне это нужно для понимания, как отправить в монитор порта код регистра, и как получить результат обратно.
сначала была мысль отправлять имя регистра задекларированное в define, идея была плоха и благодаря вам я сразу это понял. То что вы предложили сравнивать строчку это хорошо только для этого МК. Но у меня есть еще один от RENESAS он в составе готового устройства и для него нет программатора! только заводской бутлоадер, поэтому хочется понять все-таки как обойтись без сравнения.   потом я подумал, что можно отсылать непосредственно адрес регистра.
Например, в консоли я набираю адрес 04  представляя себе. что запрашиваю его в hex формате.
он помещается в  String в виде "04",  а функция Serial.print(_SFR_IO8(0x..),BIN) ждет настоящий HEX (0x04).
Вопрос. Как String привести к тому самому HEX...
 

nik182
Offline
Зарегистрирован: 04.05.2015

К сожалению такие хотелки разбиваются о правду жизни

. А правда в том, что МК ничего не умеет делать сам. Не может отдать или получить значение регистра. Он может только выполнить программу. Что написано в программе, то он и будет делать. И никакими ушищрениями сложного BIN HEX вывода получить значения регистров невозможно. Тем более из МК программу которого невозможно изменить, а вывод в ней не предусмотрен.

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

функция Serial.print(_SFR_IO8(0x..),BIN) ждет настоящий HEX (0x04).

могу только повторить - читайте учебник, чтобы не писать подобной чуши. Никакая функция никакой HEX не ждет, HEX формат -(как и BIN или восьмеричный) - это все записи для человека! Компьютер оперирует битами и байтами, для него между записями

_SFR_IO8(0x04) ,

_SFR_IO8(4)

_SFR_IO8(0b00000100)

нет никакой разницы

Ваши потуги превратить полученное из Сериал значение в HEX путем добавление  к нему "0х" нелепы и смешны, и, главное, совершенно бессмысленны.

Вся ваша задумка - жуткая чушь. А задаваемые вами вопросы показывают. что вы не знаете самых элементарных вещей. С такими знаниями вам не регистры из МК читать, а таблицу умножения осваивать.

 

Выше совершенно верно сказали - вы ставите телегу впереди паровоза. СНАЧАЛА проштудируйте какой-нибудь учебник по Си от корки до корки, прорешайте все примеры. И только потом переходите к тонкостям железа МК.  Потому что писать для МК, не зная адресов регистров - вполне можно. А вот не зная Си - совсем нельзя.

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Discover0708 пишет:

Однако я хотел увидеть подсказку читай вот тот учебник или используй вот ту функцию.

Неужели ход моих мыслей не достоин подсказки?

Специально для таких подсказок создана тема: http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-novichok-prochti

Там уже все давным давно написано. Если бы Вы не пренебрегали правилами сетевой этики, то не стали бы требовать от людей в сотый раз повторять те подсказки, которые уже были неоднократно даны.

Ответ жа на Ваш конкретный вопрос содержится у Кернигана и Ритчи - учебник хотя и далеко не исчерпывающий применительно к данному форуму, но зато краткий, хорошо и понятно написанный и содержащий большую часть основ.

Писать на форум вопросы, не прочитав этот учебник от корки до корки, - дурной тон.

sadman41
Offline
Зарегистрирован: 19.10.2016

Сдаётся, что снова грядет срач.

ТС, видимо, думает, что МК - это как привычный ему девайс с модбасом. Положил в регистр 1 - лампочка включилась. Нужно узнать состояние лампочки - прочитал с регистра. Ну и всякие HEX, BIN из той же оперы про модбас.

Никакой КиР не поможет ему, так как он не представляет "механики" работы МК.

b707
Онлайн
Зарегистрирован: 26.05.2017

КИПовец? - это диагноз :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

КИПовец? - это диагноз :)

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Насчёт диагноза не знаю, но изучение мира методом тыка - широко распространённый процесс в человеческом обществе.

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Discover0708 пишет:

Мне это нужно для понимания, как отправить в монитор порта код регистра, и как получить результат обратно.

Подавляющее большинство присутствующих (и я в их числе) не могут понять, зачем это может понадобиться.

С того момента, когда МК примет первую букву Вашего запроса, до того момента, когда он отошлет Вам последнюю букву ответа, значение, записанное в регистр, может измениться не одну сотню раз. И, естественно, к тому моменту, когда Вы начнете читать этот ответ, содержимое регистра уже будет совсем не тем, которое содержится в ответе.

Цитата:

То что вы предложили сравнивать строчку это хорошо только для этого МК. Но у меня есть еще один от RENESAS

Чудес не бывает. Кое-какая унификация между различными процессорами возможна только на уровне языков высокого уровня. А так - в каждом процессоре регистры устроены по-своему. Вплоть до полного их отсутствия. Разница настолько велика, что отражается даже на терминологии: то, что Вы привыкли называть регистрами на AVR, может называться совершенно иначе для другого процессора.

Цитата:

потом я подумал, что можно отсылать непосредственно адрес регистра.

У AVR есть адреса регистров. У других процессоров в в общем случае их нет.

Цитата:

Как String привести к тому самому HEX...

Это называется форматным преобразованием. Почитайте для начала что-нибудь о таблице ASCII кодов, чтобы представлять, чем вообще текст отличается от чисел.

Green
Offline
Зарегистрирован: 01.10.2015

andriano пишет:

Подавляющее большинство присутствующих (и я в их числе) не могут понять, зачем это может понадобиться.


Смысл необязателен - важно желание.)
Раньше, в эпоху МП, подобное называлось монитор-отладчик. И это был базовый софт для голого железа.
Как бы можно и для МК это же иметь. С отладкой только сложнее.)

b707
Онлайн
Зарегистрирован: 26.05.2017

Green пишет:

Раньше, в эпоху МП, подобное называлось монитор-отладчик. И это был базовый софт для голого железа.
Как бы можно и для МК это же иметь. С отладкой только сложнее.)

у меня такое впечатление, что ТС рассчитывает так мониторить чужие прошивки. Типа подсоединился к контроллеру, послал запрос с "настоящим HEX" - получил в ответ содержимое регистров

Green
Offline
Зарегистрирован: 01.10.2015

Ох и тяжело ж ему придётся.) А это странное выражение HEX, BIN...

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Discover0708 пишет:

...он помещается в  String в виде "04",  а функция Serial.print(_SFR_IO8(0x..),BIN) ждет настоящий HEX (0x04).
Вопрос. Как String привести к тому самому HEX...
 

чотаржу!!!

Родное сердце! Ну не твое вот-это-вот-всё! Мошт пивка лучше? Ну её, эту бесовскую технику, одно облучение от неё. На моск влияет! ...хотя, для тебя конкретно, это - возможно шанс. ;)))

Discover0708
Offline
Зарегистрирован: 20.09.2020

Green пишет:

andriano пишет:

Подавляющее большинство присутствующих (и я в их числе) не могут понять, зачем это может понадобиться.


Смысл необязателен - важно желание.)
Раньше, в эпоху МП, подобное называлось монитор-отладчик. И это был базовый софт для голого железа.
Как бы можно и для МК это же иметь. С отладкой только сложнее.)


В точку!
Я в самом начале писал:Лабораторная работа. " простыми методами писать/читать "статичные" регистры.
я хорошо понимаю процесс и, не собираюсь через регистр смотреть, как кварц "звенит"...
У меня нет желания тратить деньги на профф. отладчик для avr.лучше тогда для STM. покупать

Методом тыка, я освоил кое какие навыки в этой жизни и они мне принесли плоды. и самое главное огромное удовольствие, чем я занимаюсь. Про ВАШИ темные стороны, Вы сами знаете...
И Микроконтроллеры - не исключение. И те самые плоды, дают возможность позаниматься пустыми тратами времени, если кого-то беспокоит мое пустое времяпровождение. Вопрос задан в "Песочнице", если чего...
Я только у Вас у "умников" спрашиваю, ранее вполне культурным языком,
В стандартном примере ардуино есть пример перевода из String в int.
String.toInt() она дает возможность перевести стринг значение вида 10500 в int 10500
Покажите мне, не знающему языка С, и не прочитавшему до конца ни одного учебника, как строку вида
1А привести к ее числовому виду int.
Я не знаю, как у других семейств МК, но у ST10F,C166,740 семейства РЕНЕСАС, точно так же есть регистры
объявленные в дефайнах, и у всех есть бутлоадеры через которые можно поковыряться в регистрах.Для меня видите ли сейчас это важно, но я не хочу покупать для этого дорогостоящий отладчик. Кстати, для ST10F  есть программа монитор, которая позволяет через UART посмотреть небольшой набор регистров. Для AVR  есть такое ПО?

sadman41
Offline
Зарегистрирован: 19.10.2016

Какая связь между преобразованием строки в число и r25 например?
Прежде чем применять культурный язык, попробуйте понять, что существует немалая вероятность, что на нем тоже можно нести околёсицу, ставя в словах приставки на место окончаний.

Хотите asciiz в long перевести? strtol() в помощь. Как найдете там регистры - поделитесь с народом.

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

как строку вида 1А привести к ее числовому виду int.

вот ведь дятел упорный, все в одну точку долбит :) Похоже он ни черта не понял...

Discover0708, откуда берется строка 1А?  Вы ее сами посылаете? - тогда черт возьми, что вам мешает послать десятичное число 26 вместо шестнадцитиричного 1а ? опять пресловутая ересь "функция требует HEX"?

Сколько раз вам повторить, что ваша функция HEX не требует?

 

UPD о том, что в итоге ваша читалка регистров вообще не заработает так, как вы себе вообразили - я уже не пишу. Не верите - ну попробуйте сами. Но бредятину про перевод Стринг в Хекс или наоборот - уже надоело читать. Учитесь пользлваться гуглем, что ли. если IQ не хвататет учебник понять. Набираете "hex string to int" и читаете ссылки

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Green пишет:

Раньше, в эпоху МП, подобное называлось монитор-отладчик. И это был базовый софт для голого железа.


Только, полагаю, там программисты писали в программах слова типа mov, jnz , а не for и malloc.
Поэтому тогда был смысл в рассматривания содержимого регистров, а сейчас - не особо. Я бы даже склонялся к тому, что изучение регистров после работы компилятора больше похоже на занятие главного героя фильма "Игры разума".

Discover0708
Offline
Зарегистрирован: 20.09.2020

sadman41 пишет:
Какая связь между преобразованием строки в число и r25 например? Прежде чем применять культурный язык, попробуйте понять, что существует немалая вероятность, что на нем тоже можно нести околёсицу, ставя в словах приставки на место окончаний. Хотите asciiz в long перевести? strtol() в помощь. Как найдете там регистры - поделитесь с народом.

Да, вот какая. изменяя значение переменной b , мы изменяем адрес опрашиваемого регистра? разве не так в этом коде?

void loop() {
  
  while (Serial.available() > 0) {
    long b = Serial.read();
    Serial.println(_SFR_IO8(b), HEX);  
                           
    }
  }

 

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Да, вот какая. изменяя значение переменной b , мы изменяем адрес опрашиваемого регистра? разве не так в этом коде?

если это то, что вам надо - что вас еще не устраивает?

 

 

хм, а зачем b - типа лонг? :)))

Discover0708
Offline
Зарегистрирован: 20.09.2020

Discover0708 пишет:

sadman41 пишет:
Какая связь между преобразованием строки в число и r25 например? Прежде чем применять культурный язык, попробуйте понять, что существует немалая вероятность, что на нем тоже можно нести околёсицу, ставя в словах приставки на место окончаний. Хотите asciiz в long перевести? strtol() в помощь. Как найдете там регистры - поделитесь с народом.

Да, вот какая. изменяя значение переменной b , мы изменяем адрес опрашиваемого регистра? разве не так в этом коде?

void loop() {
  
  while (Serial.available() > 0) {
    long b = Serial.read();
    Serial.println(_SFR_IO8(b), HEX);  
                           
    }
  }

Только переменная b получает не то, что я отправляю в монитор. и мне бы хотелось чтобы она получила, то что я отправил. например я отпрвил 1А и она получила величину 1А  A HEX это будет BIN или DEC это не важно., главное чтобы метод Serial.print(_SFR_IO8(b)) вывел результат в монитор
 

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Только переменная b получает не то, что я отправляю в монитор. и мне бы хотелось чтобы она получила, то что я отправил

дерево, так тебе второй день о том и толкуют. что ты Си не знаешь. И строчки от чисел не отличаешь совсем.  А ты отправляешь в монитор строку, читаешь из нее символ, а вы итоге тебе нужно число. Вот в этих трех типах данных, как в трех соснах. ты и заблудился.

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

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

Да, вот какая. изменяя значение переменной b , мы изменяем адрес опрашиваемого регистра? разве не так в этом коде?

если это то, что вам надо - что вас еще не устраивает?

 

 

хм, а зачем b - типа лонг? :)))


Она еще char у меня была...)
У меня времени конечно не так много, как я написал, но есть... я заступорился на этом.. и думал что мне подскажут как это сделать понятными мне примерами. Если это отнимает много времени, проходите мимо. и пусть Вас не коробит, что я отверткой в регистры полез...

sadman41
Offline
Зарегистрирован: 19.10.2016

Discover0708 пишет:

Да, вот какая. изменяя значение переменной b , мы изменяем адрес опрашиваемого регистра?


Ну, и? Напиши не 0xF, а 15 и получишь SFR #15.
Хочешь писать - 0xF, позаботься о конвертации - strtol().

Додумывать за тебя компилятор языка Си не собирается. Даже если начнешь забивать шуруп лезвием топора - ему будет похеру.

rkit
Offline
Зарегистрирован: 23.11.2016

Discover0708 пишет:

и думал что мне подскажут как это сделать понятными мне примерами.

У тебя нет знаний, чтобы это понимать, в принципе. Это как объяснять ядерный реактор человеку, не умеющему сложить 2 и 2. И не хотящему учиться.

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Она еще char у меня была...)

начни с понимания простых вещей.

1. Символ '1' не равен числу 1

2. В строке "1А". что ты посылаешь - два символа. А оператор read() читает только один. Значит, чтобы принять "1А" - нужно городить цикл, принимать символы, собирать их в строку, научится различать конец посылки...

Для человека, который в жизни не прочел ни одного учебника - это высший пилотаж. самому не освоить.

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

Только переменная b получает не то, что я отправляю в монитор. и мне бы хотелось чтобы она получила, то что я отправил

дерево, так тебе второй день о том и толкуют. что ты Си не знаешь. И строчки от чисел не отличаешь совсем.  А ты отправляешь в монитор строку, читаешь из нее символ, а вы итоге тебе нужно число. Вот в этих трех типах данных, как в трех соснах. ты и заблудился.

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


Дерево и без Вас это знает, что строка и число это разные вещи, и  признает, что оно не хочет сейчас изучать строки целый год, чтобы посмотреть в регистр...просит Вас напишите короткое преобразование, дайте посмотреть, как это делается... Либо возьмите на себя ответственность положась на свой большой опыт, заявить что задумка никогда не может быть воплощена в жизнь, т.к такое преобразование не выполнить.

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

Она еще char у меня была...)

начни с понимания простых вещей.

1. Символ '1' не равен числу 1

2. В строке "1А". что ты посылаешь - два символа. А оператор read() читает только один. Значит, чтобы принять "1А" - нужно городить цикл, принимать символы, собирать их в строку, научится различать конец посылки...

Для человека, который в жизни не прочел ни одного учебника - это высший пилотаж. нсамому не освоить.


Я это знаю. неужели вы это не понимаете?
Какой максимальный размер числа может быть в переменной b, чтобы выражение _SFR_IO8(b) не обращалось в бред?

 

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Дерево и без Вас это знает, что строка и число это разные вещи, и  признает, что оно не хочет сейчас изучать строки целый год, чтобы посмотреть в регистр...просит Вас напишите короткое преобразование, дайте посмотреть, как это делается...

нет

Не обманывай себя, если б тебе можно было дать короткий пример и дальше ты бы все понял - ты давно нашел бы это в гугле сам.

Но ты абсолютный ноль в предмете - а значит получив одну подсказку - будешь спрашивать еще и еще, каждую запятую. В итоге все равно кончится тем. что тебя пошлют нах. Так что лучше и не начинать.

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Я это знаю. неужели вы это не понимаете?

Какой максимальный размер числа может быть в переменной b, чтобы выражение _SFR_IO8(b) не обращалось в бред?

 

ЛОЛ. Вторая строка 100% подтверждает. что ты этого не знаешь...

sadman41
Offline
Зарегистрирован: 19.10.2016

Что за тупая привычка "на слабо" брать?

Нахер нужно кому-то писать примеры для ленивой жопы, которая не может в гугле набрать "arduino получить строку из serial", но лезет в низкоуровневые вещи.

Discover0708
Offline
Зарегистрирован: 20.09.2020

sadman41 пишет:
Discover0708 пишет:

Да, вот какая. изменяя значение переменной b , мы изменяем адрес опрашиваемого регистра?

Ну, и? Напиши не 0xF, а 15 и получишь SFR #15. Хочешь писать - 0xF, позаботься о конвертации - strtol(). Додумывать за тебя компилятор языка Си не собирается. Даже если начнешь забивать шуруп лезвием топора - ему будет похеру.

Спасибо, вечером потренируюсь, по моему это то что мне нужно. Надеюсь, Вы верите в меня...)

rkit, Вам тоже спасибо.

 

b707
Онлайн
Зарегистрирован: 26.05.2017

Discover0708 пишет:

Спасибо, вечером потренируюсь, по моему это то что мне нужно. Надеюсь, Вы верите в меня...)

ЛОЛ, 40 сообщений чтобы доперло, что 0xF и 15 - это одно и тоже :)

ТС, попробуй, но имхо без толку, ничего не выйдет. В строке "15" тоже два символа, а передавать и принимать ты их не умеешь