标题:
C语言us延时函数中:全局变量recive_flag==1时执行return指令是什么意思?return何用
[打印本页]
作者:
0204417
时间:
2020-6-21 19:50
标题:
C语言us延时函数中:全局变量recive_flag==1时执行return指令是什么意思?return何用
extern int recive_flag; //定义全局变量
/*************us延时函数*************/
void delay_us(int x) //延时函数,要足够快,否则灯会闪烁,而不是慢慢变化。
{
int i;
for(i=x;i>0;i--)
{
if(recive_flag==1) // 全局变量recive_flag==1有什么用?什么意思呢?
{
return; //return什么意思?
}
_nop_(); // 空操作,不执行任何操作,常用于产生一个机器周期的时间延时
_nop_(); //在12M的晶振下每个_nop_()延时1us; 在11.0592MHz晶振的话,一个周期是1.085us,也就是时间是12M周期的1.085倍; 在6M中表示2us
}
}
作者:
dasSpieler
时间:
2020-6-21 21:54
recive_flag是在工程下其他文件里面定义的一个全局变量,可以在recive_flag这个变量名处右键->go to definition就可以看到是在哪里定义的,通过Ctrl+f查找功能可以找到这个变量是在哪里被调用,进行了什么操作,然后再看它什么时候会符合if条件(=1),就可以知道这具体是在干嘛的了。从变量名上能大概推知这是个接收标志位,具体还要结合程序。
至于那个return,照理说这样编译会报错,因为函数返回值类型是void,即没有返回值。如果不谈语法错误的问题,return在这里用途是结束循环,立即跳出这个函数,回到调用这个函数的地方。即延时直接结束。结合来看的话,估计是单片机接收某个信息需要一段时间,因此用这个延时函数来使单片机等待接收完成,接收完成之后标志位置1,延时结束。
作者:
869385911
时间:
2020-6-22 08:31
表示延时结束,返回延时前的代码。
作者:
黄youhui
时间:
2020-6-22 08:45
void函数里面带return?看来我的C基础有点差啊。
作者:
ccdmcu
时间:
2020-6-22 16:59
额, void函数里不能带 return吗?我一直用来当返回语句使用
作者:
zjjhtony
时间:
2020-6-22 21:02
根据你的程序,个人认为应该是break比较恰当。
这个延时是不固定的,在总时间下具体延时时间由recive_flag决定。
比如设置delay_us(1000),假设是定时1ms(具体多少要看晶振大小)。
可以通过中断按键或其他设置recive_flag由0变1,这样就会提前延时结束。
这样整个延时就不是固定的,由recive_flag的变化决定。
作者:
黄youhui
时间:
2020-6-23 16:44
ccdmcu 发表于 2020-6-22 16:59
额, void函数里不能带 return吗?我一直用来当返回语句使用
不能,void是无返回类型的函数,return是返回类型,如果是keil5编译stm32的话会报错,51不清楚
作者:
adject
时间:
2020-6-24 00:27
if(recive_flag==1) 数据接收标志,当 recive_flag = 1时表示接到数据,此时推出延时函数,即 return; 执行其他任务,例如解析接收到的数据
作者:
烈火
时间:
2020-6-24 08:44
不能这样用,因为函数前void是无返回值类型的,return是返回类型,如果这样使用违反程序规定的。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1