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]