Почему в vxWorks нет функции main ()? - PullRequest
5 голосов
/ 19 сентября 2008

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

1 Ответ

13 голосов
/ 19 сентября 2008

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

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

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

...