<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Учебный курс.  Организация обмена по USART `у с использованием кольцевого буфера</title>
		<description>Discuss Учебный курс.  Организация обмена по USART `у с использованием кольцевого буфера</description>
		<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html</link>
		<lastBuildDate>Mon, 13 Apr 2026 08:22:53 +0000</lastBuildDate>
		<generator>JComments</generator>
		<atom:link href="https://chipenable.ru/index.php/component/jcomments/feed/com_k2/44.html" rel="self" type="application/rss+xml" />
		<item>
			<title>max-1 says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4992</link>
			<description><![CDATA[помогите!!! не могу отправить строку по usart`у из камня, вместо строки отправляется только первый символ. РАЗЖУЙТЕ ДЛЯ НАЧИНАЮЩЕГО.]]></description>
			<dc:creator>max-1</dc:creator>
			<pubDate>Sat, 14 Jan 2017 21:56:28 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4992</guid>
		</item>
		<item>
			<title>Zlodey says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4987</link>
			<description><![CDATA[Или лучше сделать вот так
//прерывани е по завершению приема
u8 RxData = UDR;
//если в буфере еще есть место
if (rxCount < SIZE_BUF)
{
//с читать символ из UDR в буфер
usartRxBu f[rxBufTail] = RxData;
//увели чить индекс хвоста приемного буфера
rxBufTai l++;
if (rxBufTail == SIZE_BUF) rxBufTail = 0;
//увеличить счетчик принятых символов
rxCoun t++;
}]]></description>
			<dc:creator>Zlodey</dc:creator>
			<pubDate>Mon, 09 Jan 2017 14:24:39 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4987</guid>
		</item>
		<item>
			<title>Zlodey says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4986</link>
			<description><![CDATA[Заметил грубую ошибку в коде. Если по какой-то причине не забрать байты из буфера, и буфер переполнится, то мы навсегда зависнем в обработчике прерывания USART_RXNE.
//п рерывание по завершению приема
if (rxCount < SIZE_BUF)
{ //если в буфере еще есть место usartRxBuf[rxBu fTail] = UDR; //считать символ из UDR в буфер rxBufTail++; //увеличить индекс хвоста приемного буфера if (rxBufTail == SIZE_BUF) rxBufTail = 0; rxCount++; //увеличить счетчик принятых символов
}
else 
{ // если в буфере больше нет места // мы вынуждены прочитать UDR, иначе повиснем здесь u8 free = UDR;
}]]></description>
			<dc:creator>Zlodey</dc:creator>
			<pubDate>Mon, 09 Jan 2017 13:22:47 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4986</guid>
		</item>
		<item>
			<title>Канопус says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4847</link>
			<description><![CDATA[Пример хорош всем кроме одного - проверка количества элемнтов в проверке наличия места сделана не корректно. Это грубая ошибка]]></description>
			<dc:creator>Канопус</dc:creator>
			<pubDate>Mon, 20 Jun 2016 07:12:51 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4847</guid>
		</item>
		<item>
			<title>lenivec says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4591</link>
			<description><![CDATA[Разобрался, проблема в атомарности, volatile вылечил]]></description>
			<dc:creator>lenivec</dc:creator>
			<pubDate>Fri, 18 Sep 2015 11:01:08 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4591</guid>
		</item>
		<item>
			<title>lenivec says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4590</link>
			<description><![CDATA[Только у меня работает кудряво при отправке буфера длиной более 27 байт? При отправке откуда-то берутся магические нули в конце посылки.]]></description>
			<dc:creator>lenivec</dc:creator>
			<pubDate>Thu, 17 Sep 2015 10:06:10 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4590</guid>
		</item>
		<item>
			<title>Zlodey says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4440</link>
			<description><![CDATA[Обнаружил ошибку в статье. Вот здесь //положить символ в буфер
void PutChar(unsigne d char sym)
{ if (count < SIZE_BUF){ //если в буфере еще есть место cycleBuf[tail] = sym; //помещаем в него символ count++; //инкрементируе м счетчик символов tail++; //и индекс хвоста буфера if (txBufTail == SIZE_BUF) txBufTail = 0; }
} используется одна и та же переменная, названная "tail" и "txBufTail" в разных местах кода]]></description>
			<dc:creator>Zlodey</dc:creator>
			<pubDate>Thu, 19 Feb 2015 13:16:57 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-4440</guid>
		</item>
		<item>
			<title>NaDmitrAn says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-3357</link>
			<description><![CDATA[Вот такая ситуация, мне надо отправить в порт массив рассчитанных данных, все бы ничего, но вот с окончанием загрузки в буфер проблема, у меня нет данные стоят в ячейках 6F,70, а кольцевой буфер начинается с ячейки 71, тоесть нет нулевого значения, которое программа воспримет как конец строки, и если размер буфера будет хотя-бы 4, то после загрузки второго символа в буфер, программа начнет в следующую ячейку буфера закладывать уже не данные которые закончились, а начало буфера. С текстом-то все просто берешь, ставиш пробел в конце и все работает, как в данных прилепить ячейку с "0" в конце.]]></description>
			<dc:creator>NaDmitrAn</dc:creator>
			<pubDate>Mon, 21 Oct 2013 16:11:36 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-3357</guid>
		</item>
		<item>
			<title>kleef says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2994</link>
			<description><![CDATA[Мне вот что непонятно, в обработчике прерывания по завершению передачи в случае, если у нас передаётся больше одного символа каким образом мы вновь вызываем PutChar? В функции SendStr PutChar вызывается явно если у нас это первый символ, но затем в прерывании идет присваивание UDR второго третьего и т д символов, но каким образом простое присваивание значения UDR вызывает вновь функцию PutChar для осуществления передачи?]]></description>
			<dc:creator>kleef</dc:creator>
			<pubDate>Sun, 21 Jul 2013 06:39:00 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2994</guid>
		</item>
		<item>
			<title>Extremist says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2925</link>
			<description><![CDATA[zoomerland чувак, char - это один символ, а не строка. а строку надо заключать вообщето в двойные кавычки. по идеее нормальный компилятор должен выкинуть ошибку или варнинг хотя бы на этапе предварительной компиляции]]></description>
			<dc:creator>Extremist</dc:creator>
			<pubDate>Wed, 05 Jun 2013 16:36:53 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2925</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2924</link>
			<description><![CDATA[Эта функция не реализована. Напиши функцию последовательно го чтения буфера до первого нулевого символа.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Tue, 04 Jun 2013 18:24:47 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2924</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2923</link>
			<description><![CDATA[Установлена не та скорость обмена. Выложи здесь свой проект, я посмотрю. http://chipenable.ru/index.php/forum/materialy-sajta-chipenable/3245-vetka-dlya-vremennogo-khraneniya-proektov.html У меня вот этот код работает.
char c[] = "AT+CFUN?\r";
U SART_SendStr(c) ;]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Tue, 04 Jun 2013 18:22:15 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2923</guid>
		</item>
		<item>
			<title>v3launch says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2922</link>
			<description><![CDATA[таже проблема, пример WINAVR не читает всю посылку, а только 1 символ. Не понимаю, как прочитать остальные символы из usartRxBuf[].]]></description>
			<dc:creator>v3launch</dc:creator>
			<pubDate>Tue, 04 Jun 2013 12:51:22 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2922</guid>
		</item>
		<item>
			<title>zoomerland says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2872</link>
			<description><![CDATA[Уважаемый автор! По какой то причине USART_SendStr не работает как надо. Если просто вызвать USART_SendStr(' test'); то вообще ничего не происходит, а если char с='AT+CFUN?\r'; USART_SendStr(& с); то посылает только последний символ строки.]]></description>
			<dc:creator>zoomerland</dc:creator>
			<pubDate>Sat, 11 May 2013 12:02:24 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2872</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2699</link>
			<description><![CDATA[Бывает :-)]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Thu, 28 Mar 2013 18:24:40 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2699</guid>
		</item>
		<item>
			<title>DigRo says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2694</link>
			<description><![CDATA[ Извините, заработался.]]></description>
			<dc:creator>DigRo</dc:creator>
			<pubDate>Thu, 28 Mar 2013 09:42:17 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2694</guid>
		</item>
		<item>
			<title>DigRo says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2693</link>
			<description><![CDATA[ Поясните пожалуйста: допустим txBufTail = 2 (0010), а SIZE_BUF = 10 (1010) Получается, что следующее значение txBufTail = (0011)&(1001)=( 0001) 13 Что то я не понимаю...]]></description>
			<dc:creator>DigRo</dc:creator>
			<pubDate>Thu, 28 Mar 2013 09:39:19 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2693</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2555</link>
			<description><![CDATA[Я пользуюсь CodeVision 2.04. Только что скачал код с этой страницы и запустил компиляцию. Проект скомпилировался .]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Wed, 27 Feb 2013 10:49:44 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2555</guid>
		</item>
		<item>
			<title>AFZ says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2554</link>
			<description><![CDATA[Функция загрузки строки в буфер void USART_SendStr(u nsigned char * data)//ошибка тут, на тип указателя ругается... { unsigned char sym; while(*data){ sym = *data++; USART_PutChar(s ym); } }]]></description>
			<dc:creator>AFZ</dc:creator>
			<pubDate>Wed, 27 Feb 2013 10:46:09 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2554</guid>
		</item>
		<item>
			<title>AFZ says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2553</link>
			<description><![CDATA[Зачем создавать тему? Дело в том, что код скачан отсюда для Code Vision AVR. Всё тоже самое, только инициализацию контроллера вынес в отдельный файл, но это никак не связано с ошибкой. Вообще в версии 2.03.4 не хочет работать с указателями, мб кто-то сталкивался с подобным?]]></description>
			<dc:creator>AFZ</dc:creator>
			<pubDate>Wed, 27 Feb 2013 10:33:09 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2553</guid>
		</item>
		<item>
			<title>JoJo says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2552</link>
			<description><![CDATA[Сделай тему на форуме и выложи там код. Так непонятно в чем может быть ошибка.]]></description>
			<dc:creator>JoJo</dc:creator>
			<pubDate>Wed, 27 Feb 2013 09:00:22 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2552</guid>
		</item>
		<item>
			<title>AFZ says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2551</link>
			<description><![CDATA[У меня траблы с отправкой строки в основной программе, выдает вот такую ошибку: function argument #1 of type 'unsigned char [10]' is incompatible with required parameter of type 'unsigned char'. Программу скачал с этой страницы, перепроверил, мб я где накосячил, но увы, всё точно так же, как и в статье. Упорно не хочет компилировать проект в CodeVisionAVR 2.03.4, ругается на отправляемую строку USART_SendStr(" test - OK"); Как это можно исправить?]]></description>
			<dc:creator>AFZ</dc:creator>
			<pubDate>Wed, 27 Feb 2013 07:56:06 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2551</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2258</link>
			<description><![CDATA[Добавить в функции PutChar и GetChar возврат какого-нибудь значения.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Sun, 09 Dec 2012 19:25:54 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2258</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2257</link>
			<description><![CDATA[Просто такая структура данных позволяет асинхронно буферизировать и обрабатывать потоковые данные. Пишем в одно время, а обрабатываем в другое. Обработка и наполнение буфера может происходить при любом его наполнении, при наличии свободного места. Линейный буфер, как правило используют для потоковых данных фиксированной длинны.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Sun, 09 Dec 2012 19:23:18 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2257</guid>
		</item>
		<item>
			<title>SeNiMal says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2256</link>
			<description><![CDATA[Еще вопрос: Если буфер полон, то указатели головы и хвоста тоже совпадут. Как определить, полон он или пуст? Если допустить, что при совпадении головы и хвоста - переполнение, то одна ячейка кольцевого буфера не будет использоваться. Как разрешить это противоречие?]]></description>
			<dc:creator>SeNiMal</dc:creator>
			<pubDate>Thu, 06 Dec 2012 11:45:52 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2256</guid>
		</item>
		<item>
			<title>SeNiMal says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2255</link>
			<description><![CDATA[Подскажите, чем аргументируется использование именно кольцевого буфера, а не обычного? Короче код? Или еще почему-то?]]></description>
			<dc:creator>SeNiMal</dc:creator>
			<pubDate>Thu, 06 Dec 2012 09:28:13 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2255</guid>
		</item>
		<item>
			<title>ir0407 says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2233</link>
			<description><![CDATA[1)Функция отправки строки не универсальна. Вот как отработает функция отправки строки если ей на входе подсунуть указатель на строку во флеше или же на строку лежащую в раме, которую сформировали динамически. 2)Какое может быть решение если строка не влазит в буфер, а увеличивать буфер некуда из-за ограничений по размеру рамы в некоторых камешках. :-) Замену камешка не предлагать... :-*]]></description>
			<dc:creator>ir0407</dc:creator>
			<pubDate>Fri, 23 Nov 2012 03:29:24 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2233</guid>
		</item>
		<item>
			<title>_Gringo_ says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2102</link>
			<description><![CDATA[Когда буфер заполнится, туда нельзя будет добавить данные. Соответственно функция USART_PutChar() будет работать в холостую. Можно добавить в нее возврат ошибки в этом случае или ожидание готовности - какой нибудь цикл while. Но это чревато зависоном.]]></description>
			<dc:creator>_Gringo_</dc:creator>
			<pubDate>Thu, 23 Aug 2012 20:55:37 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2102</guid>
		</item>
		<item>
			<title>Neitron says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2101</link>
			<description><![CDATA[Подскажите, а что произойдет если переполнится приемный кольцевой буфер?]]></description>
			<dc:creator>Neitron</dc:creator>
			<pubDate>Wed, 22 Aug 2012 17:29:21 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2101</guid>
		</item>
		<item>
			<title>Oxidizer says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2100</link>
			<description><![CDATA[Отличная статья! Большое спасибо! Очень помагло.]]></description>
			<dc:creator>Oxidizer</dc:creator>
			<pubDate>Tue, 21 Aug 2012 23:04:35 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-2100</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1863</link>
			<description><![CDATA[Никто никуда не вылезает. Прогоните код в симуляторе и убедитесь в этом. Или покажите мне ситуацию в которой это происходит. Конкретную ситуацию.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Wed, 23 Nov 2011 22:36:56 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1863</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1862</link>
			<description><![CDATA[Зачем увеличивать счетчик, если первый символ кладется в буфер USART модуля,а не в массив? Счетчик txCount считает символы находящиеся в кольцевом буфере! В тело второго условия мы попадем, когда сбросится флаг UDRE. А сбрасывается он при записи в регистр данных (UDR).]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Wed, 23 Nov 2011 21:43:01 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1862</guid>
		</item>
		<item>
			<title>MacMaffy says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1853</link>
			<description><![CDATA[Привет, вопрос: Я не много запутался, прием данных идёт по прерывания? Почему такой вопрос, собираю робота на РУ по уарт+автономная работа, я хотел бы чтобы по прерыванию приходил сигнал по уарт и сражу же обрабатывался, на роботе стоят ещё пару датчиков, когда сигнала по уарт нет, они работают]]></description>
			<dc:creator>MacMaffy</dc:creator>
			<pubDate>Wed, 16 Nov 2011 05:14:58 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1853</guid>
		</item>
		<item>
			<title>дмитриус says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1848</link>
			<description><![CDATA[но все равно статья хорошая. главное - идея, а остальное умному несложно допилить)))]]></description>
			<dc:creator>дмитриус</dc:creator>
			<pubDate>Tue, 15 Nov 2011 07:03:27 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1848</guid>
		</item>
		<item>
			<title>Дмитрий А. says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1818</link>
			<description><![CDATA[Посмотрите на эту функцию void USART_PutChar(u nsigned char sym) По первому условию txCount == 0 символ запихивается в UDR, но где txCount становится равным единице? То есть в тело второго условия этой функции программа никогда не попадает и буфер всё время остаётся пустым...]]></description>
			<dc:creator>Дмитрий А.</dc:creator>
			<pubDate>Thu, 03 Nov 2011 09:14:19 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1818</guid>
		</item>
		<item>
			<title>~cosinus~ says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1815</link>
			<description><![CDATA[Так что дмитриус верно подметил]]></description>
			<dc:creator>~cosinus~</dc:creator>
			<pubDate>Tue, 01 Nov 2011 14:13:45 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1815</guid>
		</item>
		<item>
			<title>~cosinus~ says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1814</link>
			<description><![CDATA[ Я бы не согласился с Вами. Пусть адрес начала буфера (Start_BUF) в памяти равен 25h. Размер буфера 0Ah-байт Тогда, "хвост" и "голова" выставляются на начало буфера, а именно становятся равны 25h. Вот тут как раз и получится что будет выход за границы буфера. И "хвост"\"голова " никогда не перейдёт с конца массива на его начало. Следовательно надо "хвост"\"голову " сравнивать с (SIZE_BUF + Start_BUF+1h). Другими словами проверить выход за границы.]]></description>
			<dc:creator>~cosinus~</dc:creator>
			<pubDate>Tue, 01 Nov 2011 14:10:47 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1814</guid>
		</item>
		<item>
			<title>Чаба says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1810</link>
			<description><![CDATA[и таки -devil- прав]]></description>
			<dc:creator>Чаба</dc:creator>
			<pubDate>Sat, 29 Oct 2011 07:43:27 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1810</guid>
		</item>
		<item>
			<title>-devil- says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1809</link>
			<description><![CDATA[ну вы б внимательно хотя бы читали, чтоль. там все учтено!!! зачем по вашему там if (txBufTail == SIZE_BUF) txBufTail = 0; ?]]></description>
			<dc:creator>-devil-</dc:creator>
			<pubDate>Sat, 29 Oct 2011 07:39:11 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1809</guid>
		</item>
		<item>
			<title>дмитриус says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1808</link>
			<description><![CDATA[txCount++; //инкрементируе м счетчик символов txBufTail++;- а из-за такой бодяги вы просто вылазите за пределы массива. компилятору и МК конечто же все равно))) МК просто инкрементирует счетчик адресов]]></description>
			<dc:creator>дмитриус</dc:creator>
			<pubDate>Sat, 29 Oct 2011 07:31:43 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1808</guid>
		</item>
		<item>
			<title>дмитриус says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1807</link>
			<description><![CDATA[ну в вашем случае процедуры - это символы. суть та же]]></description>
			<dc:creator>дмитриус</dc:creator>
			<pubDate>Sat, 29 Oct 2011 07:28:42 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1807</guid>
		</item>
		<item>
			<title>дмитриус says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1806</link>
			<description><![CDATA[что-то мне кажется что лучче сдвигать адреса процедур в очереди, чем хранить кол. процедур, хвост и конец. Просто у вас нигде не описано что после записи/чтения символа в последнюю ячейку массива, следующий надо писать/читать в/из первой(нулевой) ячейки. т.е проблема при переходе из конца в начало массива никак не описано.]]></description>
			<dc:creator>дмитриус</dc:creator>
			<pubDate>Sat, 29 Oct 2011 07:27:51 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1806</guid>
		</item>
		<item>
			<title>Юра says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1767</link>
			<description><![CDATA[Разобрался вроде бы в общих чертах с Юартом. Но возникло несколько вопросов. 1. Если передаваемые команды состоят не из одного байта, а из строки - "imp_X", "imp_Y" и т.д. то как их идентифицироват ь в приемном буфере, если он содержит уже десяток байт? 2. Если произойдет искажение передаваемой команды, можно отправить на передающую сторону об этом сообщение. Но ведь там передающий буфер уже вполне может быть заполнен другими данными, к тому же уже успеют измениться и значения головы, хвоста и счетчика передающего буфера. Т.е. практически непрошедшую команду повторить уже не выйдет?]]></description>
			<dc:creator>Юра</dc:creator>
			<pubDate>Sun, 09 Oct 2011 19:09:11 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1767</guid>
		</item>
		<item>
			<title>Menudo says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1643</link>
			<description><![CDATA[ Эта функция нужна когда нужно прочитать из массива больше 1 символа за раз. Нужно читать пока функция не стенет выдавать 0.]]></description>
			<dc:creator>Menudo</dc:creator>
			<pubDate>Tue, 23 Aug 2011 16:13:39 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1643</guid>
		</item>
		<item>
			<title>Dmi3 says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1470</link>
			<description><![CDATA[Размышления в конце статьи не верны. Код содержит не меньше одной ошибки. Нет гарантии атомарности изменения переменых. Например: ++Count может быть откомпилировано так:
прочесть Count в регистр. LDS r16,Count увеличить регистр. INC r16 записать регистр в Count. STS Count,r16 Если между чтением и записью (между LDS и STS) произойдёт прерывание то любые изменения Count в этом прерывании будут потеряны.]]></description>
			<dc:creator>Dmi3</dc:creator>
			<pubDate>Fri, 29 Apr 2011 11:02:35 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1470</guid>
		</item>
		<item>
			<title>ciscobsci says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1413</link>
			<description><![CDATA[Вопрос, а как правильно прочитать при приеме RX не 1 символ, а строку из USART ? Желательно пример в коде..]]></description>
			<dc:creator>ciscobsci</dc:creator>
			<pubDate>Tue, 29 Mar 2011 17:26:07 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1413</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1366</link>
			<description><![CDATA[Да, в проектах они не используются. Где используется? Например, когда нужно очистить буфер по команде.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Tue, 15 Mar 2011 19:50:53 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1366</guid>
		</item>
		<item>
			<title>R_ura says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1359</link>
			<description><![CDATA[Пардон, не внимательно прочел про очистку буфера. Очищаются не данные в буфере, а указатели и счетчик. Тем не менее - в вашем примере для WINAvr не увидел использования вышеуказанных функций. Где они используются?]]></description>
			<dc:creator>R_ura</dc:creator>
			<pubDate>Sun, 13 Mar 2011 21:03:43 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1359</guid>
		</item>
		<item>
			<title>R_ura says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1358</link>
			<description><![CDATA[Не совсем понятно назначение функций Предполагаю, что первой функцией в основном цикле получаем текущее значение rxCount и если оно равно 0, то второй функцией очищаем буфер?? Зачем его очищать, если новые данные пишутся поверх старых? Поясните, пож..]]></description>
			<dc:creator>R_ura</dc:creator>
			<pubDate>Sun, 13 Mar 2011 20:36:35 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1358</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1127</link>
			<description><![CDATA[Увеличить SIZE_BUF_UART. Увеличить скорость обмена.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Tue, 08 Feb 2011 20:20:49 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1127</guid>
		</item>
		<item>
			<title>Anton_ says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1124</link>
			<description><![CDATA[У меня ворзникает ситуация, когда txCount = SIZE_BUF_UART и контроллер не входит в прерывания передачи символа. Как побороть данную ситуацию?]]></description>
			<dc:creator>Anton_</dc:creator>
			<pubDate>Tue, 08 Feb 2011 08:35:40 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-1124</guid>
		</item>
		<item>
			<title>vovka11 says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-827</link>
			<description><![CDATA[помогите в проекте под iar компилятор выдал ошибку Error[Pe020]: identifier "SIZE_BUF" is undefined немогу понять почему, вроде проект скопировал правильно проверял возможно настроил неправельно.]]></description>
			<dc:creator>vovka11</dc:creator>
			<pubDate>Mon, 29 Nov 2010 19:29:42 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-827</guid>
		</item>
		<item>
			<title>AJ26 says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-797</link>
			<description><![CDATA[Доброго времени суток! возникла такая задача: построить клавиатуру по распределенной схеме. 1ый МК (atmega16) совершает опрос клавиатуры (сканирование) и передает код нажатой кнопки по uart. планируется передача 1-3 байт за сеанс передачи. (один байт описывает состояние ctrl, alt, shift, второй содержит номер нажатой клавиши, третий - номер второй нажатой клавиши, если нажато 2 одновременно ) Постоянно пересылать состояние всех клавиш счел нецелесообразны м. Второй МК (pic18f2550) принимает данные по уарт и передает в компьютер по usb, определяясь как стандартное hid устройство. Реализация usb клавиатуры подошла от фреймворка microchip, с этим нет вопросов - работает стабильно. На стороне и принимающего, и передающего МК будет создан циклический буфер. ПОСТАНОВКА ВОПРОСА: как лучше реализовать обмен по UART - с прерываниями или без ( чтобы не было конфликта прерываний usb и uart ) Больше всего интересует со стороны принимающего мк. Как это вижу я. в цикле ждем завершения очередного приема, проверяя флаг. По завершении приема записываем полученное значение в регистр usb. usb сам с нужной ему частотой инициирует прерывание и передачу данных в ПК. Какие рекомендации и советы можете дать?]]></description>
			<dc:creator>AJ26</dc:creator>
			<pubDate>Fri, 19 Nov 2010 17:58:24 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-797</guid>
		</item>
		<item>
			<title>Ant says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-759</link>
			<description><![CDATA[спасибо)]]></description>
			<dc:creator>Ant</dc:creator>
			<pubDate>Mon, 01 Nov 2010 09:40:03 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-759</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-755</link>
			<description><![CDATA[Project - Options - General Options - вкладка System - внизу поставить галочку Enable bit definition .. и эти ошибки исчезнут]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Sun, 31 Oct 2010 20:46:20 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-755</guid>
		</item>
		<item>
			<title>Ant says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-745</link>
			<description><![CDATA[это происходит в режиме Release, в Debug все нормально.]]></description>
			<dc:creator>Ant</dc:creator>
			<pubDate>Mon, 25 Oct 2010 12:41:07 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-745</guid>
		</item>
		<item>
			<title>Ant says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-744</link>
			<description><![CDATA[подскажите пожалуйста, открыл ваш проект, при компиляции пишет, что имена битов не определены. Как исправить? Error[Pe020]: identifier "RXCIE" is undefined D:\IAR_opit\USA RT2-IAR\USART2\ usart.c 34 Error[Pe020]: identifier "TXCIE" is undefined D:\IAR_opit\USA RT2-IAR\USART2\ usart.c 34 Error[Pe020]: identifier "RXEN" is undefined D:\IAR_opit\USA RT2-IAR\USART2\ usart.c 34 Error[Pe020]: identifier "TXEN" is undefined D:\IAR_opit\USA RT2-IAR\USART2\ usart.c 34 Error[Pe020]: identifier "URSEL" is undefined D:\IAR_opit\USA RT2-IAR\USART2\ usart.c 35 Error[Pe020]: identifier "UCSZ1" is undefined D:\IAR_opit\USA RT2-IAR\USART2\ usart.c 35 Error[Pe020]: identifier "UCSZ0" is undefined D:\IAR_opit\USA RT2-IAR\USART2\ usart.c 35 Error[Pe020]: identifier "UDRE" is undefined D:\IAR_opit\USA RT2-IAR\USART2\ usart.c 58]]></description>
			<dc:creator>Ant</dc:creator>
			<pubDate>Mon, 25 Oct 2010 12:01:22 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-744</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-546</link>
			<description><![CDATA[Решил для себя сделать либу, и возник вопросец: А имеем ли мы право в примере от SAB в функции putchar делать так: while((uint8_t) (Tmp - TxTail) >= (uint8_t) TX_BUFF_SIZE); формально у нас может случиться перенос, и Head станет меньше Tail в нормальном состоянии, и программа повиснет. Похоже, что без счетчика байт в буфере не обойтись :( Поправьте меня если что не так.]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Sat, 21 Aug 2010 13:23:55 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-546</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-527</link>
			<description><![CDATA[В функции передать символ мы передаем только символ. В моем неокрепшем уме чего то никакой сумятицы нет.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Thu, 05 Aug 2010 00:28:12 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-527</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-526</link>
			<description><![CDATA[Проект для Proteus`a такой же как и здесь - http://chipenable.ru/index.php/programming-c/43-avr-usart-uart.html]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Thu, 05 Aug 2010 00:22:37 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-526</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-519</link>
			<description><![CDATA[PutChar - в широких массах считается передать аcки символ, например char ch = 'a'; PutChar(ch); Для передачи строки строят функцию SendSrting(char *s) в качестве аргумента которой передают указатель на строку или буфер. В теле этой функции последовательно вызывается примитивная передать символ, столько раз, сколько нужно. Было бы неплохо в коде 1)или поправить названия функций 2)или переписать их содержание, т.к. в функции передать символ мы фактически передаем строку (буфер), что вносит изрядную сумятицу в неокрепшие еще умы. Некорректно это методологически .]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Tue, 03 Aug 2010 17:43:08 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-519</guid>
		</item>
		<item>
			<title>foxit says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-489</link>
			<description><![CDATA[А проект для протеуса есть]]></description>
			<dc:creator>foxit</dc:creator>
			<pubDate>Wed, 07 Jul 2010 21:00:22 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-489</guid>
		</item>
		<item>
			<title>Pyku_He_oTTyda says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-405</link>
			<description><![CDATA[Да, действительно так. Я заработался и перепутал if и while. Поэтому м посчитал, что выход из функции происходит только когда прочтется весь буфер и соответственно вернется только последнее значение.]]></description>
			<dc:creator>Pyku_He_oTTyda</dc:creator>
			<pubDate>Mon, 17 May 2010 03:02:51 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-405</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-403</link>
			<description><![CDATA[Если приемный буфер не пустой, считываем из него символ, используя в качестве индекса "указатель головы". Счетчик символов при этом уменьшаем на 1. А "указатель головы" увеличиваем на 1.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Sun, 16 May 2010 20:51:26 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-403</guid>
		</item>
		<item>
			<title>Pyku_He_oTTyda says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-401</link>
			<description><![CDATA[USART_GetChar() ; для меня непонятно работает. Считываем массив, а возвращаем символ... Растолкуйте мне, как она работает.]]></description>
			<dc:creator>Pyku_He_oTTyda</dc:creator>
			<pubDate>Sun, 16 May 2010 18:58:41 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-401</guid>
		</item>
		<item>
			<title>gringo says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-205</link>
			<description><![CDATA[Дело не в вычислении адреса, а в подходе к реализации счетчика. TxBuffer[ Tmp & (TX_BUFF_SIZE - 1) ] = Byte; ++Tmp; Переменная Tmp инкрементируетс я и на нее накладывается битовая маска. Маска обрезает лишние разряды. Таким образом проверку if производить не нужно. TxBuffer[Tmp] = Byte; ++Tmp; if (Tmp == TX_BUFF_SIZE) Tmp = 0;]]></description>
			<dc:creator>gringo</dc:creator>
			<pubDate>Wed, 17 Feb 2010 06:23:35 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-205</guid>
		</item>
		<item>
			<title>Silverio says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-204</link>
			<description><![CDATA[Если не тяжело растолкуйте принцип вычисления адреса в массиве: TxBuffer[ Tmp & (TX_BUFF_SIZE - 1) ]]]></description>
			<dc:creator>Silverio</dc:creator>
			<pubDate>Tue, 16 Feb 2010 18:56:35 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-204</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-199</link>
			<description><![CDATA[Так по хорошему надо проверку делать на отсылку данных - все или не все]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Mon, 15 Feb 2010 13:15:44 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-199</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-195</link>
			<description><![CDATA[да, последнее прерывание будет "пустое"]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Sat, 13 Feb 2010 10:28:08 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-195</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-193</link>
			<description><![CDATA[Как я понимаю, если отправился последний нужный нам символ, возникнет прерывание, но помещение в регистр символа не будет, а выполнится только проверка. Видимо это будет небольшим недостатком, так как получается что-то вроде "пустого" прерывания...]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Fri, 12 Feb 2010 21:43:01 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-193</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-165</link>
			<description><![CDATA[Оптимизация делает код менее очевидным для начинающего, поэтому иногда ей приходится пренебрегать. 1)Можно обойтись, но со счетчиком код будет короче. Особенно если кольцевой буфер на структурах. 2)Согласен, эффективнее. Возьму на заметку. ;-)]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Thu, 04 Feb 2010 13:13:01 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-165</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-164</link>
			<description><![CDATA[блин... сдвиги обрезало. заменил сдвиг влево на shl: __interrupt void Tx232Handler(vo id) { uint8_t Tmp = TxTail; // use local variable instead of volatile UDR = TxBuffer[Tmp & (TX_BUFF_SIZE - 1)]; ++Tmp; TxTail = Tmp; if(Tmp == TxHead) // all transmitted { UCSRB &= ~(1 shl UDRIE); // disable this int	} } void putchar_hard (char Byte) { uint8_t Tmp = TxHead; while((uint8_t) (Tmp - TxTail) >= (uint8_t) TX_BUFF_SIZE) ; // buffer full, wait until symbol transmitted in interrupt TxBuffer[ Tmp & (TX_BUFF_SIZE - 1) ] = Byte; ++Tmp; __disable_inter rupt(); TxHead = Tmp; UCSRB |= (1 shl UDRIE); __enable_interr upt(); }]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Thu, 04 Feb 2010 11:39:59 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-164</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-163</link>
			<description><![CDATA[И еще - зачем использовать прерывание TXC, да еще и с проверкой флага UDR в USART_PutChar() ? Неаккуратненько ... Вот: #define TX_BUFF_SIZE 8 // must be power of 2 static volatile char TxBuffer[TX_BUF F_SIZE]; static volatile uint8_t TxHead, TxTail; #pragma vector = USART_UDRE_vect __interrupt void Tx232Handler(vo id) { uint8_t Tmp = TxTail; // use local variable instead of volatile UDR = TxBuffer[Tmp & (TX_BUFF_SIZE - 1)]; ++Tmp; TxTail = Tmp; if(Tmp == TxHead) // all transmitted { UCSRB &= ~(1]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Thu, 04 Feb 2010 11:36:28 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-163</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-162</link>
			<description><![CDATA[Есть простор для оптимизации: 1)Можно обойтись без счетчика. Достаточно сравнивать индексы головы и хвоста. Неравенство означает наличие данных в буфере. Вам когда-нибудь нужно было знать, сколько конкретно данных в буфере? Мне нет. Достаточно просто знать - есть данные или нет. 2) Если поставить условие, что размер буфера должен быть степенью двойки, то txBufTail++; if (txBufTail == SIZE_BUF) txBufTail = 0; превращается в более эффективное txBufTail = (txBufTail + 1) & (SIZE_BUF - 1)); В этом случае легко считать и количество данных в буфере (если понадобится): txCount = (txBufTail - txBufHead) & (SIZE_BUF - 1); А пренебрегать volatile ни в коем случае не стоит.]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Thu, 04 Feb 2010 11:19:40 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-162</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-134</link>
			<description><![CDATA[спасибо]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Mon, 18 Jan 2010 19:37:14 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-134</guid>
		</item>
		<item>
			<title>gringo says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-133</link>
			<description><![CDATA[считывать данные из UDR в какую-нибудь переменную, затем сравнивать ее с константами... например так if (data == 'g'){ OnLedGreen();Of fLedRed(); } if (data == 'r'){ OnLedRed();OffL edGreen(); } или с помощью оператора switch]]></description>
			<dc:creator>gringo</dc:creator>
			<pubDate>Mon, 18 Jan 2010 16:46:25 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-133</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-132</link>
			<description><![CDATA[подскажите полному, чайнику(, как мне через UART заставить светить светодиоды? То есть подаю один сигнал-горит красный, подаю другой сигнал-зеленый. ЗЫ Железо собрано, светики зажигать уже умею, спасибо!]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Mon, 18 Jan 2010 14:22:07 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-132</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-109</link>
			<description><![CDATA[Любой способ хорош, если он работает.. кольцевой буфер можно еще сделать на структурах (struct)]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Sun, 10 Jan 2010 15:27:37 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-109</guid>
		</item>
		<item>
			<title>alexandershahbazov says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-107</link>
			<description><![CDATA[Возьмем на заметку ! Я в основном на прием делал так : unsigned char pars; while(rx_counte r) { pars=getchar(); putchar(pars); 'Здесь код порой достаточно приличный }; rx_counter , getchar , putchar образованы через CodeWizardAVR ( CodeVisionAVR )]]></description>
			<dc:creator>alexandershahbazov</dc:creator>
			<pubDate>Sat, 09 Jan 2010 22:02:54 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/44-uchebnyy-kurs-organizatsiya-obmena-po-usart-u-s-ispolzovaniem-koltsevogo-bufera.html#comment-107</guid>
		</item>
	</channel>
</rss>
