打印

怎么做才最简单

[复制链接]
705|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yufe|  楼主 | 2022-10-15 08:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做了一个测试的板子,要求对输入信号测试。以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。请问大虾们,我怎么做才最简单?

使用特权

评论回复
沙发
zhanghqi| | 2022-10-15 08:31 | 只看该作者
将A先跟0X01求与,判断是否是1

使用特权

评论回复
板凳
llljh| | 2022-10-15 08:40 | 只看该作者
可以考虑用移位来做,移位一次判断一下

if(A&0x80)
...
A=A<<1;
来判断最高位是不是为1

使用特权

评论回复
地板
huanghuac| | 2022-10-15 08:42 | 只看该作者
假如结果存在数组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;
       }
}

使用特权

评论回复
5
happy_10| | 2022-10-15 08:43 | 只看该作者
用MCC生成的串口1接收会有问题,不知是哪里出了问题。

使用特权

评论回复
6
dengdc| | 2022-10-15 08:46 | 只看该作者
楼主试一下,不知可不可以

使用特权

评论回复
7
yufe|  楼主 | 2022-10-15 08:50 | 只看该作者
多谢楼上兄弟

使用特权

评论回复
8
langgq| | 2022-10-15 08:53 | 只看该作者
编译汇编程序的时候报错

使用特权

评论回复
9
MessageRing| | 2022-11-5 19:39 | 只看该作者
可以考虑用移位来做

使用特权

评论回复
10
LOVEEVER| | 2022-11-26 20:35 | 只看该作者
我是不可以理解即使没有到1000次,只要任何一个输入为1就可以停止了

使用特权

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

本版积分规则

983

主题

10170

帖子

1

粉丝