ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
14 июля
796925
Dingo (24.11.2017 10:40 - 25.11.2017 12:39, просмотров: 30719)
РЕШЕНО Куда делась скорость? Промахи кэша? Кэш ни при чём. Доброго здравия всем! Программа без всяких ОС и прочего, голый main() плюс прерывания. В цикле что-то вроде while(1){ char x = service(); if ( x==0 ) { static uint16_t prev_cnt=0; uint16_t cnt = get_val(); if ( cnt != prev_cnt) { stuct1=struct2; func(&struct1); } prev_cnt = cnt; if ( (pkt_len = check_pkt()) != 0 ) { get_pkt( &struct1); add_to_buffer( &struct1); rx_count++; } } } Воткнул вначале и в конце запоминание SysTick->VAL, потом считаю, сколько прошло. И эта зараза(STM32F407) на тактовой 168 МГц сжирает в максимуме овер 40 тыс циклов! И работает с 5 wait state. А мне ещё требуется обрабатывать данные из прерываний с периодом 500мксек. Можно ли как-то существенно улучшить ситуацию? Можете подсказать что-нибудь? На что обращать внимание, как писать код для подобных случаев? То, что хочу попробовать:
  • вычислять все условия вначале, потом обрабатывать по switch / case
  • инлайнить функции по максимуму.