作者mcauther (乘着风去旅行)
看板LinuxDev
标题[问题] memory alignment
时间Mon Nov 10 22:41:44 2008
请问有没有人在开发 embedded system 时碰过这种情形
------------------------------------------------------
test_func()
{
Global *global_struct;
//取得 flash 内容并放入到一个 buffer 然後传给 *global_struct
flash_get(&global_struct);
// 对 global_struct 的 member 做读写
// member 1
// member 2
// member 3
// member 4
// .....
//最後将 global_struct 写入 flash
}
----------------------------------------------------------
最奇怪的是
当我 去 debug 时
会发现在 做完比如说 member3 或 member4
global_struct 所指的位址 居然自己改变了
明明就只是单纯的对 global_struct->memberN 做读写
却会导致莫名奇妙的结果
我怀疑可能是记忆体 alignment 的问题 ( 我使用 mips cpu )
不知道有没有人碰过呢 ?
谢谢
---------------------------------------------------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.238.93
※ 编辑: mcauther 来自: 122.116.238.93 (11/10 22:42)
1F:推 milochen:我以前使用Keil C开发LPC210x的时候有遇过。 11/12 20:11
2F:→ milochen:後来才知道不能总是假设struct为连续记忆体 :) 11/12 20:12
3F:推 milochen:真有需要连续的话,请查GCC,或是写个函数copy一下。 11/12 20:15
4F:推 milochen:文法修正...上面的 「或是」 改成 「不然」 XDXD 11/12 20:17
5F:→ bbsposter:问一下你传进去的是指标,实际的buffer 的 alloc是local 11/20 00:01
6F:→ bbsposter:还是global,假设是local当函数返回时实际的记忆体会被 11/20 00:02
7F:→ bbsposter:改变那就不奇怪了,会这样想是因为您说将内容搬到buffer 11/20 00:04
8F:→ bbsposter:如果不是那还要请问每个member的大小一样吗? 几个byte呢 11/20 00:05