ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 ноября
700821 Топик полностью
fk0, легенда (22.09.2016 11:38, просмотров: 319) ответил Гудвин на Вопрос к ЦЭ-гуру: Вот эта конструкция (вывод данных из некой структуры в CSV строку) отожрала 3.5 кб программной памяти в WinAvr. Как бы соптимизировать - поубавить аппетиты?
1) Я не понимаю зачем sprintf_P вместо, зачем PSTR и т.п... 2) научись писать: char *p=buffer; p+=sprintf(p, "%s %d %u %u", param1, param2, param3, param4); p+=sprintf(p, ...); ... 3) Вывести 100500 параметров можно за один вызов sprintf... 4) Можно написать цикл, который будет итерироваться по структуре (почему в приличных ЯВУ нет структур -- они не перечислимые) и печатать по одному параметру. Сделать это можно как-то так: #define S rec_bin struct s { const char *fmt; unsigned char size; size_t offs; } args[] = { { "%u", sizeof(S.off_perim), offsetof(S, off_perim) }, ... { NULL, 0 } }; char *p=buffer; for (struct *s=args; s.fmt!=NULL; s++) { void *v = (char*)rec_bin + s.offs if (s.size <= sizeof(int)) p+=sprintf(s.fmt, *(int*)v; else p+=sprintf(s.fmt, *(long*)v); }
[ZX]