当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《为什么vxWorks中没有main()函数?》经验,为你挑选了1个好方法。

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



1> Benoit..:

在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参数,以及应用程序代码在与内核上下文不同的上下文(用户上下文)中执行从而确保应用程序代码(可能是片状的)和内核代码(不应该是片状的)之间的隔离.垫

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有