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

时间:2008-09-19 00:53:05

标签: vxworks

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

1 个答案:

答案 0 :(得分:13)

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

现在,仅当您将应用程序代码链接到时,这才是准确的 核心图像。如果您要下载您的应用程序代码,那么 模块加载器将接受加载几个模块,每个模块都有一个main() 常规。但是最后一个“主”符号在系统中注册 符号表是您可以通过目标shell访问的唯一一个。如果 你想开始执行第一个加载的代码之一的任务 模块你必须使用前一个main()的地址 功能。这是可能的但不方便。它远远更多 实际上给任务的切入点赋予不同的名称(可能是 比如“xxxStart”,其中“xxx”是对任务有意义的名称 应该做的。)

从VxWorks 6.0开始,操作系统支持流程环境。这个 意味着,除了许多其他的东西,你可以有一个传统的主() 例程,并正确处理其argc和argv参数, 并且应用程序代码在上下文中执行(用户上下文) 这与内核上下文不同,从而确保了 应用程序代码(可能是片状的)和内核之间的隔离 代码(不应该是片状的)。 PAD