找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3195|回复: 8
收起左侧

C语言us延时函数中:全局变量recive_flag==1时执行return指令是什么意思?return何用

[复制链接]
ID:698854 发表于 2020-6-21 19:50 | 显示全部楼层 |阅读模式
2黑币
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
        }
}

回复

使用道具 举报

ID:743992 发表于 2020-6-21 21:54 | 显示全部楼层
recive_flag是在工程下其他文件里面定义的一个全局变量,可以在recive_flag这个变量名处右键->go to definition就可以看到是在哪里定义的,通过Ctrl+f查找功能可以找到这个变量是在哪里被调用,进行了什么操作,然后再看它什么时候会符合if条件(=1),就可以知道这具体是在干嘛的了。从变量名上能大概推知这是个接收标志位,具体还要结合程序。
至于那个return,照理说这样编译会报错,因为函数返回值类型是void,即没有返回值。如果不谈语法错误的问题,return在这里用途是结束循环,立即跳出这个函数,回到调用这个函数的地方。即延时直接结束。结合来看的话,估计是单片机接收某个信息需要一段时间,因此用这个延时函数来使单片机等待接收完成,接收完成之后标志位置1,延时结束。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:706804 发表于 2020-6-22 08:31 | 显示全部楼层
表示延时结束,返回延时前的代码。
回复

使用道具 举报

ID:592807 发表于 2020-6-22 08:45 | 显示全部楼层
void函数里面带return?看来我的C基础有点差啊。
回复

使用道具 举报

ID:529540 发表于 2020-6-22 16:59 | 显示全部楼层
额, void函数里不能带 return吗?我一直用来当返回语句使用
回复

使用道具 举报

ID:18297 发表于 2020-6-22 21:02 | 显示全部楼层
根据你的程序,个人认为应该是break比较恰当。
这个延时是不固定的,在总时间下具体延时时间由recive_flag决定。
比如设置delay_us(1000),假设是定时1ms(具体多少要看晶振大小)。
可以通过中断按键或其他设置recive_flag由0变1,这样就会提前延时结束。
这样整个延时就不是固定的,由recive_flag的变化决定。
回复

使用道具 举报

ID:592807 发表于 2020-6-23 16:44 | 显示全部楼层
ccdmcu 发表于 2020-6-22 16:59
额, void函数里不能带 return吗?我一直用来当返回语句使用

不能,void是无返回类型的函数,return是返回类型,如果是keil5编译stm32的话会报错,51不清楚
回复

使用道具 举报

ID:419968 发表于 2020-6-24 00:27 | 显示全部楼层
if(recive_flag==1)  数据接收标志,当 recive_flag = 1时表示接到数据,此时推出延时函数,即 return; 执行其他任务,例如解析接收到的数据
回复

使用道具 举报

ID:744327 发表于 2020-6-24 08:44 | 显示全部楼层
不能这样用,因为函数前void是无返回值类型的,return是返回类型,如果这样使用违反程序规定的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表