FreeRTOS (и большинство RTOS, если на то пошло) не работают как операционные системы общего назначения (GPOS), они обычно не предназначены для динамической загрузки и выполнения произвольных пользовательских приложений. В большинстве случаев вы используете RTOS, потому что вам требуется жесткий ответ в реальном времени, и выполнение стороннего кода может скомпрометировать это.
Большинство RTOS (включая FreeRTOS) - это не более статические библиотеки ссылок, где ваше встроенное приложение статически связано с RTOS и выполняется как одна многопоточная программа.
Снова много RTOS (например, FreeRTOS) не являются операционными системами в том же смысле, что и GPOS, например Linux. Обычно доступными службами RTOS являются планировщик реального времени, межпроцессорная связь (IPC), синхронизация потоков и таймеры. Средние предметы, такие как файловая система и сетевой стек, например, являются либо дополнительными расширениями, либо должны быть интегрированы из стороннего кода.
Одна из проблем, с которой вы столкнетесь с FreeRTOS, пытаясь достичь своей цели, состоит в том, что «задача» аналогична «потоку», а не «процессу» в смысле модели процесса GPOS. Задача обычно работает в том же пространстве памяти, что и другие задачи без защиты памяти между задачами. Задачи - это не отдельные программы, а потоки в одном приложении.
Если ваша цель не имеет MMU, тогда защита памяти может быть ограничена в любом случае, но вы все равно можете хотеть, чтобы сторонние приложения были концептуально независимы от ОС. Если ваш процессор не имеет MMU, то запуск произвольного стороннего динамически загружаемого кода может быть проблемой для целостности системы, безопасности и безопасности. Даже с MMU простое ядро RTOS, такое как FreeRTOS, не будет использовать его.
Операционные системы с планированием в режиме реального времени, что может загрузки и выполнения кода приложения динамически как отдельные процессы включают в себя:
Также VxWorks имеет способность загружать частично связанные ob ject и динамически связывать его с уже загруженным кодом. Это не то же самое на модели процесса, но более похоже на библиотеку динамической компоновки. В этом контексте стоит упомянуть, что оболочка VxWorks может вызывать любую функцию с внешней привязкой по имени. Таким образом, вы можете загрузить объектный файл, реализующий функцию, и затем запустить эту функцию. В принципе вы могли бы реализовать ту же функциональность на FreeRTOS, но это нетривиально. Оболочка - это одно, но динамическая загрузка и привязка требуют, чтобы таблица символов приложения была резидентной.
Если вам не нужны жесткие режимы реального времени (или ваши требования в режиме реального времени «мягкие»), и у вашей цели достаточно ресурсов, вам может быть лучше, если вы используете Linux или uClinux, которые все чаще используются во встроенных системах.
Если код, который должны выполнять конечные пользователи, тесно связан с целью вашего устройства, а не с «общим назначением» в природе, тогда еще одна возможность разрешить конечным пользователям запускать код - это интегрировать интерпретатор языка сценариев, такой как как Lua. В этом случае вы просто загрузите скрипт из файловой системы и передаете его интерпретатору сценария. Для более общих целей может возникнуть необходимость Java VM.
Как это связано с Lua? – lhf
Я должен был полностью объяснить это. Lua - один из языков сценариев, на который я смотрю, чтобы решить эту проблему. Спасибо, что привлек мое объяснение к моему вниманию. – DevenJ