gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:29:33 27 4
gpt4 key购买 nike

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

最佳答案

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

现在,只有当您将应用程序代码链接到内核镜像。如果您要下载应用程序代码,那么模块加载器将接受加载多个模块,每个模块都有一个 main()常规。然而,系统中注册的最后一个“主要”符号符号表是唯一可以通过目标 shell 访问的表。如果您想要启动执行第一个加载的任务之一的代码的任务您必须使用先前 main() 的地址的模块功能。这是可能的,但不方便。还远不止于此为任务的入口点赋予不同的名称是可行的(可能是就像“xxxStart”,其中“xxx”是对任务有意义的名称应该做的)。

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

关于vxworks - 为什么vxWorks中没有main()函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/98465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com