Vit (22.09.2016 11:01 - 11:03, просмотров: 152) ответил Гудвин на Вопрос к ЦЭ-гуру: Вот эта конструкция (вывод данных из некой структуры в CSV строку) отожрала 3.5 кб программной памяти в WinAvr. Как бы соптимизировать - поубавить аппетиты?
хм... можно попробовать применить что-то типа
const void * arr[]={
(const void*)&rec_bin.ves,
(const void*)&rec_bin.un_kod_ttn,
....
(const void*)&rec_bin.time_tara
};
const void * arr1[]={
(const void*)&rec_bin.repey1brutto,
(const void*)&rec_bin.n_auto,
....
(const void*)&rec_bin.rec_bin.CRC_FW_DINe
};
// Вес (Signed Long !)
for(unsigned char i = 0; i <sizeof(arr); i++){
sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),*(unsigned int*)arr[i]);
len=add_len(buf,len);
}
sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%lu,"),rec_bin.repey1ttn);
len=add_len(buf,len);
for(unsigned char i = 0; i <sizeof(arr1); i++){
sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),*(unsigned int*)arr1[i]);
len=add_len(buf,len);
}
sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),(rec_bin.off_perim>>7)); // 0..1
len=add_len(buf,len);
sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("*,")); // фотографий нет всегда
len=add_len(buf,len);
сложности с укладыванием указателей на флеш во флеш, конечно придется рихтануть, но я саму идейку предлагаю