Похоже, вы уже сделали несколько вариантов дизайна.
мы знаем, что требуются различные объекты, взаимодействие между различными объектами и взаимодействие IPC между задачами.
вам нужна многопоточная ОС и UC, который будет ее запускать, обычно это означает, что вы хотите нацелиться на процессор с MMU. Опции ОС - это Quadros, QNX, Linux, Wince и т.д.
Исходя из того, что делают ваши "объекты" (модули лучше подходят для C :)), вы можете определить, какой тип архитектуры вам нужен. Достаточно ли 16-битной арки? нужно больше памяти или работать с большими числами, тогда 32-битный правильный ответ? много работы с плавающей точкой? тогда вам, вероятно, понадобится процессор с FPU. Делать много DSP, как работа? может быть, вам нужен DSP или ОК с DSP-подобными инструкциями или совместным процессом. Запуск графического дисплея? Нужна SoC со встроенным контроллером LCD или ожидайте, что это будет сделано снаружи. Делаете тяжелую 2D графику? нужна SoC с некоторым графическим ускорением.
Составьте список необходимых вам функций и оцените, сколько вашего кода попадает в такие категории, как целочисленные операции, циклы, операции с плавающей запятой, графические операции, операции DSP и т.д.
Это должно позволить вам классифицировать уровень устройства вам нужно. Для некоторых архитектур вы можете кросс-компилировать некоторый код, используя GCC, и эмулировать его, используя qemu поверх linux. Вероятно, это того стоит, только если вам нужно протестировать производительность критического алгоритма на конкретной архитектуре. Это может помочь вам масштабировать скорость, необходимую для вашего приложения.
Второе соображение должно быть энергопотребление и поддержка управления питанием. В сочетании с необходимой производительностью вы можете выбрать DSP, UC, процессор приложений и т.д.
Как уже говорили другие, я не буду беспокоиться об использовании памяти, просто стремитесь к большому, часто разные размеры плунжера совместимы по выводам, так что вы можете просто урезать плунжер для производства. Единственные реальные вопросы, на которые нужно ответить заранее:
* Какого размера адресного пространства мне нужно? 16bit? 32bit? так далее
* Нужен ли мне внешний ОЗУ или будет достаточно внутреннего ОЗУ? <- ответьте после того, как вы выберете архитектуру и сможете заняться охотой на SoC
По большей части выбор среди процессоров одного и того же класса - это "священная война", известная на 32-битном рынке рисков, некоторые поддерживают ARM, некоторые поддерживают холодный огонь, некоторые могут даже поддерживать PIC32. В конце дня, вероятно, любой будет работать. Вы должны выбрать на основе доступных SoC с необходимыми периферийными устройствами, простотой разработки (насколько хороша цепочка инструментов) и стоимостью.
То же самое может быть справедливо в отношении выбора ОС: linux vs QNX vs quadros - это проблема для большинства приложений, обычно лучшим ответом является тот, с которым у вас больше всего опыта. Даже если это окажется немного дороже, сокращение времени разработки часто компенсирует стоимость сборки. Убедитесь, что у ОС есть необходимые функции, общие библиотеки, межпроцессное взаимодействие, каналы, все, что вам нужно.
Как правило, я бы сначала выбрал вашу архитектуру. Это будет иметь гораздо большее влияние на производительность вашего устройства, чем операционная система. Кроме того, операционные системы в этом пространстве часто поддерживаются на многих архитектурах. Кроме того, лучшие ОС соответствуют POSIX, правильно написано, что большая часть кода должна работать на нескольких ОС.
Не расстраивайтесь, если вам нужно сделать несколько попыток сделать правильный выбор. Вы можете найти ядро, которое идеально соответствует вашим потребностям в коде, но после некоторых исследований обнаружите, что оно не поддерживает некоторые второстепенные функции, которые вам нужны, или нет доступного SoC с необходимыми периферийными устройствами, или даже то, что это заказано на 6 месяцев. Просто убедитесь, что после того, как вы сделаете первоначальный выбор, вы исследуете, как дизайн будет объединяться на основе этой части, чтобы вы увидели камень преткновения сейчас, а не на полпути в процессе разработки.