函数形参为volatile类型,这个有什么意义?

2019-07-14 19:10发布

__weak void HAL_Delay(__IO uint32_t Delay)
{
  uint32_t tickstart = 0U;
  tickstart = HAL_GetTick();
  while((HAL_GetTick() - tickstart) < Delay)
  {
  }
}
这是用STM32CubeMX生成的带操作系统工程里面的一个函数,如何理解形参Delay前面的__IO,还望各路高手指导。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
zhifubao
2019-07-15 00:52
将军问鼎 发表于 2017-11-23 20:20
首先说 这个 _IO  的来源,他是在 Core_cm3.h 中重定义的,基本类型就是 volatile  ,那么这个 volatile  这个关键词的本意是 易变的,也就是说,可能会发生多次变化,其实 也就是你告诉了编译器 这个变量 是多变的,那么编译器就不会进行优化编译,而且,处理这个变量时 会直接从 变量地址读取 ...

Delay变量每次从内存中读取或者从CPU寄存器中读取对这个函数没有影响吧。

一周热门 更多>