реклама на сайте
подробности

 
 
> printf(), в чем ошибка?, странное поведение...
Варяг
сообщение Sep 14 2011, 04:10
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 4-04-11
Из: челябинск
Пользователь №: 64 111



Здравствуйте! есть такая проблема, которую я победил, но интересно, почему она возникла:
передаю по УАРТ строки для GSM модуля. соответственно, первая строка передает номер объекта:

printf ("AT+CMGS=%c%c79517746909%c%c", 34,43,34,13); // эта строка передается нормально и без ошибок

далее надо передать строку сообщения и в конце передать символ возврата каретки 26:

printf ("Save Our Souls!!!%c%c", 26,13); //

но почему-то контроллер периодично передает
Save Our Soul!
Save Our Sou!!
Save Our So!!!
и так далее... но это исправилось повторной передачей символа 26 через 300 мс:

printf ("Save Our Souls!!!%c%c", 26,13);
delay_ms(300);
printf ("%c", 26);
так в чем же может быть проблема, если символы 34,43,34,13 передаются наура?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
demiurg_spb
сообщение Sep 14 2011, 04:45
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Обычно функция вывода символа определяется таким образом, чтобы она сама предваряла символ '\n' символом '\r'.
Код
int fputc(int c, FILE* stream)
{
    if ((char)c=='\n')
    {
        if (!fputc('\r', stream))
        {
            return (0);
        }
    }

    uart_put_byte(c);

    return (c);
}

Благодаря чему становится возможным писать так:
Код
puts("Save Our Souls!!!");
или так:
Код
printf("Save Our Souls!!!\n");



--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 08:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016