你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2464|回复: 4

求教!关于stm8的静态变量

[复制链接]

1

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2014-7-25 10:40:59 | 显示全部楼层 |阅读模式
 最近用stm8l151做一个小程序,发现在函数体内定义的静态变量的值会莫名其妙的被清零,有哪位大大知道这个问题的原因?程序如下,Cosmic编译器。
下面这个函数1ms运行一次,结果发现在USI_BUF > 333的情况,大概0.5s的间隔就会发送一次SendStatus(ch, 0x66);,也就是说o_flag被置0了。但是如果将o_flag在函数体外定义,好像不会出现这个问题。
void schema(void){
  /* Private variables define inside function will cause some problems */
  static u8 i, o_flag;
   if (USI_BUF < 333){// in
      if (o_flag > 0){
        if (++i > 50){
          led3 = 3;
          o_flag = 0;
          i = 0;
          SendStatus(ch, 0x65);
        }
      }
      else{
        i = 0;
      }
    }
    else{// out
      if (o_flag > 0){
        i = 0;
      }
      else{
        if (++i > 50){
          led3 = 0;
          o_flag = 1;
          i = 0;
          SendStatus(ch, 0x66);// Private variables define outside function
        }
      }
    }
  }
}
<
回复

使用道具 举报

3

主题

16

回帖

0

蝴蝶豆

初级会员

最后登录
2020-10-20
发表于 2014-7-25 13:33:26 | 显示全部楼层

回复:求教!关于stm8的静态变量

静态变量要赋值,赋值以后试试看。
全局变量编译器默认赋值为0!
回复 支持 反对

使用道具 举报

6

主题

462

回帖

0

蝴蝶豆

金牌会员

最后登录
2019-12-28
发表于 2014-7-28 16:32:15 | 显示全部楼层

RE:求教!关于stm8的静态变量

定义在函数体内是static局部变量,定义在函数体外是static全局变量,他们如果初始化,就会存储在data段,未被初始化就会在BSS段,会被自动初始化为0.
回复 支持 反对

使用道具 举报

23

主题

195

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2014-7-30 15:51:00 | 显示全部楼层

RE:求教!关于stm8的静态变量

定义变量的时候没有定义好吗
回复 支持 反对

使用道具 举报

24

主题

514

回帖

6

蝴蝶豆

金牌会员

最后登录
2019-4-8
发表于 2014-7-30 16:36:35 | 显示全部楼层

RE:求教!关于stm8的静态变量

你把内部定义的变量赋初值试试,感觉定义有问题
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版