微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 关于51单片机C编程 return语句的使用

关于51单片机C编程 return语句的使用

时间:11-27 来源:互联网 点击:
案例:

函数写法1:

u8is_timeout(tickstart_time,tickinterval)

{

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

}

函数写法2:
u8is_timeout(tickstart_time,tickinterval)

{

u8status;

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

returnstatus;

}

函数调用方式:

if(is_timeout(start_time,1000))

{

do_something();

}

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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top