我正在使用基於x86的內核來操縱32位內存映射寄存器。只有當CPU產生32位寬的讀取和寫入該寄存器時,我的硬件才能正常工作。該寄存器在32位地址上對齊,並且在字節粒度上不可尋址。控制對存儲器映射寄存器的讀寫訪問寬度C
我該怎麼做才能保證我的C(或C99)編譯器只會在所有情況下生成完整的32位寬讀寫?
例如,如果我不喜歡這樣的讀 - 修改 - 寫操作:
volatile uint32_t* p_reg = 0xCAFE0000;
*p_reg |= 0x01;
我不希望編譯器耍小聰明的事實,只有底部字節的變化,併產生8- bit寬讀/寫。由於機器代碼對於x86上的8位操作通常更密集,所以我害怕出現不必要的優化。一般禁用優化不是一種選擇。
-----編輯-------
一個有趣和非常相關論文:http://www.cs.utah.edu/~regehr/papers/emsoft08-preprint.pdf
對不起「自我推銷」,但您可能會發現該項目對測試內存映射硬件或設置/讀取內存映射寄存器有用:https://code.google.com/p/jeeamtee/wiki/Main。此致,Valentin Heinitz – 2010-10-20 15:31:36