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位整数。因此,如果您增加