看板 LinuxDev 關於我們 聯絡資訊
請問有沒有人在開發 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