Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 17.07.2017, 18:37  
H4LF
Вид на жительство
 
Аватар для H4LF
 
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
H4LF на пути к лучшему
По умолчанию Re: SIM800 + stm030 как правильно принимать по USART?

Bill, не всегда сначала 1 байт, а потом словами - иногда надо думать о выровненном доступе. Например в M0 без него нельзя вроде бы. А где можно - он может быть медленнее.
Реклама:
H4LF вне форума  
Непрочитано 17.07.2017, 18:40  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: SIM800 + stm030 как правильно принимать по USART?

Сообщение от H4LF Посмотреть сообщение
Bill, не всегда сначала 1 байт, а потом словами - иногда надо думать о выровненном доступе. Например в M0 без него нельзя вроде бы. А где можно - он может быть медленнее.
Конечно, не всегда. Нужно смотреть в каждом конкретном случае.
Bill вне форума  
Непрочитано 17.07.2017, 19:50  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: SIM800 + stm030 как правильно принимать по USART?

Сообщение от miwutka Посмотреть сообщение
Я со строками никогда не работал поэтому туго понимаю еще.
Окей. Строка - это массив элементов типа char, обычно заканчивающихся нулём. В Си нет отдельной строковой переменной, поэтому строки представляются именно так, а записываются в двойных кавычках: "Это строка". При этом, в конце строки будет добавлен 0, по которому определяется конец строки.

Строку можно объявить как массив и как указатель.
При объявлении строки как массива char message1[] = {"Hello"}, будет создан массив последовательных однобайтных элементов, в которые сразу записаны коды указанных в {" "} букв, и в конце еще один элемент, содержащий 0.
При объявлении строки как указателя char *message = "Hello" будет создан массив однобайтных элементов, аналогично предыдущему случаю, и еще, по другому адресу, будет создана 4-байтная переменная, хранящая адрес первого элемента созданного массива. Эта переменная *message - указатель на первый элемент созданного массива (строки).
Вот так:

Нажмите, чтобы открыть спойлер

===============================================


===============================================


Однако, если строку (массив элементов) объявить константной
const char *message = "Hello";
, то теперь сами элементы строки будут помещены в ПЗУ (флеш) и не будут отнимать место в ОЗУ. Однако, указатель на строку остается неконстантным и находится в ОЗУ, что позволяет работать с указателем на строку.

Вот, это что касалось прединициализованных строк, содержащих фиксированный текст.

Теперь что касается строк, содержащих переменные, принятые извне, изменяемые значения.
Здесь всё аналогично, за исключением того, что это неконстантные (изменяемые), не инициализованные при создании массивы.
Обычно такой массив зовется буфером, хотя не принципиально.
Объявить буфер можно массивом фиксированной длинны char buf[10].
Вот слева - буфер, содержащий принятое слово с начала буфера, справа - инициализованная строка:
Нажмите, чтобы открыть спойлер



Работать с буфером можно либо через индекс массива, либо через указатель. Указатель на начало массива:
char *buf_ptr = buf

Ну а дальше идет обычная работа с указателями:

char var;
var = *buf_ptr; // чтение в переменную var из буфера по указателю
*buf_ptr = var; // запись из переменной var в буфер по указателю
var = *buf_ptr++; // чтение в переменную из буфера, с последующим инкрементом указателя
buf_ptr += 5; // указатель на 5 позиций вперед
buf_ptr -= 2; // указатель на 2 позиции назад (от предыдущей позиции!)

Таким образом, работа со строками - это работа с указателями. Хотя можно работать со строками как с массивами и их индексами. Только это медленнее идет.

Что касается \n\r - это управляющая последовательность символов - http://ru.cppreference.com/w/cpp/language/escape

Последний раз редактировалось NewWriter; 17.07.2017 в 21:16.
NewWriter вне форума  
Сказали "Спасибо" NewWriter
miwutka (17.07.2017)
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
STM32f415 и usart b USB bass1981 ARM 0 07.07.2017 14:47
Глюк приёма данных по USART supercelt ARM 85 18.04.2017 04:58
Почему USART работает правильно? zhan99999 Микроконтроллеры, АЦП, память и т.д 10 24.01.2010 15:39
Помогите разобраться с USART в CodeVisionAVR vendim Микроконтроллеры, АЦП, память и т.д 20 26.07.2007 16:42


Часовой пояс GMT +4, время: 23:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot