OpenEdv-开源电子网

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

关于变量的定义????

[复制链接]

12

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2015-7-29
在线时间
33 小时
发表于 2015-8-5 14:29:55 | 显示全部楼层 |阅读模式
5金钱
u8 b;
 void system_LED(void)
 {  
  
 
   if(++b==5)
   {
    LED0=~LED0 ;
     b=0;
   }
 }


 
//定时器3中断服务程序  
 
  u8 timer_count;  
void TIM3_IRQHandler(void)
{        
if(TIM3->SR&0X0001)//溢出中断
{


 switch(++timer_count)
    {
      case 1:  system_LED( )   ;  break; 
      case 2:    ;  break;
      case 3:   ;  break;
      case 4:   ;  break;
      case 5:    ;  break;
      case 6:    ;  break;
      case 7:      ;  break;
      case 8:   ;      break;
      case 9:            ;  break;
      case 10:   timer_count=0   ;  break;
    }
   

    //  LED0=~LED0 ;
}   
TIM3->SR&=~(1<<0);//清除中断标志位    
}

原子哥,这是一段在timer.c中的代码,上面那样的话,没问题。如果把u8   b;放在
u8   b;  //   放在这里没问题。
 void system_LED(void)
 {  
  u8   b;    //放在这里定义就会出错。
 
   if(++b==5)
   {
    LED0=~LED0 ;
     b=0;
   }
 }
问一下原子哥这是什么原因?

最佳答案

查看完整内容[请看2#楼]

你要明白全局变量和局部变量的区别,  u8   b;定义在内部,每次调用结束后b的内存就释放了,也就起不到限制的作用  而在外面是存储在静态存储区,整个代码运行阶段都有效,如果真想放在里面,就改成:  static u8 b;
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-8-5 14:29:56 | 显示全部楼层
你要明白全局变量和局部变量的区别,
 u8   b;定义在内部,每次调用结束后b的内存就释放了,也就起不到限制的作用
 而在外面是存储在静态存储区,整个代码运行阶段都有效,如果真想放在里面,就改成:
 static u8 b;
回复

使用道具 举报

39

主题

598

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2013-12-18
在线时间
41 小时
发表于 2015-8-5 14:37:44 | 显示全部楼层
你这个文件没有宏定义u8或者没有引宏定义u8的头文件把。
回复

使用道具 举报

9

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2015-3-13
在线时间
8 小时
发表于 2015-8-5 14:53:06 | 显示全部楼层
就写成unsigned char 就得了呗。。。。。 我从来就不喜欢简写,感觉这样别人会看着费劲
好好学习天天向上
回复

使用道具 举报

12

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2015-7-29
在线时间
33 小时
 楼主| 发表于 2015-8-5 16:20:59 | 显示全部楼层
好的,明白。我试试!!!谢谢
回复

使用道具 举报

12

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2015-7-29
在线时间
33 小时
 楼主| 发表于 2015-8-5 16:27:26 | 显示全部楼层
回复【4楼】zc123:
---------------------------------
感谢3楼!用你的方法试了,OK的!但还有一个问题没明白,就是定义在内部的变量的内存释放后,是不是就被别的变量的内存占了,所以容易出错???
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
发表于 2015-8-5 16:40:53 | 显示全部楼层
回复【6楼】xianyu861109:
---------------------------------
这。。。在函数内定义的变量是局部变量,你在内部定义并且不给它初值,上来就if,也没有for循环,这个if打死它也进不去呀,你要它干啥。
不知道你说的放在里面会出错是指什么,报错还是你感觉程序输出不对。
自在随心
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-8-5 17:07:09 | 显示全部楼层
回复【6楼】xianyu861109:
---------------------------------
释放了的意思就是每次进入这个函数都会申请一次,按照C语言的习惯,申请局部变量未初始化的话值是未知的,也就是说if判断不会进去,即LED不会翻转,和占用不占用关系不大
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 18:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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