打印
[其他ST产品]

操作FLASH的等待时间怎么理解

[复制链接]
837|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qhtflsw|  楼主 | 2020-10-26 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
flash, TI, ge, ck, ic
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout)
{
  uint32_t error;
  uint32_t eccerr;
  /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.
     Even if the FLASH operation fails, the BUSY flag will be reset and an error
     flag will be set */
  uint32_t timeout = HAL_GetTick() + Timeout;

  /* Wait if any operation is ongoing */
  while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) != 0x00U)
  {
    if (HAL_GetTick() >= timeout)
    {
      return HAL_TIMEOUT;
    }
  }

这里的 if (HAL_GetTick() >= timeout)怎么理解?
貌似是1MS的基准,如果是FLASH_WaitForLastOperation(1000),就是等待1秒时间吗?
那么HAL_GetTick() >= timeout等同于上一刻的HAL_GetTick() >= HAL_GetTick() + Timeout,意义是啥?

使用特权

评论回复
沙发
jiekou001| | 2020-10-26 14:04 | 只看该作者
那是初始化条件的。

使用特权

评论回复
板凳
jiekou001| | 2020-10-26 14:05 | 只看该作者
就是你要计时5吧,你要先读取当前的是多少,比如读出来是3,那么想要计时5,就要等到读取为8的时候就到时候了。

使用特权

评论回复
地板
jiekou001| | 2020-10-26 14:05 | 只看该作者
所以要你要记的时间段+当前的时间点,就等于停止计时的时间点了。

使用特权

评论回复
5
函数不想导| | 2020-10-26 22:52 | 只看该作者
是在现有的时间段上加上Timeout的时间

使用特权

评论回复
6
x史可法| | 2020-10-26 23:21 | 只看该作者
先读取当前的时间点哦

使用特权

评论回复
7
qhtflsw|  楼主 | 2020-10-27 14:22 | 只看该作者
x史可法 发表于 2020-10-26 23:21
先读取当前的时间点哦

如果我定义了滴答计时,也是1000=1ms中断一次.那么这里应该最大只有1000.假如现在计数到500,那最多也只有500=0.5秒的延时?

使用特权

评论回复
8
qhtflsw|  楼主 | 2020-10-29 17:21 | 只看该作者
x史可法 发表于 2020-10-26 23:21
先读取当前的时间点哦

字面上确实是延时1秒
__weak void HAL_IncTick(void)
{
  uwTick += uwTickFreq;
}

/**
  * @brief Provides a tick value in millisecond.
  * @NOTE This function is declared as __weak to be overwritten in case of other
  *       implementations in user file.
  * @retval tick value
  */
__weak uint32_t HAL_GetTick(void)
{
  return uwTick;
}


这里好像没有做溢出处理,32位=4294967295,如果刚好是4294967295 那么 4294967295》4294967295+1000吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

164

帖子

4

粉丝