roboforum.ru

Технический форум по робототехнике.
Текущее время: 20 фев 2025, 21:59

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 28 июн 2012, 15:43 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
А как это в буфер уарта загнать?

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 28 июн 2012, 15:53 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
использовать библиотечную функцию UART_ZagnatVBuffer()
Только не забудь включить поддержку C99 в компиляторе и убрать оптимизацию

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 28 июн 2012, 19:45 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
dccharacter писал(а):
Korbofos писал(а):
Я хочу увить значение в десятичном виде

О, маладца. Как насчет printf, sprintf?

unsigned char var = 0x31;
printf("Значение в десятичном виде переменной var: %u", var);

Вывод:
Значение в десятичном виде переменной var: 49

в принципе itoa - это правильно. Можно и printf, но тогда лучше без русского языка, а то начнется извечный гемор с кодировками


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 07:35 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
как-то так?
Код:
char str[16];
unsigned char a=200;

itoa (a, str, 10);
usart_write(str);

void usart_write(unsigned char data)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
   {
   tx_buffer[tx_wr_index++]=data;
   if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
   ++tx_counter;
   }
else
   UDR=data;
#asm("sei")
}

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 07:57 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Это даже компилиться не должно. функция принимает один символ, а ей передают массив


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 08:15 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Код:
for(i=0;i<???;i++) //scanf ещё нужно определить конец строки?
{
usart_write(str[i]);
}

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 10:13 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Аллах с тобой, scanf не для этого вообще. По стандарту C конец строки обозначается нулевым байтом.
for(i=0;data[i]!=0;i++)

Добавлено спустя 5 минут 4 секунды:
dccharacter писал(а):
О, маладца. Как насчет printf, sprintf?

Не смущай неокрепшие умы. не sprintf, а snprintf. Половина взомов в этих ваших энторнетах проделаны через неотслеженную длинну строк. Не говоря уже о миллиардах просто багов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 12:07 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
бе бе бе
у меня у самого ум не сильно окрепший

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 17:08 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Код:
unsigned char var=100;
char str[16];
snprintf(str,16,"Var%d",var);
for(i=0;str[i]!=0;i++)
{
usart_write(str[i]);
}

emlot так кошерно?

Добавлено спустя 21 минуту 36 секунд:
И обратный процесс.
Код:

char str
switch(usart_read())
case 's':
for(i=0;i<3;i++) //нужно дочитать несколько байт
{str[i]=usart_read();}
var=atoi(str);
//bla bla


_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Последний раз редактировалось Korbofos 29 июн 2012, 17:20, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 17:19 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
1) у тебя переменная UNSIGNED, а модификатор - SIGNED. Соответственно если ты попытаешься вывести значение 129, то в терминале увидишь -1. Используй модификатор %u
2) тип возвращаемого значения функции указывается только при объявлении и определении функций
3) зато функция sprint(n)f возвращает количество записанных в буффер байт, т.е. не надо каждый символ проверять на ноль, надо просто возвращенное функцией количество раз сунуть байт в УАРТ.

Код:
unsigned char var=129;
char str[16];
int str_length = 0;
str_length = snprintf(str,16,"Var %u",var);

while (str_length--) usart_write(str[str_length]);


Хотя там странное что-то возвращает: Number of characters written if successful or negative value if an error occurred. If the resulting string gets truncated due to buf_size limit, function returns the total number of characters (not including the terminating null-byte) which would have been written, if the limit was not imposed.

Добавлено спустя 1 минуту 31 секунду:
по-моему я дважды налетел на OBO - off by one
так и не научился это четко определять :-)

Добавлено спустя 1 минуту 28 секунд:
Код:
unsigned char var=129;
char str[16];
int str_length = 0;
str_length = snprintf(str,16,"Var %u",var);

for (int i = 0; i < str_length; i++)
{
   usart_write(str[i]);
}

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 17:46 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Чурменя, чурменя, чурменя, OUT UDR,R17.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 17:54 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Вообще я какую-то хрень написал :-)
Причем даже не задумался над тем, как эти функции у меня написаны

Код:
void rs232_putch (char txByte)
{
   while (!TXIF);
   TXREG = txByte;
}

char rs232_getch (void)
{
   if (!RCIF) return -1;
   if (FERR) return -2;
   return    RCREG;
}   

void rs232_puts (const char * txstr)
{
   while (*txstr)
   {
       rs232_putch(*txstr++);
   }
}

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Последний раз редактировалось dccharacter 29 июн 2012, 21:28, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 18:30 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
dccharacter а как читаете пришедшие байты и передаёте их в какую либо функцию?

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 18:34 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
ну я не с терминала отправляю
т.е. я уже шлю байты форматированные
например посылка {0x73, 0x05, 0xFF, 0xF0, 0x70}
0x73 = 's', начало посылки
0x05 - адрес регистра, куда класть значение int
0xFF, 0xF0 - старший и младший байты значения int
0х70 = 'p', конец посылки

но это все без учета сбоев, понятное дело.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача данных
СообщениеДобавлено: 29 июн 2012, 18:35 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
dccharacter писал(а):
If the resulting string gets truncated ... returns the total number of characters ... which would have been written, if the limit was not imposed.

Афигеть - вот этого не знал, думал выдаст скоко реально записано. С одной стороны правильно, размер буфера мы и так знаем, а тут полезная инфа - насколько буфер надо расширить чтоб влезло. А с другой стороны, передавать результат snprintf в следующую функцию ( к примеру передачи в уарт n байт) еще сложнее - нужна проверка не только на минус, но и на больше буфера.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO