代码之家  ›  专栏  ›  技术社区  ›  Benoit

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

  •  5
  • Benoit  · 技术社区  · 16 年前

    当使用vxworks作为开发平台时,我们不能用标准的main()函数编写应用程序。为什么我们不能有一个主函数呢?

    1 回复  |  直到 16 年前
        1
  •  13
  •   Benoit    16 年前

    仅在6.0版本VXWorks之前 支持任务的内核执行环境,但不支持 进程,这是传统的应用程序执行环境 在像Unix或Windows这样的操作系统上。任务的入口点是 要作为任务执行的代码的地址。此地址对应于 C或汇编功能。它可以是一个名为“main”的符号,但是 是C/C++语言关于主函数(不)的假设 在内核环境中支持(特别是传统的 处理argc和argv参数)。此外,在 VXWorks6.0,所有任务执行内核代码。你可以想象内核 作为一个共同的代码存储库,所有代码都链接在一起,然后您将看到 不能有几个相同名称的符号(“main”),因为 这将导致名称冲突。

    现在,只有将应用程序代码链接到 内核映像。如果要下载应用程序代码,则 模块加载程序将接受加载多个模块,每个模块都有一个主模块()。 例行公事。但是,系统中注册的最后一个“主”符号 符号表是唯一可以通过目标shell访问的表。如果 要开始执行第一个加载的代码之一的任务 模块您必须使用前一个主模块()的地址 功能。这是可能的,但不方便。远不止如此。 为任务的入口点指定不同的名称(可能是 就像“xxxstart”,其中“xxx”是一个对任务有意义的名称 应该是的)。

    从VxWorks6.0开始,操作系统支持一个流程环境。这个 这意味着,除其他许多事情外,您可以拥有一个传统的main()。 例行程序,其argc和argv参数已正确处理, 并且应用程序代码是在上下文(用户上下文)中执行的 这与内核上下文不同,因此确保 应用程序代码(可能很脆弱)和内核之间的隔离 代码(不应该是片状的)。 衬垫