В комментариях к предыдущему посту (https://t.me/architect_says/501) задают резонный вопрос: если Atmega не успевает даже вовремя выполнять деление, как вообще писать более-менее производительный код? Ну, как -- брать более мощный процессор. Правда, с этим начинаются нюансы.
Так уж вышло, что на борту нашего изделия есть многоядерный ARM, который было бы неплохо заиспользовать для этой задачи. Учитывая, что основные вычисления у нас ведет аппаратный ускоритель, кажется, что процессор мог бы нам помочь рисовать OSD.
Однако, ничего хорошего из этого не выйдет, есть принципиальные проблемы.
Во-первых, там установлен linux. Как заставить его забыть про 1 процессорное ядро, а на него повесить выделенную активность вне ОС -- это вопрос отдельного исследования. Да, есть Xenomai, есть китайский RROS, но всё равно это задача непростая.
Второе, и более сложное: несмотря высокую производительность ARM-ядра Cortex-Axx, оно менее детерменировано: тактовая частота в доменах плавает и троттлится, шиной доступа к периферии управляет арбитр, конвейер живет своей жизнью, как и механизм кэша, контроллер прерываний сам по себе сложнее, чем К580.
Между прочим, за одну микросекунду экран съезжает на 10 пикселей, мы себе не можем позволить дрожание (=неопределенность в обработке прерывания) даже в 500 нс.
Для решения такой ситуации ограниченными аппаратными средствами используется выделенное микроконтроллерное ядро, доступное как периферия и простое: никаких кэшей, никаких конвейеров, фиксированная частота, выделенный коммутатор шины: по сути, это микроконтроллер внутри процессора. Например, таким ядром оборудованы SoC Amlogic, TI или Allwinner. Иногда его могут назвать типа Power management core. Здорово, что в linux kernel начинают появляться зачатки подсистемы работы с ним: https://docs.kernel.org/staging/remoteproc.html
Работа с таким ядром
По многим китайским системам такая документация не только закрытая, но еще и есть исключительно на китайском.
..
СМОЖЕТ ЛИ НАШ ГЕРОЙ РЕШИТЬ ЭТУ ПРОБЛЕМУ? УЗНАЕМ В СЛЕДУЩИХ СЕРИЯХ