作者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)
推 milochen:我以前使用Keil C開發LPC210x的時候有遇過。 11/12 20:11
→ milochen:後來才知道不能總是假設struct為連續記憶體 :) 11/12 20:12
推 milochen:真有需要連續的話,請查GCC,或是寫個函數copy一下。 11/12 20:15
推 milochen:文法修正...上面的 「或是」 改成 「不然」 XDXD 11/12 20:17
→ bbsposter:問一下你傳進去的是指標,實際的buffer 的 alloc是local 11/20 00:01
→ bbsposter:還是global,假設是local當函數返回時實際的記憶體會被 11/20 00:02
→ bbsposter:改變那就不奇怪了,會這樣想是因為您說將內容搬到buffer 11/20 00:04
→ bbsposter:如果不是那還要請問每個member的大小一樣嗎? 幾個byte呢 11/20 00:05