MMIO๋ฅผ ์œ„ํ•œ ํœ˜๋ฐœ์„ฑ(volatile) ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค

  • pointer::read_volatile ๋ฐ pointer::write_volatile์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•˜์ง€ ๋งˆ์„ธ์š”.
  • addr_of! ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž„์‹œ ์šฉ๋„์˜ ์ฐธ์กฐ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ ๊ตฌ์กฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํœ˜๋ฐœ์„ฑ(volatile) ์•ก์„ธ์Šค: ์ฝ๊ธฐ ๋˜๋Š” ์“ฐ๊ธฐ ์ž‘์—…์ด ๋ถ€์ˆ˜ ํšจ๊ณผ(side effect)๋ฅผ ๋™๋ฐ˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ž„์˜๋กœ ์ด๋ฅผ ์ฝ๊ธฐ ์“ฐ๊ธฐ ์ž‘์—…์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ์ค‘๋ณตํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ์ œ๊ฑฐํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์“ฐ๊ณ  ๋‚œ ํ›„ ์ฝ์œผ๋ฉด(์˜ˆ: ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด) ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฝ์€ ๊ฐ’์ด ๋ฐฉ๊ธˆ ์“ด ๊ฐ’๊ณผ ๋™์ผํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์‹ค์ œ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜๋“œ์›จ์–ด์— ๋Œ€ํ•œ ํœ˜๋ฐœ์„ฑ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ ์ผ๋ถ€ ๊ธฐ์กด ํฌ๋ ˆ์ดํŠธ๋Š” ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•˜์ง€๋งŒ ์ด๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ฐธ์กฐ๊ฐ€ ์žˆ์„ ๋•Œ๋งˆ๋‹ค ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋ฅผ ์—ญ์ฐธ์กฐํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • addr_of! ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ์—์„œ ๊ตฌ์กฐ์ฒด ํ•„๋“œ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.