C VxWorks解释器-创建结构

C VxWorks解释器-创建结构,c,struct,interpreter,vxworks,C,Struct,Interpreter,Vxworks,我是VxWorks开发新手(使用6.8),遇到了需要将结构地址传递给函数的情况。可以从解释器外壳创建结构吗?我有一份基于v5.5的VxWorks程序员指南的硬拷贝,它明确指出不能从解释器外壳形成/创建结构。这在VxWorks的更高版本中是否发生了变化?如果是,我将如何从命令行生成结构 作为一名VxWorks新手,我希望运行该命令 myStruct = {msg1 ="hi", msg2 = "hello" } 然后在另一个语句中使用struct,如 printf("%s\n", myStruc

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

作为一名VxWorks新手,我希望运行该命令

myStruct = {msg1 ="hi", msg2 = "hello" }
然后在另一个语句中使用struct,如

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

如果无法在上述解释器中创建结构,我可以采用哪些选项,以便通过访问结构中的成员使printf语句打印“hi”或“hello”?

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

要获得相同的行为,可以为结构分配内存,然后按地址填充。分配的大小不一定要精确,但内存偏移量必须精确。您的示例很简单,因为您只有2个指针,并且您的结构没有任何填充。如果您在32位处理器上,则指针的大小为4字节。因此,第一个指针位于偏移量0、1、2和3处,然后第二个指针从偏移量4处开始

例如:

当结构变大时,如果有填充,事情会变得棘手。例如,
struct{char,int}
的大小可能为6或8,这取决于处理器的对齐要求,因此在尝试获取
int
的偏移量时,您必须注意这一点。如果太复杂,您可以在代码中编译可能类似于以下伪代码的helper函数:

struct st { char a; int b; char *c; };
struct st *make_me_a_struct(char a, int b, char *c)
{
    struct st *newstruct = malloc(sizeof(st));
    newstruct->a = a;
    newstruct->b = b;
    newstruct->c = c;
    return newstruct;
}
struct st { char a; int b; char *c; };
struct st *make_me_a_struct(char a, int b, char *c)
{
    struct st *newstruct = malloc(sizeof(st));
    newstruct->a = a;
    newstruct->b = b;
    newstruct->c = c;
    return newstruct;
}