Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
09.07.2012, 13:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: UART + Atmega 8
Сообщение от kosmos440o
|
Библиотека stdio является стандартной, чужой код легче понимается.
|
Разве кто-то возражал? Замечания были несколько иного плана. Однако, если в программе нужно вывести в hex-формате один байт и в одном месте - вряд-ли стоит заморачиваться на stdio. Кроме того, написание подобных функций несет развивающую нагрузку. Применение стандартных библиотек лучше применять на более позднем уровне, когда уже на первый план вылезут такие неприятности, как скорость разработки, свобода в выборе МК...
Впрочем, на то и форум. Здесь каждый высказывает свои мысли, а ТС-у решать, что и почем...
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
09.07.2012, 13:42
|
|
Заблокирован
Регистрация: 23.09.2007
Сообщений: 761
Сказал спасибо: 84
Сказали Спасибо 352 раз(а) в 151 сообщении(ях)
|
Re: UART + Atmega 8
Пример получения и отправки данных из приёмного буфера с использованием стандартной функции getchar (функция эхо):
(Только для МК с одним USART)
Перед использованием:
char rx_data [64]; // 64 - размер приёмного буфера. Может быть другим
char rx_bytes; // для сохранения числа принятых байт
//функция эхо для контроля правильности приёма
void echo () // после того, как принято сообщение
{
char i=0; // переменная для цикла
rx_bytes = rx_counter; // сохранили число принятых байт
while (rx_counter) {rx_data[rx_rd_index]=getchar();}; // загнали данные из rx_buffer[] в rx_data[]
for (i=0;i‹rx_bytes;i++) {putchar (rx_data [i]); };// посылка эхо
rx_rd_index=0;rx_wr_index=0; // обнуление счётчиков приемника, если этого нет в RXC
rx_counter=0; // контрольный выстрел))) rx_counter обнуляется автоматически
}
// где-то в main
// получили сообщение, как определить - другой вопрос
echo(); // отправили обратно тоже самое (эхо)
Для отладки ввода-вывода на комп удобно использовать прогу Com Port Toolkit.
Последний раз редактировалось kosmos440o; 09.07.2012 в 14:15.
|
|
|
|
09.07.2012, 13:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: UART + Atmega 8
Сообщение от kosmos440o
|
Пример получения данных из приёмного буфера с использованием стандартной функции getchar (функция эхо):
|
Осталось объяснить ТС-у, что:
Функция Вводит символ из потока stdin.
Синтаксис #include ‹stdio.h›
int getchar(void);
Описание getchar - это макрокоманда, вводящая символ из
потока stdin. Она определена следующим образом:
getc(stdin).
Возвращаемое При успешном завершении функция getchar возвращает
значение считанный символ после предварительного
преобразования его в целое без расширения знака.
При возникновении ситуации EOF или при ошибке она
возвращает EOF.
Переносимость Функция поддерживается на системах UNIX, описана
Керниганом и Ритчи. Поддерживается стандартом ANSI
C. Функция не совместима с Windows.
И от себя добавить, что входным потоком stdin могут быть НЕ ТОЛЬКО выходные данные модуля UART. Где-то так...
(Извиняюсь за кривизну форматирования текста при кат'н-пейст)
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
09.07.2012, 14:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: UART + Atmega 8
Сообщение от kosmos440o
|
Насколько я помню, её размер около 1 кБайта.
|
На самом деле - 3,25 Кб, что отъест от памяти M8 почти 41% доступной памяти - многовато, даже для учебных задач.
Добавил еще вызов sscanf и получилось, что, напару со sprintf'ом, они занимают 4Кб - ровно половину памяти M8.
Последний раз редактировалось tempora; 09.07.2012 в 14:17.
|
|
|
|
09.07.2012, 14:56
|
|
Заблокирован
Регистрация: 23.09.2007
Сообщений: 761
Сказал спасибо: 84
Сказали Спасибо 352 раз(а) в 151 сообщении(ях)
|
Re: UART + Atmega 8
Только что сделал программу в CVAVR 2.05 с stdio - размер без неё был 640 Байт, с ней 1.7 кБайт. Без оптимизации по размеру 1.9 кБайт. Туда влезет ещё куча всего. Пара строчек русских букв на ЛСД сожрёт больше.
|
|
|
|
09.07.2012, 15:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: UART + Atmega 8
Сообщение от kosmos440o
|
сделал программу ... с stdio - размер ... 1.7 кБайт
|
Во-первых, не " с stdio", а с sprintf, в stdio ведь и еще кое-какие функции есть, а во вторых - эти 1.7Кб ну никак не смогут сделать этого:
Сообщение от kosmos440o
|
Я думаю, скоро ТС захочет вывести число с десятичной точкой и знаком.
|
|
|
|
|
09.07.2012, 15:19
|
|
Заблокирован
Регистрация: 23.09.2007
Сообщений: 761
Сказал спасибо: 84
Сказали Спасибо 352 раз(а) в 151 сообщении(ях)
|
Re: UART + Atmega 8
C десятичной точкой и знаком (float и int/10)
float mf_temp=14.8;
int i_temp=148;
sprintf(lcd_string,"%2.1f",mf_temp);
lcd_puts(lcd_string);
sprintf(lcd_string,"%i.%1u",i_temp/10,i_temp%10); // можно и по-другому
lcd_puts(lcd_string);
В чём проблемы?
А на ваших костылях ТС до Езернета никогда не доберётся)))
|
|
|
|
09.07.2012, 15:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: UART + Atmega 8
Сообщение от kosmos440o
|
В чём проблемы?
|
На данный момент - в отсутствии архива с проектом, из которого был взят приведённый код.
Так как предыдущий проект на такой код выводит " несколько не то, что ожидается":
Последний раз редактировалось tempora; 09.07.2012 в 16:44.
|
|
|
|
09.07.2012, 17:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: UART + Atmega 8
Даа, воистину " библиотека stdio является стандартной".
И кроме того - так трудно бывает порой понять свой код!.. Чужой - " легче".
|
|
|
|
09.07.2012, 18:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: UART + Atmega 8
Сообщение от kosmos440o
|
А на ваших костылях ТС до Езернета никогда не доберётся)))
|
Уважаемый, это не наши костыли. Это всего лишь предложенная нами методика постепенного понимания сути происходящего в программе. Тупой вызов закрытой функции никогда не научит человека понимать отображения чисел на разных основаниях счисления. Давайте спросим ТС-а, насколько полно он прочитал и (главное) понял описание базовой printf(). Насколько ее применение открыло ему "просветление"?
Нам с коллегой tempora костыли уже довольно давно не нужны. Ни с библиотеками, ни без оных.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
ATMEGA простой UART (RS232) без max232
|
EXIS |
Микроконтроллеры, АЦП, память и т.д |
39 |
09.12.2010 18:51 |
Вопрос по формату кадра UART в ATmega-х
|
Don_Ambrosio |
Микроконтроллеры, АЦП, память и т.д |
6 |
19.03.2008 23:56 |
UART и WinAVR
|
SpiderHall |
Микроконтроллеры, АЦП, память и т.д |
1 |
30.10.2006 20:53 |
UART
|
slawa |
Микроконтроллеры, АЦП, память и т.д |
4 |
19.01.2006 12:44 |
UART
|
xaoc |
Микроконтроллеры, АЦП, память и т.д |
13 |
01.07.2005 09:31 |
Часовой пояс GMT +4, время: 17:43.
|
|