Котуинко

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 15797
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

У адуринки все последовательные протоколы сведены к потокам...
"Stream
Stream is the base class for character and binary based streams. It is not called directly, but invoked whenever you use a function that relies on it.
Stream defines the reading functions in Arduino. When using any core functionality that uses a read() or similar method, you can safely assume it calls on the Stream class. For functions like print(), Stream inherits from the Print class.
Some of the libraries that rely on Stream include :

Serial
Wire
Ethernet Client
Ethernet Server
SD
..."

собственно для единства наименования применяемых методов...
Только вот... суть - буферизация массива последовательно принимаемых/отсылаемых данных?..
Или чего иного?... Чего собственно "ПОТОК"?
(или что подразумевает термин ПОТОК по отношению к более понятным методам ассемблера/Си)...
:dont_know:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3924254#p3924254"]Только вот... суть - буферизация массива последовательно принимаемых/отсылаемых данных?[/uquote]
смысл, имхо в наглядности текста программы, могу ошибаться - пусть поправят местные знатоки С++.
Обычно пограмисты потоки так делают:

Код: Выделить всё

lcd.print("GPS #");
lcd.print(gpsno);
lcd.print(" date: ");  
lcd.print(day);
lcd.print("-");
lcd.print(month);
lcd.print("-");
lcd.println(year);
с потоками С++ так будет:

Код: Выделить всё

lcd << "GPS #" << gpsno << " date: " <<
day << "-" << month << "-" << year << endl;
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

oleg110592 писал(а):Обычно пограмисты потоки так делают:
возможно, это какие-то особые программисты... не особые на Си делают так:

Код: Выделить всё

printf(LCD, "GPS #%d\tdate:%.2d-%.2d-%.4d\n", gpsno, day, month, year);
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

У меня будет практически как с новым std::format() из С++20, только шаблонный вариант, зато с полным контролем ошибок на стадии компиляции.

Код: Выделить всё

lcd.printf<"GPS #{} date: {0>2}-{0>2}-{}">(gpsno, day, month, year);
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

мы тут про программирование ардуино - stdio and hence printf() isn't built into the Arduino environment
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

Там много чего не встроено... Написание либы форматирования - точно такое же развлечение, как и написание любой другой либы :)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15797
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

За варианты print(), println() и соответствующего форматированного вывода особо ничего нового...
8)
Вопрос каким боком это к ПОТОКУ соотносится - обработкой данных буфера или пакетом пересылки?
Куда там чего "течет"...
:dont_know:
А за расшифровку понимания содержимого термина "ПОТОК" ....
НИЧЕГО...
жаль... снова придется самому разбираться...
:(
Это как в прошлый раз - термин ПАРСИНГ - оказался всего-то анализом и сортировкой входных данных по мере их поступления - я когда прожку загрузки КОТУИНКО делал даже и не подозревал, что можно анализ символов строк *.hex файла тем мудреным термином назвать! (а может еще и обматюкать как "парсинг потока данных файла формата intel hex8 для бутлоадера").
:tea:
Да и насчет "чего встроено" в ардуинке... - там за последнее время много чего понапихали - для той версии, что под 7-10ку расчитана (1.8.13 к примеру со всеми "обновлениями платформ"). Только те обновления (и в части компиляторов) сидят в "скрытом каталоге", а не в основном каталоге в program files.
Я в те дебри не лезу - анализ IDE и ее компиляторов - это уже задача КОТОВ ПОМАТЕРЕЕ (а оные все еще ДРЕМЛЮТЬ).
:beer:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

первоисточник уже не раз предлагался
Цель создания С++ была в том, чтобы пользователь мог определить новые
типы данных, работа с которыми была бы столь же удобна и эффективна как
и со встроенными типами. Таким образом, кажется разумным потребовать,
чтобы средства ввода-вывода для С++ программировались с использованием
возможностей С++, доступных каждому. Представленные здесь потоковые
средства ввода-вывода появились в результате попытки удовлетворить
этим требованиям.
Основная задача потоковых средств ввода-вывода - это процесс
преобразования объектов определенного типа в последовательность символов
и наоборот.
http://www.tdoc.ru/c/programming/cpp/cp ... age20.html
Друг Кота
Аватара пользователя
Сообщения: 15797
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Да я то уже много раз перечитывал (и не только того автора)...
СУТЬ самого понятия в приближении к более примитивному виду - обмен данными из буфер массива или какая еще ....
А там только поток ввода и поток вывода.
Но ввод/вывод производятся таки не непрерывно, а по соответствуюшщим заросам...
Или поток принимается как еще один вид данных всего лишь как абстрактное обобщение...
ВОТЬ...
Вобщем... пока то отложимс... до прояснения в той части, которая моим представлением требуется.
Я ж не СИшник по "начальной базе знаний".
8)
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

да в принципе то же самое что и printf, только круче.
Данные разных типов можно смешивать:

Код: Выделить всё

int nAge;
..
cout << "You entered " << nAge << " years old" << endl;
для микроконтроллера вместо cout - lcd или segment7
Друг Кота
Аватара пользователя
Сообщения: 15797
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Вобщем похоже таки на "разновидность типа/класса данных" - ибо "базовый класс Stream" относится практически ко всем последовательным коммуникационным протоколам... :roll:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="BOB51",url="/forum/viewtopic.php?p=3924499#p3924499"]СУТЬ самого понятия в приближении к более примитивному виду - обмен данными из буфер массива или какая еще ....[/uquote]
Суть в буферизации, которой может и не быть. Выводишь строку через Uart, если там наследование от класса Stream, то должен быть виртуальный метод добавляющий в буфер по одному символу. Если в буфер влезла вся строка, значит можно заниматься чем-то другим, а Uart будет отправлять данные по прерываниям. Если речь о дисплее, то буфера наверно нет и будет блокирующий вывод по одному символу сразу на экран.
Друг Кота
Аватара пользователя
Сообщения: 15797
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Загрузчик КОТУИНКО обрабатывает "поток данных" побайтово "на лету"... Плюс буфер размером в одну строку *.hex файла для последующего прикладного размещения в ОЗУ ВПД/ВПП.
Т.е. один реальный входной поток по RS232 на скорости 9600 совмещенный с анализом и преобразованием для последующего размещения в оперативном буфере и второй - сброс данных в соответстви с указанными для них адресами в ВПП/ВПД...
Неуж-то и "поток" и "парсинг" уже в дальнем прошлом изучен...?... Правда под ассемблером...
Чтой-то не особо в то верится... Гдей-то ПОДВОХ...
:roll:
OKF
Это не хвост, это антенна
Сообщения: 1456
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Это у вас такая фантазия буйная? Потоки, парсинги, подвохи...
Как не вспомнить старинный анекдот: "Пэрэбудова, прискорэння, гластнисть...
- Бидна пташина, опъять москалив найилась!"
Друг Кота
Аватара пользователя
Сообщения: 15797
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Это не фантазия, а типичная в С++ терминология, суть которой пока не во всем понятна...
Однако по причине применения в ардуино IDE (там таки С++) требует хотя-бы ознакомительного восприятия.
8)
А насчет "анекдотов с намяком"- пожалте в соответствующий раздел:
https://www.radiokot.ru/forum/viewtopic ... 7&t=101261
:wink:
Разбор технических вопросов с примесью предвзятого отношения к оппоненту, не относящегося к теме обсуждения, часто приводит к ошибочным результатам.
8)
OKF
Это не хвост, это антенна
Сообщения: 1456
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Дядя! При всём уважении. Ну если вы ахинею несёте, ну чё ж вам на это не указать то.
Самокритичнее нужно быть! И люди к вам потянуться...
Друг Кота
Аватара пользователя
Сообщения: 15797
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Есть отличающееся мнение - поясните в чем суть "ахинеи".
А просто заявить "фе" не указав в чем ошибка уж как-то несолидно.
8)
Вопрос о понимании/разъяснении сути термина "поток" остается актуален.
:roll:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

поток изначально родился для того, чтобы унифицировать последовательный обмен данными. позже (а может, и одновременно) появился термин "файл", и в настоящее время эти термины очень похожи по смыслу. я не могу точно сказать, почему они до сих пор не слились в один термин, но по сути это одно и то же, за одним исключением: поток - это механизм ОБМЕНА данными, а файл - это механизм ХРАНЕНИЯ данных. т.е. разница между ними в том, что поток не может существовать без работы программы, а файл - может. а в остальном (чтение, запись, управление и т.п.) это одно и то же.

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

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

Мой уютный бложик... заходите!
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1456
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="BOB51",url="/forum/viewtopic.php?p=3929038#p3929038"]Есть отличающееся мнение - поясните в чем суть "ахинеи".[/uquote]
Как бы не понятно о чём шла речь. Мне показалось что вы говорили об Ардуино, верно? А если так, то нет там никакого хекс-парсинга. Загрузчик этим не занимается. Он общается с программатором по протоколу STK500 и получает от него бинарные данные для записи и верификации.
Друг Кота
Аватара пользователя
Сообщения: 15797
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

ARV
хорошее дополнение к тому чего уже насобиралось...
Я ж по старой привычке ищу аналогию приемов ассемблера - и как-то совсем пока в расстройстве - одним приемом "поток" не вписать, а комплект из нескольких - это уже вроде не прием, а совокупность набора подпрограмм...
:dont_know:
Ну да пускай пока отлежится - не "жизненная необходимость", позже еще разок грызну.
8)
OKF писал(а):...
Как бы не понятно о чём шла речь. Мне показалось что вы говорили об Ардуино, верно? А если так, то нет там никакого хекс-парсинга. Загрузчик этим не занимается. Он общается с программатором по протоколу STK500 и получает от него бинарные данные для записи и верификации.
Как раз парсинг в адуринке есть...
Даже напрямую заявлен. Но речь не о загрузчике адуринки - я его начинку не знаю, а о самом термине - в общем сводящемся к методу поиска/выборки данных.
Теперь к адуринье...
Раздел оффлайн хэлпа (есть на любом ПК без подключения к инету)
file:///C:/Program%20Files/Arduino/reference/www.arduino.cc/en/Reference/Serial.html
смотрим функции:

Код: Выделить всё

parseFloat()
parseInt()
Далее они же встречаются в Stream.
Ну и ессно не столь явно поиск и выделение на главной вкладке хэлпа:

Код: Выделить всё

Characters

isAlphaNumeric()
isAlpha()
isAscii()
isWhitespace()
isControl()
isDigit()
isGraph()
isLowerCase()
isPrintable()
isPunct()
isSpace()
isUpperCase()
isHexadecimalDigit()
Собственно речь о термине "парсинг" именно с

Код: Выделить всё

parseFloat()
parseInt()
возникла.
8)

Добавлено after 6 hours 43 seconds:
Чуток от теории к практике...
Последнее время наблюдается интерес к конструкциям, у которых интерактивная часть (дисплей с кнопами ввода данных) не имеет постоянного подключения.
К примеру - прицепил к системе ввода (автономный коробок, прожка в ПК или еще чего), ввел необходимые настройки/изменения режимов и отключился.
Далее устройство работает самостоятельно (максимум с кнопами оперативного управления)...
А понадобилось в кое время перенастроить - снова подцепился с соответствующего пультика, выполнил нужные операции и снова устройство в "автономном режиме"...
Это к примеру ночничек-будильничек с разноцветиками...
Или прикладная таймерюга для теплички/аквариума....
Или ешшо чаво...
:roll:
Ответить

Вернуться в «Разные вопросы по МК»