51单片机return怎么用?单片机return的用法

函数写法1:

    u8 is_timeout(tick start_time, tick interval)

{

    return (get_diff_tick(get_tick(), start_time) > interval);

}

函数写法2:

    u8 is_timeout(tick start_time, tick interval)

{

   u8 status;

   status = get_diff_tick(get_tick(), start_time) > interval);

   return status;

}

函数调用方式:

     if (is_timeout(start_time, 1000))

{

      do_something();

}

问题:在有中断应用的平台上,使用函数写法1可能会造成if语句判断不正确。明明不到1000ms时间,却进入了do_something()。

分析:在51平台,默认情况下函数的调用、中断的切换,并不会将被打断函数的参数、局部变量压入栈,而是存储在固定存储区中。如果在执行return之前恰好需要去执行中断,则51的参数和局部变量值是可以被保存在固定存储区的,而中间数据(如return方式1中,需要返回的值)是不能被保存的,当中断返回后,无法正确获得先前的中间数据,而直接将不定数据返回,造成程序逻辑出错。而我们将return方式改为方式二,则可以保留参数、局部变量,返回正确的值,保证程序逻辑正确。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查