首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令行参数如何传递给半托管程序?

命令行参数如何传递给半托管程序?
EN

Stack Overflow用户
提问于 2015-09-15 17:12:35
回答 2查看 701关注 0票数 2

我正在查看STM32f4xx项目模板,它是由GNU ARM Eclipse插件生成的,启用了半托管功能。main函数是用argcargv参数定义的,这在独立的嵌入式程序中是非常无用的,但是在半托管调试程序中,它们可以通过某种机制传递。所以我的问题是如何访问这个机制?现在,在不改变模板和项目设置的情况下,argv[0]等于字符串"foobar",我不知道它是从哪里来的。我不知道怎么把其他的字符串传递给它。更多信息:

  • IDE: Eclipse + GNU Arm Eclipse插件
  • 工具链:GCC手臂嵌入
  • 调试: Eclipse + OpenOCD + GDB来自工具链
  • 硬件: STM32f401vC

更新:我开始怀疑这个常量深深地隐藏在newlib代码中。我可以看到call_host (SEMIHOSTING_SYS_GET_CMDLINE, &cmdBlock);在哪里触发args读取(在call_host (SEMIHOSTING_SYS_GET_CMDLINE, &cmdBlock);中),但我不知道它是在哪里处理的。然后,它被转换成一个bkpt 0xAB,从此我迷失了方向。

EN

回答 2

Stack Overflow用户

发布于 2015-09-15 17:45:43

这是你可执行文件的名字。您可能会在创建项目时设置它,然后忘记它。

半宿主环境模拟在类似UNIX的操作系统中作为正常可执行文件运行的应用程序,方法是在运行时传递一个argcargv[],并允许它使用特定的系统调用与主机通信。链接半托管应用程序所需的库包括几个调用,这些调用在启动期间通过JTAG从主机检索此信息。(如果您的目标没有连接到JTAG,或者调试器没有在主机上运行,这将导致应用程序无限期挂起。不要链接到生产中的半托管库!)

有关半托管的更多信息,请参见ARM文档中的“半托管”一节:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471g/Bgbjjgij.html

票数 0
EN

Stack Overflow用户

发布于 2015-09-15 20:22:25

在挖掘了所有可用的源文件后找到了答案。由于OpenOCD用作调试服务器,因此它为主机调用请求提供服务。对于SEMIHOSTING_SYS_GET_CMDLINE (0x15)请求,它使用硬编码的foobar字符串填充argv缓冲区,这可以在OpenOCD src/arm_semihosting.c源文件中观察到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32591897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档