为什么vxWorks中没有main()函数?
时间:2020-03-06 14:24:13 来源:igfitidea点击:
当使用vxWorks作为开发平台时,我们不能使用标准的main()函数编写应用程序。为什么我们没有主要功能?
解决方案
仅限6.0版之前的VxWorks
支持任务的内核执行环境,但不支持
流程,这是传统的应用程序执行环境
在Unix或者Windows等操作系统上。任务的入口是
要作为任务执行的代码的地址。该地址对应于
C或者汇编函数。它可以是一个名为" main"的符号,但是在那里
是关于main()函数的C / C ++语言假设,并非
在内核环境中受支持(尤其是传统的
argc和argv参数的处理)。此外,在
VxWorks 6.0中,所有任务都执行内核代码。我们可以描绘内核
作为所有链接在一起的通用代码存储库,然后我们将看到
我们不能有多个同名的符号(" main"),因为
这会造成名称冲突。
现在,仅当我们将应用程序代码链接到
内核映像。如果我们要下载应用程序代码,则
模块加载器将接受以main()加载多个模块
常规。但是,系统中注册的最后一个"主要"符号
符号表是我们可以通过目标外壳访问的唯一表。如果
我们要启动执行第一个已加载代码之一的任务
我们必须使用先前main()的地址的模块
功能。这是可能的,但不方便。远不止如此
可以给任务的入口点使用不同的名称(可能是
如" xxxStart",其中" xxx"是对任务有意义的名称
应该做的)。
从VxWorks 6.0开始,操作系统支持过程环境。这
意味着,除其他外,我们可以拥有传统的main()
例程,并正确处理了其argc和argv参数,
并且应用程序代码正在上下文(用户上下文)中执行
这与内核上下文不同,因此确保了
应用程序代码(可能是片状)和内核之间的隔离
代码(不应该是片状的)。
软垫