ZHCUAQ1F july 2015 – april 2023
一些程序通过 argc 和 argv 将参数传递给 main()。这对不是从命令行运行的嵌入式程序带来了特殊的挑战。通常,argc 和 argv 通过 .args 段提供给程序。有多种方法可以填充此段以供程序使用。
要使链接器分配大小适当的 .args 段,请使用 --arg_size=size 链接器选项。此选项通知链接器分配一个名为 .args 的未初始化段,这样,加载器可以使用该段从加载器的命令行向程序传递参数。size 是要分配的字节数。当使用 --arg_size 选项时,链接器定义 __c_args__ 符号以包含 .args 段的地址。
加载器负责填充 .args 段。加载器和目标启动代码可以使用 .args 段和 __c_args__ 符号来确定是否以及如何将参数从主机传递到目标程序。参数的格式是指向目标上 char 类型的指针数组。由于加载器的变化,因此没有规定加载器如何确定将哪些参数传递给目标。
如果使用 Code Composer Studio 运行应用程序,则可以使用 Scripting Console 工具来填充 .args 段。要打开此工具,请从 CCS 菜单中选择 View > Scripting Console。可以使用 loadProg 命令将目标文件及其关联的符号表加载到存储器中,并将参数数组传递给 main()。这些参数会自动写入到分配的 .args 段。
loadProg 语法如下,其中 file 是可执行文件,args 是参数对象数组。使用此命令之前,请使用 JavaScript 声明参数数组。
loadProg(file, args)
对于不基本SYS/BIOS的可执行文件,.args 段加载下述数据,其中,argv[] 数组中的每个元素都包含与该参数对应的字符串:
Int argc;
Char * argv[0];
Char * argv[1];
...
Char * argv[n];
对于基于 SYS/BIOS 的可执行文件,.args 段中的元素如下:
Int argc;
Char ** argv; /* points to argv[0] */
Char * envp; /* ignored by loadProg command */
Char * argv[0];
Char * argv[1];
...
Char * argv[n];
有关更多详细信息,请参阅“Scripting Console”页面。