我翻阅了微控制器的一些C头文件,并且我一直看到寄存器地址初始化为vuint。我之前没有遇到过这种数据类型,所以我做了一些搜索,没有得到真正的结果。我得到的最接近的是https://stackoverflow.com/a/12855989,它告诉我v代表“易失性”。所以,我有挥发性无符号整数保存硬件寄存器地址。如在,我有一个数据类型,明确指出“这个地址是可以改变的”,表示硬连线的寄存器,并且不能像以往那样改变。我对vuint的理解是否正确?如果不是,我们为什么用这种方式表示地址?什么是C中的vuint,为什么在我的微控制器中?
回答
内存映射寄存器被设置为易失性,因为它们中的值可能因编译器不知道的外部原因(硬件中断等)而改变。这意味着编译器应该避免某些优化,并确保实际读取地址(而不是针对缓存值进行优化等)。
快速示例,包含一些标志的内存映射寄存器。
read flags
set bit in flags
interrupt sets another bit
<compiler optimizes and cached flags from before>
read flags <contains incorrect cached value>
酷。我没有考虑到它的好意,不正确的优化。让我想知道现在是否有一些我第一次学习微软时遇到的错误可能是由于使用了普通的提示。 –
这是可能的。这仅适用于内存映射硬件寄存器。除了一些RISC处理器上的缓存一致性和其他一些非常技术性的东西外,没有其他很多用例可用于volatile。 –
我认为你是曲解类型。它很可能是一个指向易失性无符号整数的指针,表示无符号整数是易失性的,而不是指针。在通过结构描述硬件寄存器时,这是典型的。每个结构成员将是一个易失性的无符号整数,并在某处定义一个基地址,用于指示寄存器在内存映射中的起始位置。
你很正确。回头看看标题,这是一个指针。示例行:#define MCF_PIT0_PCSR(*(vuint16 *)(&__ IPSBAR [0x150000])) –
- 1. 什么是微控制器中的原子操作?
- 2. 什么是AVR微控制器中的USART数字逻辑?
- 3. 什么是持有我的控制器?
- 4. WCSF中的控制器是什么?
- 5. Java Swing中的控制器是什么?
- 6. sinatra中的控制器是什么?
- 7. 为什么我的变量在控制器中未定义?
- 8. 为什么在我的控制器中找不到动作?
- 9. 为什么我的where查询不在控制器中执行?
- 10. 为什么Time.beginning_of_day无法在我的控制器中工作?
- 11. 继电器控制器和微控制器有什么区别?
- 12. 什么是C#中的字段,我为什么要使用它?
- 13. 什么是C++中的WinXP控制台光标控制字符?
- 14. 什么是上拉和下拉电阻在微控制器
- 15. 为什么我的动画在pygame中微微晃动?
- 16. 控制器的作用是什么,AngularJS中$ scope的作用是什么?
- 17. C#:为什么我的控制器不能识别[HttpGet]?
- 18. 微处理器和微控制器有什么区别?
- 19. 什么是微件容器?
- 20. 什么是弱功能,它们有什么用途?我使用的是stm32f429微控制器
- 21. 为什么我的发布方法不能击中控制器?
- 22. 为什么我能够在控制器中使用控制器阵列?
- 23. 为什么我需要在rails 3控制器路由中指定控制器?
- 24. 什么?在C#中是什么意思?
- 25. 为什么我不在控制器中捕获这个JSON?
- 26. PaginatedList - 为什么我无法在控制器中生成ToList()?
- 27. 为什么我不能在UIPageViewController中设置视图控制器?
- 28. 为什么我不能在laravel控制器中使用GuzzleHttp?
- 29. 为什么我IsMouseOver风格在我的控制器风格
- 30. 控制器的工作是什么?
某处会出现'typedef'。找到它,它可能会变得更清晰。 – marko
找出该类型的一种方法是预处理源文件。例如,对于gcc,您可以使用“-E”选项仅进行预处理,输出将为预处理的源文件。然后,您可以搜索输出以查看vuint是typedef还是#define。 –
很高兴看到它的正确/原始使用情况下的volatile的讨论,而不是关于线程,多处理器的长时间讨论..... – pm100