6

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

4

1 回答 1

14

在 6.0 版本之前,VxWorks 只支持任务的内核执行环境,不支持进程,这是 Unix 或 Windows 等 OS 上的传统应用程序执行环境。任务有一个入口点,它是作为任务执行的代码的地址。此地址对应于 C 或汇编函数。它可以是一个名为“main”的符号,但是内核环境不支持关于 main() 函数的 C/C++ 语言假设(特别是对 argc 和 argv 参数的传统处理)。此外,在 VxWorks 6.0 之前,所有任务都执行内核代码。你可以把内核想象成一个共同的代码库,所有的代码都链接在一起,然后你会发现你不能有多个同名的符号(“main”),因为这会产生名称冲突。

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

从 VxWorks 6.0 开始,操作系统支持进程环境。这意味着,除其他外,您可以拥有一个传统的 main() 例程,并且它的 argc 和 argv 参数得到正确处理,并且应用程序代码在不同于内核上下文的上下文(用户上下文)中执行,从而确保应用程序代码(可能是不稳定的)和内核代码(不应该是不稳定的)之间的隔离。软垫

于 2008-09-19T00:54:29.350 回答