Tim*_*Tim 3 c embedded pointers
在我的嵌入式c程序中,我有一个结构:
struct var{
unsigned long value;
unsigned long length;
+ More
}
Run Code Online (Sandbox Code Playgroud)
这些结构的数组用于保存变量.存储的大多数变量只是存储在'value'中,因此长度设置为1.
但是,这些变量中的一些是数组,我试图将起始地址存储在'value'中.
unsigned long lookup[10];
variables[x].length = 10;
Run Code Online (Sandbox Code Playgroud)
然后我不太确定如何存储地址......
variables[x].value = lookup;
// lookup is a pointer so I cant put it into value
Run Code Online (Sandbox Code Playgroud)
要么
variables[x].value = (unsigned long)lookup;
// value reads back through sprintf+uart as '536874692'
// which couldnt be a valid memory address!
Run Code Online (Sandbox Code Playgroud)
我可能只是放弃并在结构中添加一个指针变量
编辑:
我想避免添加指向结构的指针因为我必须返回并重写闪存读/写函数以保存指针.这些非常复杂,目前正在工作,所以我宁愿不碰它们!
更清洁的选择是使用工会.
struct var{
union {
unsigned long numeric;
void *ptr;
} value;
unsigned long length;
+ More
}
Run Code Online (Sandbox Code Playgroud)
您也可以选择包含类型枚举,通常使用联合使用的部分.
您可以在存储地址value
由它转换成一unsigned long
,为你展现.(我认为你得到的值是一个有效的地址...十六进制,它出现为0x20000EC4 ......看起来你的嵌入式系统的数据段从0x20000000开始,是吗?)
但是,指向int(或long)的指针永远不会"干净".为什么不添加一个
unsigned long *starting_address;
Run Code Online (Sandbox Code Playgroud)
你的结构?然后你可以避免类型转换.如果你担心这会需要更多的内存,你可以使用一个存储或者unsigned long *starting_address
'unsigned long value`的联合,它仍然比铸造更清晰.
归档时间: |
|
查看次数: |
468 次 |
最近记录: |