Baser 0 February 25, 2021 Posted February 25, 2021 · Report post 5 минут назад, Entomo сказал: Но светодиод погасить/зажечь не удается. Вот фрагмент кода: Все у вас работает согласно программе. Нужно подучить язык Си. mystring это массив из 20-и байт. Указание этого имени без индекса означает адрес первого байта. Выражение if (mystring == '1') означает, что вы сравниваете адрес массива с кодами 0x30 и 0x31. Для сравнения байта пишите if (mystring[0] == '1') но это только один первый байт Quote Share this post Link to post Share on other sites More sharing options...
Entomo 0 February 25, 2021 Posted February 25, 2021 · Report post 1 минуту назад, MrBearManul сказал: Идём учить Си. Совершенно неправильно так делать. Вы сравниваете значение указателя с аски-кодом цифры 1. Думаю, что в 99,999% на любой системе это сравнение всегда будет ложным. Но там еще другая проблема: если использовать Ваш фрагмент то при контроле содержимого string после введения каждого символа тут же отображается только этот символ. То есть у меня по Вашему коду не формируется строка хотя бы из двух символов. Символ введенный с терминала (он же string) тут же отображается. То есть размер string никогда не превышает одного символа То есть я по-прежнему могу вводить в качестве управляющего только один символ а не строку Quote Share this post Link to post Share on other sites More sharing options...
MrBearManul 0 February 25, 2021 Posted February 25, 2021 · Report post 31 минуту назад, Entomo сказал: есть у меня по Вашему коду Я вам предоставил пример. Модифицируйте код под себя. Quote Share this post Link to post Share on other sites More sharing options...
Aleksandr Baranov 1 February 25, 2021 Posted February 25, 2021 · Report post Организовываете бесконечный цикл, в котором проверяете, не пришел - ли новый символ в UART. Если пришел - кладете этот символ в буфер строки. Если этот символ является символом конца строки (<CR>, <LF>, 0) - посылаете всю строку куда Вам надо (например, на терминал). После этого приводите буфер строки в начальное состояние и начинаете все сначала. Quote Share this post Link to post Share on other sites More sharing options...
Entomo 0 February 25, 2021 Posted February 25, 2021 · Report post 1 час назад, MrBearManul сказал: Можно. Для стандартной нуль-терминированной строки. char mystring[20]; // выбираете размер так, чтобы с самой большой гипотетической строкой не было переполнения, хотя такое и невозможно int idx = 0; memset(mystring, 0, sizeof(mystring)); while(idx < sizeof(mystring-1)) { char c = UART_get_char(); if(c == '\0' || c == '\r' || c == '\n') break; mystring[idx++] = c; } // здесь у вас в mystring будет нуль-терминированная принятая строка У меня уже все получилось... но только после того как я исправил в предоставленном мне коде один фрагмент: вместо (mystring-1) я написал (mystring)-1 . Как я должен к этому относится ? Quote Share this post Link to post Share on other sites More sharing options...
_pv 27 February 25, 2021 Posted February 25, 2021 · Report post 8 minutes ago, Entomo said: У меня уже все получилось... но только после того как я исправил в предоставленном мне коде один фрагмент: вместо (mystring-1) я написал (mystring)-1 . Как я должен к этому относится ? а это MrBearManul, уже сходивший и изучивший С, вычитает из указателя единицу :) просто опечатка. Quote Share this post Link to post Share on other sites More sharing options...
Aleksandr Baranov 1 February 25, 2021 Posted February 25, 2021 (edited) · Report post Как к правильному решению. Sizeof возвращает размер явно заданного массива в байтах. Mystring - это указатель на этот массив или по простому - его начальный адрес. Mystring -1 - "левый адрес" Edited February 25, 2021 by Aleksandr Baranov Quote Share this post Link to post Share on other sites More sharing options...
MrBearManul 0 February 25, 2021 Posted February 25, 2021 · Report post 11 минут назад, Entomo сказал: Как я должен к этому относится ? Допустил ошибку. Я думаю, что простительно. Тем более, ваш код я набил прямо в форме форума. Не проверяя. Да и на чём мне его проверять??? Я думаю для меня это более, чем простительно) Quote Share this post Link to post Share on other sites More sharing options...
Entomo 0 February 25, 2021 Posted February 25, 2021 · Report post Всем спасибо ! - хеппи энд Quote Share this post Link to post Share on other sites More sharing options...
Herz 3 February 25, 2021 Posted February 25, 2021 · Report post 3 часа назад, Entomo сказал: Как я должен к этому относится ? Вот именно так: 3 часа назад, Entomo сказал: Всем спасибо ! Если надеетесь на помощь и в дальнейшем. Поймите, Вас хотят не запутать, а научить рассуждать. И, как видим, есть результаты. Quote Share this post Link to post Share on other sites More sharing options...