|
|
  |
Диагностика в отдельном потоке + printf |
|
|
|
Dec 9 2008, 12:46
|

Местный
  
Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145

|
Цитата(aaarrr @ Dec 9 2008, 17:39)  Вопрос-то в чем? Что, как и кому Вы собираетесь передавать? Есть много потоков в которых я желаю выводить диагн инф. Но возникают глюки связанные с разруливанием ресура под названием printf (диагностического порта). === Решил используя очереди и сейчас стоит вопрос как передавать через очереди параметры на функцию принтф. === пример: printf("Hello russian vodka v %d gradusov", (unsigned short) 40 ); и хочется передать принтфу: "Hello russian vodka v %d gradusov", (unsigned short) 40
|
|
|
|
|
Dec 9 2008, 13:12
|

Местный
  
Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145

|
Цитата(MrYuran @ Dec 9 2008, 18:01)  Так нельзя. задавайте фиксированный формат сообщения, типа printf("%s %d",char comment, int parameter) и передавайте в поток соответствующие переменные === Можете поподробнее? === Может всё-таки есть выход на любой случай жизни? А то таких конструкций можно до бесконечности писать (с фиксированным форматом). ===
|
|
|
|
|
Dec 9 2008, 13:21
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(FormatCft @ Dec 9 2008, 16:12)  Можете поподробнее? Смысл в том, что строку параметров, которая в кавычках, передать никак нельзя, т.к она const* char и компилятор её подставляет по месту. А ещё лучше использовать sprintf() и формировать текстовый буфер, а потом отправлять его в любой поток и делать с ним всё что угодно. Про то, что на слабых контроллерах лучше вообще не использовать printf , я даже не упоминаю.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Dec 9 2008, 13:30
|

Местный
  
Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145

|
Цитата(MrYuran @ Dec 9 2008, 18:21)  Смысл в том, что строку параметров, которая в кавычках, передать никак нельзя, т.к она const* char и компилятор её подставляет по месту. А ещё лучше использовать sprintf() и формировать текстовый буфер, а потом отправлять его в любой поток и делать с ним всё что угодно. Про то, что на слабых контроллерах лучше вообще не использовать printf , я даже не упоминаю. Понял. Спасибо огромное! Проверил всё работает просто замечательно! А на счет принтфа я не согласен. У меня всё летает на 24МГц с 12ю потоками и задачами не самыми простыми. Главное приоритет сделать поменьше у принтфа. У меня ему приоритет самый низкий дан.
|
|
|
|
|
Dec 9 2008, 17:19
|

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

|
Цитата(MrYuran @ Dec 9 2008, 16:21)  А ещё лучше использовать 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 ); .......... Цитата(MrYuran @ Dec 9 2008, 16:21)  Смысл в том, что строку параметров, которая в кавычках, передать никак нельзя C чего-бы это вдруг... Код printf( format, keyword_full, pvalue, err_cnt ? " <-Error" : "" );
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 9 2008, 17:21
|

Местный
  
Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145

|
Цитата(zltigo @ Dec 9 2008, 22:19)  Вообще-то 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 чего-бы это вдруг... Во-о-о-о! То что надо! Спасибо!
|
|
|
|
|
Dec 13 2008, 20:40
|

Местный
  
Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145

|
Цитата(MrYuran @ Dec 9 2008, 18:21)  ...лучше вообще не использовать printf... === Я сначала использовал стандартный debug_printf из CW - он оптимизирован и работает шустро. Решил попробовать стандартный принтф и началались тормоза отладки (символы печатаются чуть ли не медленнее чем печатаю сам). === Так что Вы правы!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|