VxWorks Interpreter - 创建结构

时间:2013-06-14 21:43:18

标签: c struct interpreter vxworks

我是VxWorks开发的新手(使用6.8),我遇到了需要将结构地址传递给函数的情况。是否可以从解释器shell创建结构?我有一份基于v5.5的VxWorks程序员指南的硬拷贝,它明确表示无法从解释器shell形成/创建结构。在VxWorks的更高版本中是否已更改,如果是这样,我将如何从命令行创建结构。

作为VxWorks newb,我希望运行命令

myStruct = {msg1 ="hi", msg2 = "hello" }

然后在另一个语句中使用struct,如

printf("%s\n", myStruct.msg1)

如果在上面的解释器中无法创建结构,我可以通过访问结构中的成员来获取printf语句打印“hi”或“hello”的选项吗?

1 个答案:

答案 0 :(得分:3)

不,从6.9开始,vxWorks C shell不支持结构。请参阅 Wind River Workbench主机Shell用户指南 C解释器限制部分。 shell使用不跟踪其符号类型的符号表,并且无法在命令行上定义类型。

要获得相同的行为,您可以为结构分配内存,然后按地址填充。您分配的大小不一定非常精确,但您的内存偏移确实如此。你的例子很简单,因为你只有2个指针,你的结构不会有任何填充。如果您使用的是32位处理器,那么指针的大小为4个字节。所以第一个指针位于偏移0,1,2和3,然后第二个指针从偏移量4开始。

如,

-> mystruct = malloc(50);
New symbol "mystruct" added to kernel symbol table.
mystruct = 0x3a320a0: value = 63949520 = 0x3cfcad0
-> mystruct[0] = "hi";
0x3cfcad0: value = 61030776 = 0x3a364a0
-> mystruct[4] = "hello";
0x3cfcae0: value 61040928 = 0x3a36920 = ' '
-> printf("%s\n", mystruct[4]);
hello
value = 6 = 0x6

随着你的结构变大,如果有填充,事情会变得棘手。例如,struct { char, int }的大小可以是6或8,具体取决于处理器的对齐要求,因此在尝试获取{{1}的偏移量时,您必须注意这一点。 }。如果它太复杂了,你可以编译代码中的辅助函数,这些函数可能看起来像这个伪代码:

int