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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Вопрос по Си, может ли быть несколько putchar?
zltigo
сообщение Jul 29 2011, 16:02
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Dog Pawlowa @ Jul 29 2011, 17:52) *
Мне приятно красиво сложить пакет перед отправкой, ну а кому-то нужно побыстрее покидать их в буфер sm.gif

Красота складывания или не складывания в пакет или не в пакет к делу отношения не имеет - тут весь вопрос в том, имеет-ли право некая порция информации отсылаться не по команде свыше после того, как все гарантированно отправится и примется, а совершенно асинхронно, например, в момент внешнего воздействия. И про "красиво сложить", я Вам не просто так назвал прадедушку коммуникационных протоколов X.25 - там "красиво сложить пакет" в полный рост, но линейные буфера ну НИКАК не канают.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jul 29 2011, 19:12
Сообщение #17


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(MrYuran @ Jul 29 2011, 15:28) *
Затраты времени и памяти на копирование буфера ничто по сравнению с висением активной задачи посимвольного вывода. Буфер же может отправляться в порт по прерываниям или DMA.
ИМХО.

В гораздо более простых случаях, и это не экзотика, putchar() может запросто дергать суперлуп, в котором выполняются все нужные задачи. И при этом ничего не висит.
Код
int putchar(int ch)
{
extern void idle(void);
  while(!can_write()) idle();
  write_sym((char)ch);
  return 0;
}


Сообщение отредактировал _Pasha - Jul 29 2011, 19:15
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 30 2011, 07:05
Сообщение #18


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(kan35 @ Jul 29 2011, 13:14) *
Есть несколько UARTов. Требуется делать форматный вывод в разные, можно ли как то для одной задачи (с её printf-ами) привязать один putchar, а для другой задачи - другой putchar?
Так а что, это только в avr-libc под avr-gcc есть понятие файла с подставляемыми пользователем функциями get/put и возможностью потом писать
Код
fprintf( &lcd_file, fmt, ...);
fprintf( &uart_file, fmt, ...);

При необходимости через макросы fdev_set_udata() можно в запсь про файл занести указатель на упомянутый кольцевой буфер и через fdev_get_udata() брать его внутри put() и заносить в буфер, можно просто выводить в порт, на ЖКИ, куда угодно. Хоть сервис оси дёргать и жать готовности "осевым" способом.
fprintf ничего и не узнает :-)
На мой взгляд -- вполне аккуратно всё выходит.
У других такого нет?


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 30 2011, 08:26
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ReAl @ Jul 30 2011, 09:05) *
Так а что, это только в avr-libc под avr-gcc есть понятие файла с подставляемыми пользователем функциями get/put

Понятие файла обязательно есть. Только там еще структура и конечный автомат для обслуживания этого файла добавляются sad.gif. Несколько лишняя, хотя и универсальная сущность.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Serhio6223
сообщение Aug 11 2011, 17:07
Сообщение #20





Группа: Новичок
Сообщений: 3
Регистрация: 1-08-11
Пользователь №: 66 533



Всем доброго времени суток. Обьясните пожалуйста, что вобще озночает putchar? Что он куда записывает? Я не так давно приступил к изучению Си, читаю всяческие лекции для чайников, которые нахожу в сети, но пока не понял, что есть putchar(((
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 12 2011, 08:59
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Serhio6223 @ Aug 11 2011, 20:07) *
Обьясните пожалуйста, что вобще озночает putchar?
Это функция, которая выводит переданный ей символ. Куда выводит - определяется реализацией. На писюге - в консоль, в контроллере - зависит от вас (вам придется написать ее самомтоятельно).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 12 2011, 09:27
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Serhio6223 @ Aug 11 2011, 20:07) *
Что он куда записывает?

Куда - уже ответили, а что - это существенно - этой функции передаются байты, выводимые с помощью printf.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 12 2011, 09:46
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(Dog Pawlowa @ Aug 12 2011, 13:27) *
Куда - уже ответили, а что - это существенно - этой функции передаются байты, выводимые с помощью printf.


Да вовсе не обязательно и тоже зависит от реализации самой printf.
Go to the top of the page
 
+Quote Post
ветерок
сообщение Dec 3 2011, 17:32
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 29-11-06
Из: Ижевск
Пользователь №: 22 902



В чём смысл этого куска кода ?
Код
static uchar    computeTemporaryChanges(void)
/*

*/
{
uchar   i, status = 0, mask = 1;

    for(i=0;i<8;i++){
        if(actionTimers[i])
            status |= mask;
        mask <<= 1;
    }
    return status;
}


и эквивалентно ли эта вся бредятина следующему;
Код
static uchar    computeTemporaryChanges(void)
/*

*/
{
uchar   status = 255;


    return status;
}


сам себе отвечаю - эквивалентно лишь в том случае если все 8 ячеек массива actionTimers[i] определены!
Сия бредятина исключительно хитрожопское условие.

Сообщение отредактировал ветерок - Dec 3 2011, 17:38


--------------------
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:22
Рейтинг@Mail.ru


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