Передача строки по UART

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Передача строки по UART

Сообщение ARV »

Demiurg писал(а):Сравните на досуге,
я и сравнивать не буду :) зато предложу сравнить, как получится у вас в сравнении с моими задачами, решаемыми при помощи sprintf: вывод на дисплей строк заранее неизвестной длины, начиная с заранее неизвестного символа, причем выводмые строки содержат в себе форматрированные числа в нужных местах. т.е. типичная задача для sprintf - получится у вас проще и экономнее?

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

Мой уютный бложик... заходите!
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Передача строки по UART

Сообщение Alkul »

Demiurg писал(а):Я работаю с символьными дисплеями
Сравните на досуге, сколько памяти займет мой способ и с применением стандартных библиотек.

Я ни грамма не сомневаюсь, что функция, написанная компетентным программистом для решения узкоспециализированной задачи будет лучше, короче и оптимальнее, чем универсальная функция из стандартной библиотеки.
Но тут нужна самая малость - компетентный программист. Коим начинающий ни разу не является.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Передача строки по UART

Сообщение oleg110592 »

Alkul писал(а):Но тут нужна самая малость - компетентный программист. Коим начинающий ни разу не является.

а как стать начинающему компетентным программистом, если не учиться. Стандартные библиотеки это хорошо, но строку из двух символов, типа как хотел ТС, имхо сравнить не сложно
if(buf[0]=='O')
{
if(buf[1]=='N') { TryLaLa(); }
}
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Передача строки по UART

Сообщение ARV »

oleg110592 писал(а):имхо сравнить не сложно
:facepalm: научили бы чему-то по-настоящему полезному, а не давали бы вредные советы...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Передача строки по UART

Сообщение Аlex »

afz писал(а):
Аlex писал(а):В нём и заполняйте массив. А окончание приёма строки будет по нулевому байту.
Только не по нулю. Если набор идет с терминала, признаком окончания строки, обычно, служит символ <CR> (0x0D)
Да пофиг откуда и куда идёт. Строка в Си-представлении всегда оканчивается нулевым символом !
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Передача строки по UART

Сообщение oleg110592 »

ARV писал(а):не давали бы вредные советы...

а где тут вредный совет, выражено только личное мнение, что правилами форума не возбраняется. Учить, имхо, не имею права - увы не педагог.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Передача строки по UART

Сообщение ARV »

oleg110592 писал(а):выражено только личное мнение
вы в своих программах тоже строки сравниваете приведеным вами методом? если так, то это плохо, и вдвойне плохо советовать это другим.

лично моё мнение, высказать которое имею право :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Передача строки по UART

Сообщение oleg110592 »

ARV писал(а):вы в своих программах тоже строки сравниваете приведеным вами методом?

Да подобным. В прошлом году сдано изделие на STM32F091 с 5 UARTами для работы во пожаро и взрывоопасных условиях , прошло сертификацию, испытания, уже несколько месяцев не выключаясь работает без нареканий у заказчиков. Думаете надо отзывать? Надо использовать стандартные библиотеки для безопасности?
LEX38RUS
Открыл глаза
Сообщения: 54
Зарегистрирован: Пн янв 11, 2016 20:35:49

Re: Передача строки по UART

Сообщение LEX38RUS »

Спасибо конечно всем. Ругаться не стоит.
Вытаскивая по одному символу из массива я тоже считаю ни айс и это не правильно. А если в команде будет 5-8 символов? Это как будет выглядеть? If buf[0] if buf[1] и так пять символов сравнивать будем? Проще тогда уже работать просто с однобайтовыми командами чтоб не парится. Благо символов куча а значить и команд может быть много. Но я так не хочу. Вообще я решил что мои знания в С ещё не очень велеки. Посижу почитаю про строки и работу с ними. Всем спасибо. По результатам отпишусь, что и как сделал. :-)
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Передача строки по UART

Сообщение Alkul »

oleg110592 писал(а):В прошлом году сдано изделие на STM32F091 для работы во пожаро и взрывоопасных условиях

Ну-ну, зачем жути нагонять? Работоспособность в пожаро-взрывобезопасных условиях определяется не программой, а правильным подбором комплектующих, схемотехникой и конструктивом.
Некорректное программирование слабо связано с вышеперечисленными факторами.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Передача строки по UART

Сообщение oleg110592 »

LEX38RUS писал(а):Вытаскивая по одному символу из массива я тоже считаю ни айс и это не правильно.

стандартные функции думаете не так делают? Если строка длинная организуем цикл

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

/* ANSI sez:
 *   The `strcmp' function compares the string pointed to by `s1' to the
 *   string pointed to by `s2'.
 *   The `strcmp' function returns an integer greater than, equal to, or less
 *   than zero, according as the string pointed to by `s1' is greater than,
 *   equal to, or less than the string pointed to by `s2'.  [4.11.4.2]
 */
int
strcmp(const char *s1, const char *s2)
{
    for ( ; *s1 == *s2; s1++, s2++)
   if (*s1 == '\0')
       return 0;
    return ((*(unsigned char *)s1 < *(unsigned char *)s2) ? -1 : +1);
}
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Передача строки по UART

Сообщение ARV »

oleg110592 писал(а):В прошлом году сдано изделие на STM32F091 с 5 UARTами для работы во пожаро и взрывоопасных условиях , прошло сертификацию, испытания, уже несколько месяцев не выключаясь работает без нареканий у заказчиков.
oleg110592 писал(а):Думаете надо отзывать? Надо использовать стандартные библиотеки для безопасности?
:facepalm: напомнило анекдот про Ваньку-дурачка, у которого х..й отрос до колена, а пользоваться им он так и не научился, только хвастался...

oleg110592 писал(а):Если строка длинная организуем цикл
ведь можете же, когда захотите, не понятно, к чему Ванькой-дурачком прикидываться-то?

Добавлено after 1 minute 12 seconds:
качественная программа != надежно работающая
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Передача строки по UART

Сообщение oleg110592 »

согласен быть Ванькой да и просто дурачком, тока до колена - увы неверная информация, но хотелось бы очень знать почему нельзя без библиотек сравнивать строки.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Передача строки по UART

Сообщение Jack_A »

ARV писал(а):
oleg110592 писал(а):Если строка длинная организуем цикл
ведь можете же, когда захотите

Одно другому не противоречит. Длинная строка - парсим в цикле, гарантировано короткая ( например, команда) - для быстрой реакции можно и вышеприведенным способом. Вообще тут многое зависит от конкретных условий.
Кстати, Сишный компилятор ( для ПК ) так и делает, принимая в стеке аргументы в подпрограмму, по-разному для: один - два - много параметров.
СпойлерИ от вкусов . :) Когда я вынужден был по причине здоровья уходить из фирмы, мой "сменщик" начал поносить мой протокол : "Как у тебя слейв мастеру сообщает об ошибке ? " - "В эхо команды 7-й бит = 0, значит, ОК, 1- значит, ошибка" - "Неправильно! Должна выдавать строчку Error" - "А чем лишние 5 байт (при весьма напряженном трафике ) тут помогут ?" - "Так надо!"
"Но ведь дивайс с дивайсом общается, а не с оператором через экран терминала! Дурак ты, братец!" -подумал я. Но не сказал.
ARV, а тон полемики в этой ветке не характерен для Вас, не сочтите за критику.
Последний раз редактировалось Jack_A Вт янв 10, 2017 09:40:03, всего редактировалось 2 раза.
Изображение
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Передача строки по UART

Сообщение ARV »

можно делать всё, как угодно. но лучше делать всё хорошо :) не так ли?
1. общепризнанные правила хорошего тона программирования гласят, что магические числа по коду - ПЛОХО.
2. т.к. все константы Си суть числа, 'A' и 'B' - это МАГИЧЕСКИЕ ЧИСЛА
из п.1 и п.2 следует, что сравнение строк по буквам в коде - ПЛОХО.

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

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

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

Мой уютный бложик... заходите!
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Передача строки по UART

Сообщение oleg110592 »

интересный подход - читал, вроде когда в кавычках 'O' или 'N', это символы (но не магические числа) и компилятор сам превращает в магические числа, которые в листинге иногда можно посмотреть. Получается строка "ON" - это просто набор из двух магических чисел. Спасибо буду знать.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Передача строки по UART

Сообщение Аlex »

Похоже, опять придётся тему разделять ? :)
Лучше бы ТС'у советом помогли, вместо очередного срача в теме с мерениями органов.
По мне, так я бы, для сравнения всего 2-ух байтов, тоже поставил 2 условия, т.к. делать для этого цикл - глупо в любом случае и со всех сторон. И никто мне не докажет обратное.
Каждый былокодит так, как хочет. Так что, давайте не будем флудить в темах, выдавая своё мнение за истинное.

Добавлено after 2 minutes 42 seconds:
oleg110592 писал(а):Получается строка "ON" - это просто набор из двух магических чисел. Спасибо буду знать.
И я не знал. Тоже теперь буду знать и стараться символы в код не добавлять, а заменять их на числа в их ASCII-представлении :)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Передача строки по UART

Сообщение oleg110592 »

так ТС определился как раз благодаря маленькому срачику и ушел изучать матчасть. Можно страницу и потереть, чтоб не позориться.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Передача строки по UART

Сообщение ARV »

oleg110592 писал(а):Получается строка "ON" - это просто набор из двух магических чисел. Спасибо буду знать.
из трех - не благодарите :)))
Аlex писал(а):Каждый былокодит так, как хочет.
когда у вас спрашивают совета, надеются, что вы умеете и знаете больше, чем вопрошающий, и делаете лучше, чем он. а если вы быдлокодите - то сразу следует предупредить, что ваши советы - быдлокодерские. я бы не стал слушать таких советов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Передача строки по UART

Сообщение Аlex »

Хорошо, уберём эту вамглазамазолящую приставку и оставим только слово "кодит" :) Смысл моего предложения от этого не изменится.
ARV, при всём моём к Вам уважении, осмелюсь озвучить мнение в Вашу сторону. Последнее время, у меня складывается впечатление, что Вы ходите по форуму только в поисках фраз (слов, предложений), за которые можно зацепиться и, поспорив, попытаться показать себя грамотнее тех, кто их озвучил. Зачем это всё ? Ну высказал кто-то своё мнение, и что ? Зачем на весь форум кричать, что оно ошибочное ? При том, что оно вполне имеет право на жизнь. Вам не приходило никогда в голову, что это мнение могут разделять и другие, коих Вы своими совами тоже огорчаете ? Причём, выставляя себя на посмешище со стороны.
Очень надеюсь, что моё впечатление ошибочно и Вам просто не хватает общения, либо Вы в этих спорах ищите какую-нибудь правду. Ну или ещё что-нибудь...
Ответить

Вернуться в «AVR»