Почему в vxWorks нет функции main ()?

При использовании vxWorks в качестве платформы разработки мы не можем написать наше приложение со стандартной функцией main(). Почему у нас не может быть основной функции?

1 ответ

Решение

До версии 6.0 VxWorks поддерживал только среду выполнения ядра для задач и не поддерживал процессы, которые являются традиционной средой выполнения приложений в таких ОС, как Unix или Windows. Задачи имеют точку входа, которая является адресом кода для выполнения в качестве задачи. Этот адрес соответствует функции C или ассемблера. Это может быть символ с именем "main", но существуют предположения языка C/C++ о функции main(), которые не поддерживаются в среде ядра (в частности, традиционная обработка параметров argc и argv). Кроме того, до VxWorks 6.0 все задачи выполняли код ядра. Вы можете представить ядро ​​как общий репозиторий кода, связанного вместе, и тогда вы увидите, что у вас не может быть нескольких символов с одним и тем же именем ("main"), так как это приведет к конфликту имен.

Теперь это верно, только если вы связываете код своего приложения с образом ядра. Если вам нужно было загрузить код приложения, то загрузчик модулей согласится загрузить несколько модулей, каждый с подпрограммой main(). Однако последний "главный" символ, зарегистрированный в таблице системных символов, является единственным, к которому вы можете получить доступ через целевую оболочку. Если вы хотите запускать задачи, выполняя код одного из первых загруженных модулей, вам придется использовать адреса предыдущей функции main(). Это возможно, но не удобно. Гораздо более практично давать разные имена точкам входа в задачи (может быть как "xxxStart", где "xxx" - это имя, имеющее значение для того, что задача должна делать).

Начиная с VxWorks 6.0, ОС поддерживает среду процессов. Это означает, среди прочего, что у вас может быть традиционная подпрограмма main() и что ее параметры argc и argv правильно обрабатываются, и что код приложения выполняется в контексте (пользовательском контексте), который отличается от контекста ядра, таким образом, обеспечивая изоляцию между кодом приложения (который может быть ошибочным) и кодом ядра (который не должен быть ошибочным). PAD

Другие вопросы по тегам