怎么做才最简单

[复制链接]
 楼主| yufe 发表于 2019-4-22 18:39 | 显示全部楼层 |阅读模式

最近做了一个测试的板子,要求对输入信号测试。以0表示合格,1表示不合格。一共有32个信号,连续测试1000次,只要有一次出现1就判断该信号不合格。我在开始时定义4个变量,假设A,B,C,D.将第一次测试的就诶过分别赋值给A,B,C,D。然后进行第二次测试,将结果分别与A,B,C,D求或再赋值给A,B,C,D。这样第N+1次的测试结果都与前N次求或过的值再求或。一直到1000次结束。最后我再来判断这四个变量里有多少个1,并且将1对应的序号显示出来。比如A对应的8位分别是1—8。请问大虾们,我怎么做才最简单?
llia 发表于 2019-4-22 18:42 | 显示全部楼层
将A先跟0X01求与,判断是否是1
wangpe 发表于 2019-4-22 18:45 | 显示全部楼层
谢谢,最好是有简单的程序提示。
langgq 发表于 2019-4-22 18:48 | 显示全部楼层
可以考虑用移位来做,移位一次判断一下

if(A&0x80)
...
A=A<<1;
来判断最高位是不是为1
wangzsa 发表于 2019-4-22 18:51 | 显示全部楼层
假如结果存在数组A [4]中;

for (k = 0; k < 1000; k++)
{
        for (i=0; i<4; i++ )
        {
                for (j=0; j<8; j++)
                {
                        result = Signal_Test(k, 8*i+j); // result = 0 or 1. 第k次, 第8*i+j个信号测试结果
                        result <<= (7-j);
                        A |= result;
                }
        }
}

for (i=0; i<4; i++)
{
        for (j=0; j<8; j++)
       {
              if (A & 0x80)
              {
                   printf("The signal %d test failed.\n", i*8 + j);
              }
              A <<= 1;
       }
}
zhuww 发表于 2019-4-22 18:56 | 显示全部楼层

楼主试一下,不知可不可以
 楼主| yufe 发表于 2019-4-22 18:58 | 显示全部楼层
多谢楼上兄弟
您需要登录后才可以回帖 登录 | 注册

本版积分规则

983

主题

10170

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

983

主题

10170

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部