Mar_K 0 17 мая, 2021 Опубликовано 17 мая, 2021 (изменено) · Жалоба Зравствуйте! Скрестил FreeRTOS, графическую либу LVGL и HAL (его использует пока только LVGL) на STM32f746 disco. Заметил следующее: 1) Если не вызывать диспетчер задач и поместить функцию lv_event_handler в бесконечный цикл, не включать DCache и ICache, то производительность одна. Если включить последние 2, то ожидаемо производительность возрастает в разы. 2) Если тотже цикл с вызвовом lv_event_handler поместить в таск и запустить диспетчер задач, то независимо от того включены ли кэши производительность низкая как при выключенных кэшах Пробовал различные комбинации размещения кучи LVGL и FreeRTOS : внутренняя память и внешняя. Драйвер дисплея (от LVGL) использует DMA с буфером во внешнем ОЗУ, работает на прерываниях. Дополнительно с помощью MPU отметил область буфера для DMA как некэшируемую. Один фиг! Еще пробовал разносить xPortSysTickHandler и Hal_IncTick на разные таймеры. Также пробовал lv_tick_inc помещать в отдельную задачу с задержкой. Вобщем, ничего не помогает -- тупо тормозит причем на простом GUI. В чем может быть причина? Правильно ли я понимаю, что причина может быть в том, что при переключении задач FreeRTOS инвалидирует кэш? Изменено 17 мая, 2021 пользователем Mar_K Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 51 12 июня, 2021 Опубликовано 12 июня, 2021 · Жалоба 17.05.2021 в 17:26, Mar_K сказал: Правильно ли я понимаю, что причина может быть в том, что при переключении задач FreeRTOS инвалидирует кэш? Зачем ей это?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться