|
Логирование данных в файл. |
|
|
|
 |
Ответов
|
Mar 20 2018, 10:12
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Если подвести итог вышесказанному получиться что то такое Код FILE *g_log_fp; int g_log_file_size;
void LOG_LogMessage(char *file, char *message, int value, int close) { int file_size = 0; char buff[256] = { '\0' }; char sval[10]; ItoA(value, sval); strcat(buff, message); strcat(buff, sval);
if (g_log_fp == NULL) { g_log_fp = fopen(file, "a+"); if (g_log_fp != NULL) fputs(buff, g_log_fp); } else fputs(buff, g_log_fp); fseek(g_log_fp, 0, SEEK_SET); fseek(g_log_fp, 0, SEEK_END); file_size = ftell(g_log_fp); if (close) fclose(g_log_fp); else fflush(g_log_fp); if (file_size >= MAX_LOG_FILE_SIZE) { //LOG_Clear() ??? //go to the next file ??? } } или я что то упустил в логике? или через очередь ? Код char log_buffer[1024]; MSG_Q_ID log_messages_Q;
void LOG_Init(void) { log_messages_Q = msgQCreate(100, 1024, 0); }
void LOG_SengQ(char *message, int value) { int size = strlen(message) + 4; //4 - for value char sval[10]; log_buffer[0] = '\0'; ItoA(value, sval); strcat(log_buffer, message); strcat(log_buffer, sval); msgQSend(log_messages_Q, log_buffer, size, NO_WAIT, MSG_PRI_NORMAL); } и потом в отдельном потоке msgQReceive(log_messages_Q, log_buffer, 1024, NO_WAIT); ? я не думаю что очередь дает какие то преимущества.
Сообщение отредактировал Jenya7 - Mar 20 2018, 10:29
|
|
|
|
|
Mar 20 2018, 13:02
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (Jenya7 @ Mar 20 2018, 18:12)  я не думаю что очередь дает какие то преимущества. Эстетические) Процессы асинхронно просто вызывают некую функцию CODE pushMsgToLog(...) , которая уже внутри помещает сообщение в очередь. Получается естественно. Другая задача асинхронно читает очередь, и получив очередное сообщение, форматирует его, готовит к записи в соответствующий файл.
--------------------
Выбор.
|
|
|
|
|
Mar 20 2018, 13:08
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(haker_fox @ Mar 20 2018, 16:02)  Эстетические) ... И не только красота - правильная очередь и функция записи в нее позволить логровать например из прерываний или из других нехороших мест куда обычному printf вход заказан. Удачи! Rob.
|
|
|
|
|
Mar 20 2018, 13:30
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(jcxz @ Mar 20 2018, 16:15)  Заказан кем? Достаточный размер стека и... вуаля! - sprintf прекрасно работает и из ISR.  Вобще то printf и sprintf это немного разные пчелы - жужжат по разному. И стек этот наверное прямо в мозгу программиста будет - чтобы инфу получал без IO функций. Удачи! Rob.
|
|
|
|
|
Mar 20 2018, 15:10
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(RobFPGA @ Mar 20 2018, 15:30)  Вобще то printf и sprintf это немного разные пчелы - жужжат по разному. И стек этот наверное прямо в мозгу программиста будет - чтобы инфу получал без IO функций.  Вы не поверите, но практически одинаковые! Так как внутри они почти сразу вызывают указанную мной _Printf(). Только одна в первом аргументе передаёт ей указатель на callback-функцию записи в ОЗУ, а другая - на callback-функцию записи в поток ввода/вывода. У меня, например, среди прочего _Printf() пишет прямо в поток TCP-сокета (расчленяя вывод на лету на отдельные кадры без промежуточного буфера и поддерживая ретрансмиссию тоже без буфера). Свои callback-функции для _Printf() невероятно расширяют её возможности. Всё ограничивается только фантазией программиста. А уж тривиальный вывод в буфер ограниченного размера делается через _Printf() на раз.
|
|
|
|
|
Mar 20 2018, 15:30
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(jcxz @ Mar 20 2018, 18:10)  Вы не поверите, но практически одинаковые! Так как внутри они почти сразу вызывают указанную мной _Printf(). Только одна в первом аргументе передаёт ей указатель на callback-функцию записи в ОЗУ, а другая - на callback-функцию записи в поток ввода/вывода. Да неужели? поверю Вам на слово Но если они для Вас так одинаковы - что мешает Вам использовать printf в прерывании? Цитата(jcxz @ Mar 20 2018, 18:10)  У меня, например, среди прочего _Printf() пишет прямо в поток TCP-сокета (расчленяя вывод на лету на отдельные кадры без промежуточного буфера и поддерживая ретрансмиссию тоже без буфера). Свои callback-функции для _Printf() невероятно расширяют её возможности. Всё ограничивается только фантазией программиста. А уж тривиальный вывод в буфер ограниченного размера делается через _Printf() на раз. То есть пока ACK для сегмента не получим из printf не уйдем ? Да уж - фантазия программиста страшная штука - но моя только заставляла меня свои _Printf() писать падла  Удачи! Rob.
|
|
|
|
Сообщений в этой теме
Jenya7 Логирование данных в файл. Mar 20 2018, 09:02 RobFPGA Приветствую!
Цитата(Jenya7 @ Mar 20 2018,... Mar 20 2018, 09:43 HardEgor Цитата(Jenya7 @ Mar 20 2018, 16:02) Сейча... Mar 20 2018, 09:48 haker_fox QUOTE (Jenya7 @ Mar 20 2018, 17:02) 1. Пр... Mar 20 2018, 10:01 andrew_b Цитата(Jenya7 @ Mar 20 2018, 13:12) Код c... Mar 20 2018, 11:25  Jenya7 Цитата(andrew_b @ Mar 20 2018, 16:25) Что... Mar 20 2018, 12:01   andrew_b Цитата(Jenya7 @ Mar 20 2018, 15:01) IAR д... Mar 20 2018, 12:13    jcxz Цитата(andrew_b @ Mar 20 2018, 14:13) Есл... Mar 20 2018, 12:21     Jenya7 Цитата(jcxz @ Mar 20 2018, 17:21) IAR име... Mar 20 2018, 12:24       jcxz Цитата(RobFPGA @ Mar 20 2018, 17:30) Но е... Mar 20 2018, 15:57        RobFPGA Приветствую!
Цитата(jcxz @ Mar 20 2018, ... Mar 20 2018, 16:56 AlexandrY Цитата(Jenya7 @ Mar 20 2018, 11:02) Как в... Mar 20 2018, 10:40 Jenya7 Цитата(AlexandrY @ Mar 20 2018, 15:40) Я ... Mar 20 2018, 10:50  jcxz Цитата(Jenya7 @ Mar 20 2018, 12:50) так в... Mar 20 2018, 12:00   Jenya7 Цитата(jcxz @ Mar 20 2018, 17:00) Если у ... Mar 20 2018, 12:14    jcxz Цитата(Jenya7 @ Mar 20 2018, 14:14) у мен... Mar 20 2018, 12:28     Jenya7 Цитата(jcxz @ Mar 20 2018, 17:24) Как тут... Mar 20 2018, 12:31      jcxz Цитата(Jenya7 @ Mar 20 2018, 14:30) а я в... Mar 20 2018, 12:38       Jenya7 Цитата(jcxz @ Mar 20 2018, 17:38) Я не зн... Mar 20 2018, 12:53        jcxz Цитата(Jenya7 @ Mar 20 2018, 14:53) но в ... Mar 20 2018, 12:59 k155la3 Цитата(Jenya7 @ Mar 20 2018, 12:02) У мен... Mar 20 2018, 12:13 haker_fox QUOTE (jcxz @ Mar 20 2018, 21:15) Заказан... Mar 21 2018, 01:43 AlexandrY Цитата(haker_fox @ Mar 21 2018, 03:43) Оп... Mar 21 2018, 05:51 jcxz Цитата(haker_fox @ Mar 21 2018, 03:43) Оп... Mar 21 2018, 08:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|