首页 文章

为什么vxWorks中没有main()函数?

提问于
浏览
5

使用vxWorks作为开发平台时,我们无法使用标准的main()函数编写应用程序 . 为什么我们不能有主要功能?

1 回答

  • 13

    在6.0版本之前,VxWorks仅支持任务的内核执行环境,并且不支持进程,这是Unix或Windows等操作系统上的传统应用程序执行环境 . 任务有一个入口点,它是作为任务执行的代码的地址 . 该地址对应于C或汇编函数 . 它可以是一个名为“main”的符号,但有关于main()函数的C / C语言假设在内核环境中不受支持(特别是传统的argc和argv参数处理) . 此外,在VxWorks 6.0之前,所有任务都执行内核代码 . 您可以将内核描绘为所有链接在一起的代码的公共存储库,然后您将看到您不能拥有多个同名的符号(“main”),因为这会产生名称冲突 .

    现在,只有将应用程序代码链接到内核映像时,这才是准确的 . 如果您要下载应用程序代码,那么模块加载器将接受使用main()例程加载多个模块 . 但是,系统符号表中注册的最后一个“主”符号是您可以通过目标shell访问的唯一符号 . 如果要启动执行第一个加载模块之一的代码的任务,则必须使用前一个main()函数的地址 . 这是可能的但不方便 . 为任务的入口点赋予不同的名称更为实际(可能类似于“xxxStart”,其中“xxx”是对任务应该做的有意义的名称) .

    从VxWorks 6.0开始,OS支持流程环境 . 这意味着,除了许多其他方面,您可以拥有传统的main()例程并正确处理其argc和argv参数,并且应用程序代码在与内核上下文不同的上下文(用户上下文)中执行从而确保应用程序代码(可能是片状的)和内核代码(不应该是片状的)之间的隔离 . 垫

相关问题