16+
Понедельник
22 октября
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
Гудвин  (22.09.2016 10:26 - 22.09.2016 10:33, просмотров: 8968)
Вопрос к ЦЭ-гуру: Вот эта конструкция (вывод данных из некой структуры в CSV строку) отожрала 3.5 кб программной памяти в WinAvr. Как бы соптимизировать - поубавить аппетиты?  
                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.cod_ev);
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.sub_cod_ev);
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.numb_ves);
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.numb_contr);
                          len=add_len(buf,len);
                          
                          // IP адрес RFID
                         
sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u.%u.%u.%u,"),ipaddr[0],ipaddr[1],ipaddr[2],ipaddr[3]); 
                          len=add_len(buf,len);

                          // ID носителя, с которого поизводится чтение (карта, метка, брелок, rw карта)
                          if (rec_bin.type_nos == 1) // // обычная карта
                            {
                             sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u_%lu,"),rec_bin.group,rec_bin.card);
                            }
                           else  // метка, брелок, rw карта  ID/MAC 
                            {
                             sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.MAC_M);
                            }
                          len=add_len(buf,len);

                         // Версия ПО брелока/rw карты. (если считана 255 страница брелока/rw карты, иначе версия = 0)
                          if (rec_bin.page_nos == 255) 
                            {
                             sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%lu,"),rec_bin.un_kod_ttn);
                            }    
                           else
                            {
                            sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("0,"));
                            }  
                          len=add_len(buf,len);
                             
                          // напряжение  батареи носителя в милливольтах
                          if (rec_bin.page_nos == 255) 
                            {
                             sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.brutto);
                            }    
                           else
                            {
                            sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("0,"));
                            }  
                          len=add_len(buf,len);

                          // Дата и время = 0
                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("0,0,0,0,0,0,")); // времени нет всегда
                          len=add_len(buf,len);

                          //Количество записей лога в БРЕЛОКЕ (если считана 255 страница БРЕЛОКA, иначе  = 0)
                          if ((rec_bin.page_nos == 255) && (rec_bin.un_kod_ttn >10)) //  это брелок (версия >10)
                            {
                             sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.rezerv);
                            }    
                           else
                            {
                            sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("0,"));
                            }  
                          len=add_len(buf,len);
   
                          // Cтраница памяти носителя 0 - для метки, карточки, 1 или 255 - для брелока, rw карты
                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.page_nos); 
                          len=add_len(buf,len);
  
                          // Назначение контроллера RFID:  0 - СКД с автосканированием, 1- Весы СКД, 2 - Весы с автоотметкой
                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.type_contr); 
                          len=add_len(buf,len);
   

                          if ((rec_bin.page_nos == 255) && (rec_bin.un_kod_ttn >10)) //  это брелок (версия >10)
                            {
                             sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.rezerv);
                            }    
                           else
                            {
                            sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("0,"));
                            }  
                          len=add_len(buf,len);

                          // Tип носителя // 1 - emmarine 2 - брелок или  rw карта, 3- метка , 4 - rw карта(если считана 255
страница rw карты и версия ПО < 11)
                          if ((rec_bin.page_nos == 255) && (rec_bin.un_kod_ttn <11)) //  это RW карта (версия <11)
                            {
                             sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("4,"));
                            }    
                           else
                            {
                             sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.type_nos);
                            }  
                          len=add_len(buf,len);

                          // Вес (Signed Long !)
                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%ld,"),rec_bin.ves); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%lu,"),rec_bin.un_kod_ttn); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.brutto); 
                          len=add_len(buf,len);
   
                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.time_brutto); 
                          len=add_len(buf,len);
                            
                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.time_lab); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.time_vygr); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.tara); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.time_tara); 
                          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);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.repey1brutto); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.n_auto); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.id_vygr_kagat); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.r_n_kag); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.rezerv); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.resets); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.curr_ibutton_time); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.rezerv2); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.CRC_FW); 
                          len=add_len(buf,len);

                          sprintf_P((char*)&buf[TCP_CHECKSUM_L_P+3+len],PSTR("%u,"),rec_bin.CRC_FW_DINe); 
                          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);
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7527 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVIII