Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从0开始递增的整数变为负数_C_Embedded - Fatal编程技术网

C 从0开始递增的整数变为负数

C 从0开始递增的整数变为负数,c,embedded,C,Embedded,我正在从事一个嵌入式系统项目,我试图从红外传感器(使用“脉冲宽度调制”)解调数据。下面的代码只是等待红外传感器开始脉冲,然后测量每个高脉冲和低脉冲的宽度(持续时间) 在这段代码中,我有一个循环,其中我递增一个整数: irPulseSet irReadPulse() { irPulseSet outputPulseSet; int pulseCount = 0; int finished = 0; while(1) { int lowPulse = 0; int highPul

我正在从事一个嵌入式系统项目,我试图从红外传感器(使用“脉冲宽度调制”)解调数据。下面的代码只是等待红外传感器开始脉冲,然后测量每个高脉冲和低脉冲的宽度(持续时间)

在这段代码中,我有一个循环,其中我递增一个整数:

irPulseSet irReadPulse()
{
irPulseSet outputPulseSet;
int pulseCount = 0;

int finished = 0;

while(1)
{
    int lowPulse = 0;
    int highPulse = 0;

    while( bit_is_clear( irSensorPin , irSensorPinNo ) )
    {
        highPulse++;
        _delay_us( 20 );
    }

    while( !bit_is_clear( irSensorPin , irSensorPinNo ) )
    {
        if ( lowPulse > 3250 )
        {
            finished = 1;
            break;
        }
        lowPulse++;
        _delay_us( 20 );
    }

    if ( finished )
        break;

    outputPulseSet.pulses[pulseCount][0] = highPulse * 20;
    outputPulseSet.pulses[pulseCount][1] = lowPulse * 20;

    pulseCount++;
}

// Assign pulse count to output pulse set
outputPulseSet.pulseCount = pulseCount;

return outputPulseSet;
}
因为这是一个嵌入式系统项目,而且我的资源有限,所以我正在用LCD显示器进行调试(因为电路无法连接到计算机)

打印每个脉冲

int irPrintPulses( irPulseSet pulseSet )
{
    int counter;
    for( counter = 0; counter <= pulseSet.pulseCount; counter++ )
    {

       LCDClearScreen();
        char printStr[100];

        sprintf( printStr , "H%iL%i;%i " , pulseSet.pulses[counter][0] , pulseSet.pulses[counter][1] , counter  );
        LCDSendString( printStr );
        _delay_ms(1000);
    }

    _delay_ms(5000);
    LCDClearScreen();
    LCDSendString( "Finished pulse print!" );
    _delay_ms(1000);
    LCDClearScreen();

    return 0;
}
int-irPrintPulses(irPulseSet-pulseSet)
{
整数计数器;

对于(counter=0;counter您有X位表示数字:1位表示信号,X-1位表示值

假设您有一个用4位表示的数字:

0000=0

0001=1

0111=7

如果在此处增加1,将更改第一位(信号位)

1000=-8

试试下面的代码

#include <stdio.h>
#include <limits.h>
int main()
{
   int i = INT_MAX;

   printf("%d\n", i);   
   printf("%d\n", i + 1);
   printf("%u\n", i + 1);

   if(i > 0)
      printf("greater\n");

   i++;

   if(i < 0)        
      printf("what kind of witchcraft is that?");
}
#包括
#包括
int main()
{
int i=int_MAX;
printf(“%d\n”,i);
printf(“%d\n”,i+1);
printf(“%u\n”,i+1);
如果(i>0)
printf(“更大的\n”);
i++;
if(i<0)
printf(“那是什么巫术?”);
}

一旦在最大值后添加一,它将翻转为最大负值,第三个printf将作为无符号值打印(使用第一位不是信号而是值).

您有X位表示数字:1位表示信号,X-1位表示值

假设您有一个用4位表示的数字:

0000=0

0001=1

0111=7

如果在此处增加1,将更改第一位(信号位)

1000=-8

试试下面的代码

#include <stdio.h>
#include <limits.h>
int main()
{
   int i = INT_MAX;

   printf("%d\n", i);   
   printf("%d\n", i + 1);
   printf("%u\n", i + 1);

   if(i > 0)
      printf("greater\n");

   i++;

   if(i < 0)        
      printf("what kind of witchcraft is that?");
}
#包括
#包括
int main()
{
int i=int_MAX;
printf(“%d\n”,i);
printf(“%d\n”,i+1);
printf(“%u\n”,i+1);
如果(i>0)
printf(“更大的\n”);
i++;
if(i<0)
printf(“那是什么巫术?”);
}

一旦在最大值后添加一,它将翻转为最大负值,第三个printf将作为无符号值打印(使用第一位不是信号而是值).

您有X位表示数字:1位表示信号,X-1位表示值

假设您有一个用4位表示的数字:

0000=0

0001=1

0111=7

如果在此处增加1,将更改第一位(信号位)

1000=-8

试试下面的代码

#include <stdio.h>
#include <limits.h>
int main()
{
   int i = INT_MAX;

   printf("%d\n", i);   
   printf("%d\n", i + 1);
   printf("%u\n", i + 1);

   if(i > 0)
      printf("greater\n");

   i++;

   if(i < 0)        
      printf("what kind of witchcraft is that?");
}
#包括
#包括
int main()
{
int i=int_MAX;
printf(“%d\n”,i);
printf(“%d\n”,i+1);
printf(“%u\n”,i+1);
如果(i>0)
printf(“更大的\n”);
i++;
if(i<0)
printf(“那是什么巫术?”);
}

一旦在最大值后添加一,它将翻转为最大负值,第三个printf将作为无符号值打印(使用第一位不是信号而是值).

您有X位表示数字:1位表示信号,X-1位表示值

假设您有一个用4位表示的数字:

0000=0

0001=1

0111=7

如果在此处增加1,将更改第一位(信号位)

1000=-8

试试下面的代码

#include <stdio.h>
#include <limits.h>
int main()
{
   int i = INT_MAX;

   printf("%d\n", i);   
   printf("%d\n", i + 1);
   printf("%u\n", i + 1);

   if(i > 0)
      printf("greater\n");

   i++;

   if(i < 0)        
      printf("what kind of witchcraft is that?");
}
#包括
#包括
int main()
{
int i=int_MAX;
printf(“%d\n”,i);
printf(“%d\n”,i+1);
printf(“%u\n”,i+1);
如果(i>0)
printf(“更大的\n”);
i++;
if(i<0)
printf(“那是什么巫术?”);
}

一旦在最大值后添加一个,它将翻转为最大负值,第三个printf将作为无符号值打印(第一位不是用于信号,而是用于值)…

由于这是嵌入的,我将假设您使用的是16位整数。因此,如果您将highPulse 32768增加一倍,它将溢出并变为负值。该值从0x7fff(正)转换为0x8000(负)

如果一个延迟循环为20usec,这将需要655.36毫秒。任何时候第一个循环必须等待这么长的时间才能转换位,你将得到负数。我认为这是很有可能的


您有32位长吗?如果是这样,最简单的解决方案可能是将它们用于这些计数器。然后溢出大约需要40000秒,这应该足够了。

由于这是嵌入的,我将假设您使用的是16位整数。因此,如果您将highPulse 32768增加一倍,它将溢出,并且me负值。该值从0x7fff(正值)转换为0x8000(负值)

如果一个延迟循环为20usec,这将需要655.36毫秒。任何时候第一个循环必须等待这么长的时间才能转换位,你将得到负数。我认为这是很有可能的


您有32位长吗?如果是这样,最简单的解决方案可能是将它们用于这些计数器。然后溢出大约需要40000秒,这应该足够了。

由于这是嵌入的,我将假设您使用的是16位整数。因此,如果您将highPulse 32768增加一倍,它将溢出,并且me负值。该值从0x7fff(正值)转换为0x8000(负值)

如果一个延迟循环为20usec,这将需要655.36毫秒。任何时候第一个循环必须等待这么长的时间才能转换位,你将得到负数。我认为这是很有可能的


您有32位长吗?如果是这样,最简单的解决方案可能是将它们用于这些计数器。然后溢出大约需要40000秒,这应该足够了。

由于这是嵌入的,我将假设您使用的是16位整数。因此,如果您增加