[2017-06-10 11:23:11] m-s писал(а): Ну в os эта часть на asm-ме и написана, а не на c++ с хаками.
Да разве? Обычно такие же асм вставки как и у меня.
[2017-06-10 11:23:11] m-s писал(а): А кооперативной многозадачности, а ля bf/inav не хватает ardupilot-у?
Нет в бетафлае и клонах многозадачности, вообще нет. Есть вызов функций по списку, которые должны отработать за определенное время. И сложные алгоритмы в таком случае приходится реализовывать в виде кучерявых автоматов состояния. Проектировать их нудно, отлаживать задолбаешься, и нет гарантии что нигде не напортачил. В Арду процедуры уровня драйверов тоже так сделаны, но при этом ОБЯЗАНЫ быть еще 2 потока - основной и фоновый. В которых программе не надо заботиться о состоянии, просто можно работать, иногда вызывая функции ХАЛа. Кои и сделают всю черную магию Собственно это и есть настоящая кооперативная многозадачность в стиле Windows 3.1, когда контекст переключается по явному вызову планировщика yield() либо по любому системному вызову. Я могу сделать и настоящую преемптивную многозадачность по таймеру (смотреть на обработку исключений с принудительным возвратом в нужное место), но для полетного контроллера это вредно а не полезно. Потому что. Как я уже говорил, для правильного полетного контроллера нужен простой, короткий и быстрый цикл стабилизации угла а-ля Бетафлай, и все остальное на другом проце. Самое забавное что такая вохможность была у PixHawk но реализовано было иначе.
[2017-06-10 11:23:11] m-s писал(а): 5883l уже не делают
смотря кто китайцы делают, похоже. Сдох0ший компас был на доп платке с Бангуда, а не на контроллере.
[2017-06-10 11:23:11] m-s писал(а): Меньше датчиков-меньше проблем.
Совсем наоборот - при правильной математике чем больше датчиков тем точнее известно состояние системы и тем лучше отсекаются сдохшие/проглючившие датчики. Смотреть в сторону алгоритма наименьших квадратов