Самая простая оптимизация - это разделить рендеринг с помощью FreeRTOS на два потока: по одному для каждого из ядер XTensa LX7. Вторым шагом может быть отказ от операций с плавающей точкой в пользу целочисленных вычислений и использования таблиц синусов на период 2Pi. Третьим шагом может быть применение simd инструкций, которые есть в XTensa LX7. А еще такую демку (с точки зрения графики) можно сделать вообще без "теневых" экранных буферов, вернее, как минимум, с двумя буферами размером со строку дисплея - для так называемого построчного рендеринга, и демка будет летать и памяти вагон с тележкой останется для других задач. Тут я еще не упомянул использование DMA для вывода изображений без использования ресурсов ядра (разумеется, с учетом затрат на конфигурирование потока). 🙂
@@gostrobrod , генерацию данных для pcm буфера (двойной буфер) аудио можно делать в прерывании (это займет кроху времени), а выводить через i2s на dac через dma. Выделять все ресурсы ядра для генерации звука - это даже жирно для 32-битного flac 🙂
Самая простая оптимизация - это разделить рендеринг с помощью FreeRTOS на два потока: по одному для каждого из ядер XTensa LX7. Вторым шагом может быть отказ от операций с плавающей точкой в пользу целочисленных вычислений и использования таблиц синусов на период 2Pi. Третьим шагом может быть применение simd инструкций, которые есть в XTensa LX7. А еще такую демку (с точки зрения графики) можно сделать вообще без "теневых" экранных буферов, вернее, как минимум, с двумя буферами размером со строку дисплея - для так называемого построчного рендеринга, и демка будет летать и памяти вагон с тележкой останется для других задач. Тут я еще не упомянул использование DMA для вывода изображений без использования ресурсов ядра (разумеется, с учетом затрат на конфигурирование потока). 🙂
@@VadRov второе ядро занято генерацией аудио, а остальное - было в планах. Про построчный рендеринг не знал, спасибо.
@@gostrobrod , генерацию данных для pcm буфера (двойной буфер) аудио можно делать в прерывании (это займет кроху времени), а выводить через i2s на dac через dma. Выделять все ресурсы ядра для генерации звука - это даже жирно для 32-битного flac 🙂