ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
23 декабря
402772 Топик полностью
Vladimir Ljaschko (17.04.2013 15:52, просмотров: 248) ответил fk0 на Протоколирование работы ПО, пример в приложенном архиве. Сделать получилось очень через ()() и собственно о том вопрос, как это можно сделать более удобным образом. А суть весьма интересная (для пик-контроллеров проф. уровня) и заключается в
Я не умею распаковывать. Что касается макросов, то использую вот такое, уже подобное кажется приводил.  // файл списка сообщений MLMESSAGE (mlExitSave , "A+B - exit, Enter - save" , "Ja = "ENTER" , Abbrechen = A+B" ,"A+B - выход,"ENTER" = save" ) MLMESSAGE (mlChangesNotSaved , " Changes are not saved! " , "Daten nicht gespeichert " ,"Данные не сохранен" ) // хедер - нумерация сообщений #ifndef K_TEXTS #define K_TEXTS enum { #define MLMESSAGE( num, engl, germ, rus) num, #include "h__ml.h" #undef MLMESSAGE MLM_QTY }; extern const char * const mlm[MLM_QTY][LANG_QTY]; const char * GetMessageName(uchar sindex); #endif // собственно массив сообщений и работа с ним const char * const mlm[MLM_QTY][LANG_QTY]= { #define MLMESSAGE( num, engl, germ, rus) {engl,germ,rus}, #include "h__ml.h" #undef MLMESSAGE }; const char * GetStateName(uchar sindex) { const char * const * my_ptr1 = &stn[sindex][ENGLISH]; const char * const * my_ptr2 = &stn[sindex][se.Lang]; if (se.Lang==ENGLISH) return *my_ptr1; if (**my_ptr2) return *my_ptr2; return *my_ptr1; } const char * GetMessageName(uchar sindex) { const char * const * my_ptr1 = &mlm[sindex][ENGLISH]; const char * const * my_ptr2 = &mlm[sindex][se.Lang]; if (se.Lang==ENGLISH) return *my_ptr1; if (**my_ptr2) return *my_ptr2; return *my_ptr1; } Файлы покоцаны для упрощения, на неточностях не ловите. Система допиливается за 5 минут до отправки номера сообщения в канал, соответственно приема там и разворачивания. Если использовать тот же файл, то изменения учитываются практически мгновенно, но PC-ный софт нужно компильнуть.