OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2293|回复: 3

没有返回值的函数,为什么其他函数仍可使用其中的变量

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2019-8-13
在线时间
9 小时
发表于 2019-9-14 20:38:18 | 显示全部楼层 |阅读模式
3金钱
C文件开头定义:unsigned int distance_cm = 0;//当前距离
其中一个c文件中函数如下:
void Distance(void)   
{
ultick_5ms++;
if(ultick_5ms >= 15)  //15次以后读取距离值
{
  ultick_5ms = 0;
  GetDistanceDelay();
}
}
//延时的方式读取距离值
void GetDistanceDelay(void)
{
  //发送触发信号,给Trig至少10us的高电平信号
  Trig_SET;
  status = 1;
TIM_SetCounter(TIM4, 0);    //清空定时器值
TIM_Cmd(TIM4, ENABLE);//打开定时器
  while(TIM_GetCounter(TIM4) < 11);   //延时超过10us,跳出while循环
  status = 2;
  Trig_RESET;
  TIM_SetCounter(TIM4, 0);

  while(Echo == 0)//等待Echo高电平输出
  {
   if(TIM_GetCounter(TIM4) > 60000)//回应时间超出正常范围60ms
   {
    status = 0;
    distance_cm = 0;//失败后就后退
    TIM_Cmd(TIM4, DISABLE);//关闭定时器
    return;//本次失败
   }
  }
  TIM_SetCounter(TIM4, 0);
  while(Echo == 1)  //检测到有信号返回
  {
          //当Echo输出高电平的时候,循环检测高电平的持续时间,防止超出正常范围
   int count = TIM_GetCounter(TIM4);  //获取定时器的计数值
   
//建议测量周期在60ms以上,以防止发射信号对回响信号的影响
   if(count > 60000)//回应时间超出正常范围
   {
    status = 0;
    distance_cm = 0;//失败后就后退
    TIM_Cmd(TIM4, DISABLE);//关闭定时器
    return;//本次失败
   }
  }
  //定时器计算Echo电平的持续时间即可算出超声波往返的距离
  //ECho=0时,跳出循环检测,即可获得高电平的持续时间
  dis_count = TIM_GetCounter(TIM4);  //获取定时器的定时时间
  TIM_Cmd(TIM4, DISABLE);//关闭定时器
  distance_cm = (unsigned int)(((long)(dis_count) * 340)/200);//声速340m/s
  status = 0;//准备下次发送
}
另一个C文件中函数如下:
void BarrierProc()  //避障,获取左、右、正前方三个方向的距离后决定小车的运动方向
{
if(distance_cm < 10)//前方10cm内有障碍物
{
  unsigned int dis_left;//左边距离
  unsigned int dis_right;//右边距离
  unsigned int dis_direct;//前方距离
  if(distance_cm < 8)
  {
   CarBack();
   Delayms(400);
  }
  。。。。。
为什么distance_cm 可以被另一个C文件使用,它不是上一个C文件函数中的临时变量吗???????

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1087
金钱
1087
注册时间
2018-12-24
在线时间
113 小时
发表于 2019-9-16 08:38:39 | 显示全部楼层
回复

使用道具 举报

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-10-5
在线时间
30 小时
发表于 2019-9-16 09:50:34 | 显示全部楼层
这是个全局变量啊
回复

使用道具 举报

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-10-5
在线时间
30 小时
发表于 2019-9-16 09:52:32 | 显示全部楼层
全局加了外部声明吧
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 10:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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