打印

关于位移和用位做标志的问题

[复制链接]
1168|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinadz|  楼主 | 2011-11-17 17:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手头这个案子,是做数码管显示,因为即将有8个数码管显示面板,想用一个MCU控制这8个,每个都是独立的,于是就有一些每一个显示过程中的一些标志位。

既然是8个,一个char也是8个位,所以我就打算用 位操作来植标清标。

这是一个简单的事儿。
植标
flag |= 1<<slave;
清标:
flag &= ~(1<<slave);
判标也简单
if(flag & 1<<slave);

最初是由于一个显示BUG让我去追踪这几个标志,结果发现了很恐怖的事情,那就是,这些标志胡乱变化——我的意思,我根本没有到了去植标或者清标,就是说改变它的地方,可是,它自个的数值就变了。

我百思不得其解。
为了不让大家伙莫不着头脑,我上传相关的部分代码。

关于这一部分,我问了些人,也看了了些资料,做了一个变动,就是把这几个标志,包括那个分机slave的变量都设置成unsigned无符号型,但是没用。
因为怀疑是 逻辑移位和 算术移位 混淆了,但是无符号型换了后依然没用。

要说的是,这是一个很小众的玩意,MAXIM的一款内嵌32位CPU的一个东西,主要用来做通信,IO控制的。
它的IDE也很**,是MAXIM自己定制的,用起来别提多难受......

下面上部分代码:


if(CheckWin()) //P03
        {
             BetFlag &= ~(1<<slave); //Forbid BET
             OpenWin |= 1<<slave;
             GetWin &= ~(1<<slave);  
        }

        if(OpenWin & 1<<slave)
        {
              if(counter == 0)
              {
                  for(i = 0;i < 13;i++)
                  {
                       if( (i == winner) && BET[slave])  //winner:reserve & flash
                       {
                            ShowMatrix(slave,i,Left,Flash,BET[slave]);
                            ShowMatrix(slave,i,Right,Flash,BL[slave]);

                       }
                       else  //not win :clear,set to 0
                            ShowMatrix(slave,i,Left,NotFlash,0);
                  }
                  win[slave] = BET[slave][winner] * BL[slave][winner];
                  WinSum[slave] += win[slave];
              }

              counter++;

              if(counter == 2000)
              {
                  counter = 0;
                  OpenWin &= ~(1<<slave);     //只植了一次标志
                  GetWin |= 1<<slave;
              }   
        }

        //if(GetWin & 1<<slave)
        if(GetWin)
        {
            if(AddWin(slave))
            {
                GetWin &= ~(1<<slave); //也只清了一次
                BetFlag &= ~(1<<slave);

            }
            ShowMatrix(slave,slave,Right,NotFlash,GetWin);//这种是显示程序,追踪该数值用
        }

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝