roboforum.ru

Технический форум по робототехнике.

Передача данных

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Передача данных

Сообщение dccharacter » 29 июн 2012, 18:46

boez писал(а):
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 байт) еще сложнее - нужна проверка не только на минус, но и на больше буфера.

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

Re: Передача данных

Сообщение boez » 29 июн 2012, 19:28

dccharacter писал(а):хм, а буффер разве можно расширять? вроде размер буффера должен быть const?

Это в AVRках он const :) А в системах с динамической памятью (malloc/free) вполне себе можно попросить буфер побольше, если вдруг в текущий не влезло, и с этим буфером опять вызвать snprintf.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Передача данных

Сообщение dccharacter » 29 июн 2012, 21:31

поменял выше функции с УАРТом - ошибки опять были.

Добавлено спустя 1 минуту 58 секунд:
Вот код работы с сериалом:

Код: Выделить всёРазвернуть
void process_serial (void)
{
   while (input.full)
   {
      RCIE = 0;
      tmp = input.buf[input.rd++];
      input.rd &= input.mask;
      --input.full;
      RCIE = 1;

      cmd[0] = cmd[1];
      cmd[1] = cmd[2];
      cmd[2] = cmd[3];
      cmd[3] = cmd[4];
      cmd[4] = tmp;

      if (cmd[4] == 'p')
      {
         if ((cmd[0] == 's') || (cmd[0] == 'g'))
         {
            if (cmd[0] == 's')
            {
               CONTROL_REG[cmd[1]] = cmd[2];
               CONTROL_REG[cmd[1]+1] = cmd[3];
            }

            rs232_putch(cmd[0]);
            rs232_putch(cmd[1]);
            rs232_putch(CONTROL_REG[cmd[1]]);
            rs232_putch(CONTROL_REG[cmd[1]+1]);
            rs232_putch(cmd[4]);
         }
      }
   }
}


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

Пред.

Вернуться в Микроконтроллеры

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 18