簡體   English   中英

什么是C中的vuint,為什么它在我的微控制器中?

[英]What is a vuint in C, and why is it in my microcontroller?

我正在瀏覽微控制器的一些C頭文件,並且不斷看到初始化為vuint的寄存器地址。 我之前沒有遇到過這種數據類型,所以我做了一些搜索,沒有真正的結果。 我得到的最接近的是https://stackoverflow.com/a/12855989 ,它告訴我v代表“volatile”。 所以,我有揮發無符號的整數,持有硬件寄存器地址。 就像在,我有一個數據類型明確指出“這個地址可能會發生變化”,表示硬連線的寄存器,並且不能像以前那樣改變。 我對vuint的理解不正確嗎? 如果沒有,為什么我們要用這種方式表示地址?

內存映射寄存器被設置為易失性的,因為其中的值可能由於編譯器不知道的外部原因(硬件中斷等)而改變。 這意味着編譯器應該避免某些優化並確保實際對地址進行讀取(而不是針對緩存值進行優化等)。

快速示例,包含一些標志的內存映射寄存器。

read flags
set bit in flags
interrupt sets another bit
<compiler optimizes and cached flags from before>
read flags <contains incorrect cached value>

我認為你誤解了這種類型。 它很可能是指向易失性無符號整數的指針,表明無符號整數是易失性的而不是指針。 當通過結構描述硬件寄存器時,這是典型的。 每個結構成員將是一個易失的無符號整數,並且在某處將定義一個基址,該基址指示寄存器在內存映射中的起始位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM