Да и никто не спорит. Правда можно и на Сях делать оптимально. К примеру может и сам размер не так важен но важно время выполнения как пример такая конструкция: Код (C++): if (p == 1) work(1); else if (p == 2) work(2); else if (p == 3) work(3); else work(4); В любом случае медленнее чем Код (C++): switch(p) { case 1: work(1); break; case 2: work(2); break; case 3: work(3); break; default: work(4); break; } Именно на столько, что для if(p==1) значения как p, так и 1(2 и 3) надо извлекать каждый раз. В то время как во 2-м случае p извлекается 1 раз и только 1,2,3 извлекаются каждый раз. А это лишнее обращение к памяти. А то, что каксается библиотек, то каждый волен применять их на своё усмотрение. И если хочется избавиться от "узких" мест то можно закрутить и свой код вплоть до ассемблера.
Кстати Вы сами можете посмотреть код после компиляции, взглянув на листинг ассемблера. Зачастую компиляторы, кроме библиотечных функций, которые загружаются выдают файл листинга в форме: C->Аsm->Bin. Так к примеру поступает Keil uVision.
главное трезво оценивать три вещи: - свои (царские) способности; - наличие времени; - желания доказывать что твой велосипед круче.
Вот про крутизну не знаю. А вот это (прерывание Fiq для ARM7): Код (C++): void FIQ_Handler (void) __irq { PWMA = *pw_addr; #if(_debug > 0) sim_pw = *pw_addr; #endif if(flag1 & _adc_start) { #if(!(_sim_disable_adc_u > 0)) *dat_addr = (((ADCDAT >> 16) & 0x0FFF) + *dat_addr) >> 1; //*dat_addr = ((ADCDAT >> 16) & 0x0FFF); #endif #if(_debug > 0) sim_setadc = adc_u_set[sim_cnt_adc_u_set]; sim_cnt_adc_u_set++; #endif dat_addr++; if(!(dat_addr < max_dat_addr)) { dat_addr = dat_addr_null; #if(_debug > 0) sim_cnt_adc_u_set = 0; #endif } } pw_addr++; if(!(pw_addr < max_pw_addr)) { pw_addr = &pw[0];//pw_addr_nul; if(flag1 & _adc_start) flag1 &= (~(_adc_start | _adc_on)); else if(flag1 & _adc_on) flag1 |= _adc_start; } T1CLRI = 0x01; } Надо что бы как можно быстрее... и уже посматриваю в сторону ASM. Хотя можно наверное и опртимизировать. Смысл в том что бы задание для PWM и чтение ADC было как можно быстрее. Ведь есть ещё прерывания типа Irq для других трёх таймеров, обращение к EEPROM внутренней и монитору питания. Да и циклу main надо когда-то работать. И при генерации синусоиды более 1500 Гц с контролем формы сигнала на клавиатуру, дисплей и выполнение условий совсем не остаётся времени.
Ну это конечно замечательно, только вот picamera стабильная и удобная библиотека (только медленная), я если даже умудрюсь такое сделать своими руками то на это уйдет тонна времени. Засада.
Дело не в том, что она picamera совсем. А в том, что программа на питоне редко с точки зрения чатоты кадров работает с полученными данными. И только. Тут надо что-то в реальном времени. Кстати OpenCV нормально работает с камерой. Там и готовый пример есть.