FormatCft 0 9 декабря, 2008 Опубликовано 9 декабря, 2008 · Жалоба Решил вынести выдачу диагностических сообщений в отдельный поток. === Есть стандартная фукция printf и как организовать передачу этой функции аргументы, не понятно. У принтф может быть их несколько. === Не подскажите как решаете эту задачу вы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 9 декабря, 2008 Опубликовано 9 декабря, 2008 · Жалоба Есть стандартная фукция printf и как организовать передачу этой функции аргументы, не понятно. У принтф может быть их несколько. Вопрос-то в чем? Что, как и кому Вы собираетесь передавать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FormatCft 0 9 декабря, 2008 Опубликовано 9 декабря, 2008 · Жалоба Вопрос-то в чем? Что, как и кому Вы собираетесь передавать? Есть много потоков в которых я желаю выводить диагн инф. Но возникают глюки связанные с разруливанием ресура под названием printf (диагностического порта). === Решил используя очереди и сейчас стоит вопрос как передавать через очереди параметры на функцию принтф. === пример: printf("Hello russian vodka v %d gradusov", (unsigned short) 40 ); и хочется передать принтфу: "Hello russian vodka v %d gradusov", (unsigned short) 40 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 9 декабря, 2008 Опубликовано 9 декабря, 2008 · Жалоба и хочется передать принтфу: "Hello russian vodka v %d gradusov", (unsigned short) 40 Так нельзя. задавайте фиксированный формат сообщения, типа printf("%s %d",char comment, int parameter) и передавайте в поток соответствующие переменные Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FormatCft 0 9 декабря, 2008 Опубликовано 9 декабря, 2008 · Жалоба Так нельзя. задавайте фиксированный формат сообщения, типа printf("%s %d",char comment, int parameter) и передавайте в поток соответствующие переменные === Можете поподробнее? === Может всё-таки есть выход на любой случай жизни? А то таких конструкций можно до бесконечности писать (с фиксированным форматом). === Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 9 декабря, 2008 Опубликовано 9 декабря, 2008 · Жалоба Можете поподробнее? Смысл в том, что строку параметров, которая в кавычках, передать никак нельзя, т.к она const* char и компилятор её подставляет по месту. А ещё лучше использовать sprintf() и формировать текстовый буфер, а потом отправлять его в любой поток и делать с ним всё что угодно. Про то, что на слабых контроллерах лучше вообще не использовать printf , я даже не упоминаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FormatCft 0 9 декабря, 2008 Опубликовано 9 декабря, 2008 · Жалоба Смысл в том, что строку параметров, которая в кавычках, передать никак нельзя, т.к она const* char и компилятор её подставляет по месту. А ещё лучше использовать sprintf() и формировать текстовый буфер, а потом отправлять его в любой поток и делать с ним всё что угодно. Про то, что на слабых контроллерах лучше вообще не использовать printf , я даже не упоминаю. Понял. Спасибо огромное! Проверил всё работает просто замечательно! А на счет принтфа я не согласен. У меня всё летает на 24МГц с 12ю потоками и задачами не самыми простыми. Главное приоритет сделать поменьше у принтфа. У меня ему приоритет самый низкий дан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 9 декабря, 2008 Опубликовано 9 декабря, 2008 · Жалоба А ещё лучше использовать sprintf() и формировать текстовый буфер, а потом отправлять его в любой поток и делать с ним всё что угодно. Вообще-то vfprintf(),vprintf(),vspritf() для подобного естественнее. void myprintf( char *arg_list, ...) { va_list arg_buffer; va_start( arg_buffer, arg_list ); vsprintf( outbuffer, arg_list, arg_buffer ); .......... Смысл в том, что строку параметров, которая в кавычках, передать никак нельзя C чего-бы это вдруг... printf( format, keyword_full, pvalue, err_cnt ? " <-Error" : "" ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FormatCft 0 9 декабря, 2008 Опубликовано 9 декабря, 2008 · Жалоба Вообще-то vfprintf(),vprintf(),vspritf() для подобного естественнее. void myprintf( char *arg_list, ...) { va_list arg_buffer; va_start( arg_buffer, arg_list ); vsprintf( outbuffer, arg_list, arg_buffer ); .......... C чего-бы это вдруг... Во-о-о-о! То что надо! Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FormatCft 0 13 декабря, 2008 Опубликовано 13 декабря, 2008 · Жалоба ...лучше вообще не использовать printf... === Я сначала использовал стандартный debug_printf из CW - он оптимизирован и работает шустро. Решил попробовать стандартный принтф и началались тормоза отладки (символы печатаются чуть ли не медленнее чем печатаю сам). === Так что Вы правы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARMHARM 0 16 декабря, 2008 Опубликовано 16 декабря, 2008 · Жалоба Если на контроллере свободно живет и дышит FreeRTOS, то уж для printf производительности должно хватить. Можно взять упрощенную реализацию без float и пр. Для вывода строки по узказателю из printf можно использовать ( "%*.*s", minlen, maxlen, strptr ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться